@gearbox-protocol/sdk 11.6.7 → 11.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/sdk/GearboxSDK.js +2 -1
- package/dist/cjs/sdk/base/TokensMeta.js +57 -0
- package/dist/cjs/sdk/constants/index.js +2 -0
- package/dist/cjs/sdk/constants/phantom-tokens.js +36 -0
- package/dist/cjs/sdk/sdk-legacy/core/transactions.js +4 -0
- package/dist/esm/sdk/GearboxSDK.js +2 -1
- package/dist/esm/sdk/base/TokensMeta.js +58 -1
- package/dist/esm/sdk/constants/index.js +1 -0
- package/dist/esm/sdk/constants/phantom-tokens.js +12 -0
- package/dist/esm/sdk/sdk-legacy/core/transactions.js +4 -0
- package/dist/types/sdk/base/TokensMeta.d.ts +25 -1
- package/dist/types/sdk/constants/index.d.ts +1 -0
- package/dist/types/sdk/constants/phantom-tokens.d.ts +2 -0
- package/dist/types/sdk/sdk-legacy/core/transactions.d.ts +4 -0
- package/package.json +1 -1
|
@@ -102,7 +102,7 @@ class GearboxSDK {
|
|
|
102
102
|
/**
|
|
103
103
|
* Token metadata such as symbol and decimals
|
|
104
104
|
*/
|
|
105
|
-
tokensMeta
|
|
105
|
+
tokensMeta;
|
|
106
106
|
addHook = this.#hooks.addHook.bind(this.#hooks);
|
|
107
107
|
removeHook = this.#hooks.removeHook.bind(this.#hooks);
|
|
108
108
|
static async attach(options) {
|
|
@@ -165,6 +165,7 @@ class GearboxSDK {
|
|
|
165
165
|
if (options.gasLimit !== null) {
|
|
166
166
|
this.gasLimit = options.gasLimit || 550000000n;
|
|
167
167
|
}
|
|
168
|
+
this.tokensMeta = new import_base.TokensMeta(this);
|
|
168
169
|
}
|
|
169
170
|
async #attach(opts) {
|
|
170
171
|
const {
|
|
@@ -21,14 +21,45 @@ __export(TokensMeta_exports, {
|
|
|
21
21
|
TokensMeta: () => TokensMeta
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(TokensMeta_exports);
|
|
24
|
+
var import_iVersion = require("../../abi/iVersion.js");
|
|
25
|
+
var import__ = require("../index.js");
|
|
24
26
|
var import_utils = require("../utils/index.js");
|
|
25
27
|
class TokensMeta extends import_utils.AddressMap {
|
|
28
|
+
#sdk;
|
|
29
|
+
#phantomTokensLoaded;
|
|
30
|
+
constructor(sdk) {
|
|
31
|
+
super(void 0, "tokensMeta");
|
|
32
|
+
this.#sdk = sdk;
|
|
33
|
+
}
|
|
26
34
|
symbol(token) {
|
|
27
35
|
return this.mustGet(token).symbol;
|
|
28
36
|
}
|
|
29
37
|
decimals(token) {
|
|
30
38
|
return this.mustGet(token).decimals;
|
|
31
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns the phantom token type for a given token, or undefined for normal tokens
|
|
42
|
+
* Throws if the phantom token data is not loaded
|
|
43
|
+
*/
|
|
44
|
+
phantomTokenType(token) {
|
|
45
|
+
if (!this.#phantomTokensLoaded?.has(token)) {
|
|
46
|
+
throw new Error("phantom token data not loaded");
|
|
47
|
+
}
|
|
48
|
+
return this.mustGet(token).phantomTokenType;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns a map of all phantom tokens
|
|
52
|
+
* Throws if the phantom token data is not loaded
|
|
53
|
+
*/
|
|
54
|
+
get phantomTokens() {
|
|
55
|
+
if (!this.#phantomTokensLoaded) {
|
|
56
|
+
throw new Error("phantom tokens not loaded");
|
|
57
|
+
}
|
|
58
|
+
return new import_utils.AddressMap(
|
|
59
|
+
this.entries().filter(([_, v]) => !!v.phantomTokenType),
|
|
60
|
+
"phantomTokens"
|
|
61
|
+
);
|
|
62
|
+
}
|
|
32
63
|
formatBN(arg0, arg1, arg2) {
|
|
33
64
|
const token = typeof arg0 === "object" ? arg0.token : arg0;
|
|
34
65
|
const amount = typeof arg0 === "object" ? arg0.balance : arg1;
|
|
@@ -47,6 +78,32 @@ class TokensMeta extends import_utils.AddressMap {
|
|
|
47
78
|
}
|
|
48
79
|
return meta;
|
|
49
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Loads phantom token data for all known tokens from chain
|
|
83
|
+
*/
|
|
84
|
+
async loadPhantomTokens() {
|
|
85
|
+
this.#phantomTokensLoaded = new import_utils.AddressSet();
|
|
86
|
+
const tokens = this.keys();
|
|
87
|
+
const resp = await this.#sdk.client.multicall({
|
|
88
|
+
contracts: tokens.map(
|
|
89
|
+
(t) => ({
|
|
90
|
+
address: t,
|
|
91
|
+
abi: import_iVersion.iVersionAbi,
|
|
92
|
+
functionName: "contractType"
|
|
93
|
+
})
|
|
94
|
+
),
|
|
95
|
+
allowFailure: true
|
|
96
|
+
});
|
|
97
|
+
for (let i = 0; i < resp.length; i++) {
|
|
98
|
+
if (resp[i].status === "success") {
|
|
99
|
+
const contractType = (0, import__.bytes32ToString)(resp[i].result);
|
|
100
|
+
if (contractType.startsWith("PHANTOM_TOKEN::")) {
|
|
101
|
+
this.mustGet(tokens[i]).phantomTokenType = contractType;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
this.#phantomTokensLoaded.add(tokens[i]);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
50
107
|
}
|
|
51
108
|
// Annotate the CommonJS export names for ESM import in node:
|
|
52
109
|
0 && (module.exports = {
|
|
@@ -21,6 +21,7 @@ __reExport(constants_exports, require("./bot-permissions.js"), module.exports);
|
|
|
21
21
|
__reExport(constants_exports, require("./math.js"), module.exports);
|
|
22
22
|
__reExport(constants_exports, require("./networks.js"), module.exports);
|
|
23
23
|
__reExport(constants_exports, require("./periphery.js"), module.exports);
|
|
24
|
+
__reExport(constants_exports, require("./phantom-tokens.js"), module.exports);
|
|
24
25
|
__reExport(constants_exports, require("./versions.js"), module.exports);
|
|
25
26
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
27
|
0 && (module.exports = {
|
|
@@ -30,5 +31,6 @@ __reExport(constants_exports, require("./versions.js"), module.exports);
|
|
|
30
31
|
...require("./math.js"),
|
|
31
32
|
...require("./networks.js"),
|
|
32
33
|
...require("./periphery.js"),
|
|
34
|
+
...require("./phantom-tokens.js"),
|
|
33
35
|
...require("./versions.js")
|
|
34
36
|
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var phantom_tokens_exports = {};
|
|
20
|
+
__export(phantom_tokens_exports, {
|
|
21
|
+
PHANTOM_TOKEN_CONTRACT_TYPES: () => PHANTOM_TOKEN_CONTRACT_TYPES
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(phantom_tokens_exports);
|
|
24
|
+
const PHANTOM_TOKEN_CONTRACT_TYPES = [
|
|
25
|
+
"PHANTOM_TOKEN::CONVEX",
|
|
26
|
+
"PHANTOM_TOKEN::INFINIFI_UNWIND",
|
|
27
|
+
"PHANTOM_TOKEN::INFRARED",
|
|
28
|
+
"PHANTOM_TOKEN::MELLOW_WITHDRAWAL",
|
|
29
|
+
"PHANTOM_TOKEN::MIDAS_REDEMPTION",
|
|
30
|
+
"PHANTOM_TOKEN::STAKING_REWARDS",
|
|
31
|
+
"PHANTOM_TOKEN::UPSHIFT_WITHDRAW"
|
|
32
|
+
];
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
PHANTOM_TOKEN_CONTRACT_TYPES
|
|
36
|
+
});
|
|
@@ -332,6 +332,8 @@ class TxOpenMultitokenAccount extends import_eventOrTx.EVMTx {
|
|
|
332
332
|
underlyingToken;
|
|
333
333
|
assets;
|
|
334
334
|
withdrawDebt;
|
|
335
|
+
targetToken;
|
|
336
|
+
creditManager;
|
|
335
337
|
constructor(opts) {
|
|
336
338
|
super(opts);
|
|
337
339
|
this.borrowedAmount = opts.borrowedAmount;
|
|
@@ -339,6 +341,8 @@ class TxOpenMultitokenAccount extends import_eventOrTx.EVMTx {
|
|
|
339
341
|
this.creditManagerName = opts.creditManagerName;
|
|
340
342
|
this.assets = opts.assets.map((a) => opts.tokensList[a]);
|
|
341
343
|
this.withdrawDebt = opts.withdrawDebt;
|
|
344
|
+
this.targetToken = opts.targetToken;
|
|
345
|
+
this.creditManager = opts.creditManager;
|
|
342
346
|
}
|
|
343
347
|
_toString() {
|
|
344
348
|
const assetSymbols = this.assets.reduce((acc, asset) => {
|
|
@@ -101,7 +101,7 @@ class GearboxSDK {
|
|
|
101
101
|
/**
|
|
102
102
|
* Token metadata such as symbol and decimals
|
|
103
103
|
*/
|
|
104
|
-
tokensMeta
|
|
104
|
+
tokensMeta;
|
|
105
105
|
addHook = this.#hooks.addHook.bind(this.#hooks);
|
|
106
106
|
removeHook = this.#hooks.removeHook.bind(this.#hooks);
|
|
107
107
|
static async attach(options) {
|
|
@@ -164,6 +164,7 @@ class GearboxSDK {
|
|
|
164
164
|
if (options.gasLimit !== null) {
|
|
165
165
|
this.gasLimit = options.gasLimit || 550000000n;
|
|
166
166
|
}
|
|
167
|
+
this.tokensMeta = new TokensMeta(this);
|
|
167
168
|
}
|
|
168
169
|
async #attach(opts) {
|
|
169
170
|
const {
|
|
@@ -1,11 +1,42 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { iVersionAbi } from "../../abi/iVersion.js";
|
|
2
|
+
import { bytes32ToString } from "../index.js";
|
|
3
|
+
import { AddressMap, AddressSet, formatBN } from "../utils/index.js";
|
|
2
4
|
class TokensMeta extends AddressMap {
|
|
5
|
+
#sdk;
|
|
6
|
+
#phantomTokensLoaded;
|
|
7
|
+
constructor(sdk) {
|
|
8
|
+
super(void 0, "tokensMeta");
|
|
9
|
+
this.#sdk = sdk;
|
|
10
|
+
}
|
|
3
11
|
symbol(token) {
|
|
4
12
|
return this.mustGet(token).symbol;
|
|
5
13
|
}
|
|
6
14
|
decimals(token) {
|
|
7
15
|
return this.mustGet(token).decimals;
|
|
8
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the phantom token type for a given token, or undefined for normal tokens
|
|
19
|
+
* Throws if the phantom token data is not loaded
|
|
20
|
+
*/
|
|
21
|
+
phantomTokenType(token) {
|
|
22
|
+
if (!this.#phantomTokensLoaded?.has(token)) {
|
|
23
|
+
throw new Error("phantom token data not loaded");
|
|
24
|
+
}
|
|
25
|
+
return this.mustGet(token).phantomTokenType;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns a map of all phantom tokens
|
|
29
|
+
* Throws if the phantom token data is not loaded
|
|
30
|
+
*/
|
|
31
|
+
get phantomTokens() {
|
|
32
|
+
if (!this.#phantomTokensLoaded) {
|
|
33
|
+
throw new Error("phantom tokens not loaded");
|
|
34
|
+
}
|
|
35
|
+
return new AddressMap(
|
|
36
|
+
this.entries().filter(([_, v]) => !!v.phantomTokenType),
|
|
37
|
+
"phantomTokens"
|
|
38
|
+
);
|
|
39
|
+
}
|
|
9
40
|
formatBN(arg0, arg1, arg2) {
|
|
10
41
|
const token = typeof arg0 === "object" ? arg0.token : arg0;
|
|
11
42
|
const amount = typeof arg0 === "object" ? arg0.balance : arg1;
|
|
@@ -24,6 +55,32 @@ class TokensMeta extends AddressMap {
|
|
|
24
55
|
}
|
|
25
56
|
return meta;
|
|
26
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Loads phantom token data for all known tokens from chain
|
|
60
|
+
*/
|
|
61
|
+
async loadPhantomTokens() {
|
|
62
|
+
this.#phantomTokensLoaded = new AddressSet();
|
|
63
|
+
const tokens = this.keys();
|
|
64
|
+
const resp = await this.#sdk.client.multicall({
|
|
65
|
+
contracts: tokens.map(
|
|
66
|
+
(t) => ({
|
|
67
|
+
address: t,
|
|
68
|
+
abi: iVersionAbi,
|
|
69
|
+
functionName: "contractType"
|
|
70
|
+
})
|
|
71
|
+
),
|
|
72
|
+
allowFailure: true
|
|
73
|
+
});
|
|
74
|
+
for (let i = 0; i < resp.length; i++) {
|
|
75
|
+
if (resp[i].status === "success") {
|
|
76
|
+
const contractType = bytes32ToString(resp[i].result);
|
|
77
|
+
if (contractType.startsWith("PHANTOM_TOKEN::")) {
|
|
78
|
+
this.mustGet(tokens[i]).phantomTokenType = contractType;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
this.#phantomTokensLoaded.add(tokens[i]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
27
84
|
}
|
|
28
85
|
export {
|
|
29
86
|
TokensMeta
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const PHANTOM_TOKEN_CONTRACT_TYPES = [
|
|
2
|
+
"PHANTOM_TOKEN::CONVEX",
|
|
3
|
+
"PHANTOM_TOKEN::INFINIFI_UNWIND",
|
|
4
|
+
"PHANTOM_TOKEN::INFRARED",
|
|
5
|
+
"PHANTOM_TOKEN::MELLOW_WITHDRAWAL",
|
|
6
|
+
"PHANTOM_TOKEN::MIDAS_REDEMPTION",
|
|
7
|
+
"PHANTOM_TOKEN::STAKING_REWARDS",
|
|
8
|
+
"PHANTOM_TOKEN::UPSHIFT_WITHDRAW"
|
|
9
|
+
];
|
|
10
|
+
export {
|
|
11
|
+
PHANTOM_TOKEN_CONTRACT_TYPES
|
|
12
|
+
};
|
|
@@ -282,6 +282,8 @@ class TxOpenMultitokenAccount extends EVMTx {
|
|
|
282
282
|
underlyingToken;
|
|
283
283
|
assets;
|
|
284
284
|
withdrawDebt;
|
|
285
|
+
targetToken;
|
|
286
|
+
creditManager;
|
|
285
287
|
constructor(opts) {
|
|
286
288
|
super(opts);
|
|
287
289
|
this.borrowedAmount = opts.borrowedAmount;
|
|
@@ -289,6 +291,8 @@ class TxOpenMultitokenAccount extends EVMTx {
|
|
|
289
291
|
this.creditManagerName = opts.creditManagerName;
|
|
290
292
|
this.assets = opts.assets.map((a) => opts.tokensList[a]);
|
|
291
293
|
this.withdrawDebt = opts.withdrawDebt;
|
|
294
|
+
this.targetToken = opts.targetToken;
|
|
295
|
+
this.creditManager = opts.creditManager;
|
|
292
296
|
}
|
|
293
297
|
_toString() {
|
|
294
298
|
const assetSymbols = this.assets.reduce((acc, asset) => {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Address } from "viem";
|
|
2
|
+
import type { GearboxSDK } from "../GearboxSDK.js";
|
|
3
|
+
import { type PhantomTokenContractType } from "../index.js";
|
|
2
4
|
import type { Asset } from "../router/index.js";
|
|
3
5
|
import { AddressMap } from "../utils/index.js";
|
|
4
6
|
import type { TokenMetaData } from "./types.js";
|
|
@@ -6,11 +8,33 @@ export interface FormatBNOptions {
|
|
|
6
8
|
precision?: number;
|
|
7
9
|
symbol?: boolean;
|
|
8
10
|
}
|
|
9
|
-
export
|
|
11
|
+
export interface TokenMetaDataExtended extends TokenMetaData {
|
|
12
|
+
/**
|
|
13
|
+
* Undefined if token is not a phantom token
|
|
14
|
+
*/
|
|
15
|
+
phantomTokenType?: PhantomTokenContractType;
|
|
16
|
+
}
|
|
17
|
+
export declare class TokensMeta extends AddressMap<TokenMetaDataExtended> {
|
|
18
|
+
#private;
|
|
19
|
+
constructor(sdk: GearboxSDK);
|
|
10
20
|
symbol(token: Address): string;
|
|
11
21
|
decimals(token: Address): number;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the phantom token type for a given token, or undefined for normal tokens
|
|
24
|
+
* Throws if the phantom token data is not loaded
|
|
25
|
+
*/
|
|
26
|
+
phantomTokenType(token: Address): PhantomTokenContractType | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Returns a map of all phantom tokens
|
|
29
|
+
* Throws if the phantom token data is not loaded
|
|
30
|
+
*/
|
|
31
|
+
get phantomTokens(): AddressMap<TokenMetaDataExtended>;
|
|
12
32
|
formatBN(asset: Asset, options?: FormatBNOptions): string;
|
|
13
33
|
formatBN(token: Address, amount: number | bigint | string | undefined, options?: FormatBNOptions): string;
|
|
14
34
|
findBySymbol(symbol: string): TokenMetaData | undefined;
|
|
15
35
|
mustFindBySymbol(symbol: string): TokenMetaData;
|
|
36
|
+
/**
|
|
37
|
+
* Loads phantom token data for all known tokens from chain
|
|
38
|
+
*/
|
|
39
|
+
loadPhantomTokens(): Promise<void>;
|
|
16
40
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const PHANTOM_TOKEN_CONTRACT_TYPES: readonly ["PHANTOM_TOKEN::CONVEX", "PHANTOM_TOKEN::INFINIFI_UNWIND", "PHANTOM_TOKEN::INFRARED", "PHANTOM_TOKEN::MELLOW_WITHDRAWAL", "PHANTOM_TOKEN::MIDAS_REDEMPTION", "PHANTOM_TOKEN::STAKING_REWARDS", "PHANTOM_TOKEN::UPSHIFT_WITHDRAW"];
|
|
2
|
+
export type PhantomTokenContractType = (typeof PHANTOM_TOKEN_CONTRACT_TYPES)[number];
|
|
@@ -133,6 +133,8 @@ interface TxOpenMultitokenAccountProps extends EVMTxProps {
|
|
|
133
133
|
underlyingToken: Address;
|
|
134
134
|
assets: Array<Address>;
|
|
135
135
|
withdrawDebt: boolean;
|
|
136
|
+
targetToken: Address | undefined;
|
|
137
|
+
creditManager: Address;
|
|
136
138
|
tokensList: Record<Address, TokenData>;
|
|
137
139
|
}
|
|
138
140
|
export declare class TxOpenMultitokenAccount extends EVMTx {
|
|
@@ -141,6 +143,8 @@ export declare class TxOpenMultitokenAccount extends EVMTx {
|
|
|
141
143
|
readonly underlyingToken: TokenData;
|
|
142
144
|
readonly assets: Array<TokenData>;
|
|
143
145
|
readonly withdrawDebt: boolean;
|
|
146
|
+
readonly targetToken: Address | undefined;
|
|
147
|
+
readonly creditManager: Address;
|
|
144
148
|
constructor(opts: TxOpenMultitokenAccountProps);
|
|
145
149
|
_toString(): string;
|
|
146
150
|
serialize(): TxSerialized;
|