@gearbox-protocol/sdk 11.6.8 → 11.7.1
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-gov-legacy/tokens/normal.js +0 -3
- package/dist/cjs/sdk/sdk-gov-legacy/tokens/wrapped.js +0 -24
- package/dist/cjs/sdk/sdk-legacy/core/creditAccount.spec.js +8 -4
- package/dist/cjs/sdk/sdk-legacy/tokens/tokenData.js +2 -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-gov-legacy/tokens/normal.js +0 -2
- package/dist/esm/sdk/sdk-gov-legacy/tokens/wrapped.js +0 -16
- package/dist/esm/sdk/sdk-legacy/core/creditAccount.spec.js +8 -4
- package/dist/esm/sdk/sdk-legacy/tokens/tokenData.js +2 -0
- package/dist/types/permissionless/utils/price-update/get-prices.d.ts +1 -1
- 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-gov-legacy/tokens/normal.d.ts +0 -1
- package/dist/types/sdk/sdk-gov-legacy/tokens/wrapped.d.ts +1 -3
- package/dist/types/sdk/sdk-legacy/tokens/tokenData.d.ts +2 -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
|
+
});
|
|
@@ -18,7 +18,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var normal_exports = {};
|
|
20
20
|
__export(normal_exports, {
|
|
21
|
-
isNormalToken: () => isNormalToken,
|
|
22
21
|
normalTokens: () => normalTokens
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(normal_exports);
|
|
@@ -557,9 +556,7 @@ const normalTokens = {
|
|
|
557
556
|
type: { AllNetworks: import_tokenType.TokenType.NORMAL_TOKEN }
|
|
558
557
|
}
|
|
559
558
|
};
|
|
560
|
-
const isNormalToken = (t) => typeof t === "string" && !!normalTokens[t];
|
|
561
559
|
// Annotate the CommonJS export names for ESM import in node:
|
|
562
560
|
0 && (module.exports = {
|
|
563
|
-
isNormalToken,
|
|
564
561
|
normalTokens
|
|
565
562
|
});
|
|
@@ -3,10 +3,6 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
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
6
|
var __copyProps = (to, from, except, desc) => {
|
|
11
7
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
8
|
for (let key of __getOwnPropNames(from))
|
|
@@ -17,24 +13,4 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
13
|
};
|
|
18
14
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
15
|
var wrapped_exports = {};
|
|
20
|
-
__export(wrapped_exports, {
|
|
21
|
-
isWrappedToken: () => isWrappedToken
|
|
22
|
-
});
|
|
23
16
|
module.exports = __toCommonJS(wrapped_exports);
|
|
24
|
-
var import_tokenType = require("./tokenType.js");
|
|
25
|
-
const wrappedTokens = {
|
|
26
|
-
sfrxETH: {
|
|
27
|
-
name: "sfrxETH",
|
|
28
|
-
symbol: "sfrxETH",
|
|
29
|
-
type: {
|
|
30
|
-
Mainnet: import_tokenType.TokenType.WRAPPED_TOKEN,
|
|
31
|
-
Arbitrum: import_tokenType.TokenType.NORMAL_TOKEN,
|
|
32
|
-
Optimism: import_tokenType.TokenType.NORMAL_TOKEN
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
const isWrappedToken = (t) => typeof t === "string" && !!wrappedTokens[t];
|
|
37
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
38
|
-
0 && (module.exports = {
|
|
39
|
-
isWrappedToken
|
|
40
|
-
});
|
|
@@ -15,25 +15,29 @@ const tokenDataList = {
|
|
|
15
15
|
addr: WETH,
|
|
16
16
|
decimals: 18,
|
|
17
17
|
symbol: "WETH",
|
|
18
|
-
name: ""
|
|
18
|
+
name: "",
|
|
19
|
+
isPhantom: false
|
|
19
20
|
}),
|
|
20
21
|
[DAI]: new import_tokenData.TokenData({
|
|
21
22
|
addr: DAI,
|
|
22
23
|
decimals: 18,
|
|
23
24
|
symbol: "DAI",
|
|
24
|
-
name: ""
|
|
25
|
+
name: "",
|
|
26
|
+
isPhantom: false
|
|
25
27
|
}),
|
|
26
28
|
[USDC]: new import_tokenData.TokenData({
|
|
27
29
|
addr: USDC,
|
|
28
30
|
decimals: 6,
|
|
29
31
|
symbol: "USDC",
|
|
30
|
-
name: ""
|
|
32
|
+
name: "",
|
|
33
|
+
isPhantom: false
|
|
31
34
|
}),
|
|
32
35
|
[STETH]: new import_tokenData.TokenData({
|
|
33
36
|
addr: STETH,
|
|
34
37
|
decimals: 18,
|
|
35
38
|
symbol: "STETH",
|
|
36
|
-
name: ""
|
|
39
|
+
name: "",
|
|
40
|
+
isPhantom: false
|
|
37
41
|
})
|
|
38
42
|
};
|
|
39
43
|
const prices = {
|
|
@@ -69,6 +69,7 @@ class TokenData {
|
|
|
69
69
|
name;
|
|
70
70
|
decimals;
|
|
71
71
|
icon;
|
|
72
|
+
isPhantom;
|
|
72
73
|
constructor(payload) {
|
|
73
74
|
const address = payload.addr.toLowerCase();
|
|
74
75
|
this.address = address;
|
|
@@ -77,6 +78,7 @@ class TokenData {
|
|
|
77
78
|
this.name = payload.name;
|
|
78
79
|
this.decimals = payload.decimals;
|
|
79
80
|
this.icon = TokenData.getTokenIcon(payload.symbol);
|
|
81
|
+
this.isPhantom = payload.isPhantom ?? false;
|
|
80
82
|
}
|
|
81
83
|
static getTokenIcon(symbol) {
|
|
82
84
|
return `${import_endpoint.GearboxBackendApi.getStaticTokenUrl()}${symbol.toLowerCase()}.svg`;
|
|
@@ -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
|
+
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { TokenType } from "./tokenType.js";
|
|
2
|
-
const wrappedTokens = {
|
|
3
|
-
sfrxETH: {
|
|
4
|
-
name: "sfrxETH",
|
|
5
|
-
symbol: "sfrxETH",
|
|
6
|
-
type: {
|
|
7
|
-
Mainnet: TokenType.WRAPPED_TOKEN,
|
|
8
|
-
Arbitrum: TokenType.NORMAL_TOKEN,
|
|
9
|
-
Optimism: TokenType.NORMAL_TOKEN
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
const isWrappedToken = (t) => typeof t === "string" && !!wrappedTokens[t];
|
|
14
|
-
export {
|
|
15
|
-
isWrappedToken
|
|
16
|
-
};
|
|
@@ -18,25 +18,29 @@ const tokenDataList = {
|
|
|
18
18
|
addr: WETH,
|
|
19
19
|
decimals: 18,
|
|
20
20
|
symbol: "WETH",
|
|
21
|
-
name: ""
|
|
21
|
+
name: "",
|
|
22
|
+
isPhantom: false
|
|
22
23
|
}),
|
|
23
24
|
[DAI]: new TokenData({
|
|
24
25
|
addr: DAI,
|
|
25
26
|
decimals: 18,
|
|
26
27
|
symbol: "DAI",
|
|
27
|
-
name: ""
|
|
28
|
+
name: "",
|
|
29
|
+
isPhantom: false
|
|
28
30
|
}),
|
|
29
31
|
[USDC]: new TokenData({
|
|
30
32
|
addr: USDC,
|
|
31
33
|
decimals: 6,
|
|
32
34
|
symbol: "USDC",
|
|
33
|
-
name: ""
|
|
35
|
+
name: "",
|
|
36
|
+
isPhantom: false
|
|
34
37
|
}),
|
|
35
38
|
[STETH]: new TokenData({
|
|
36
39
|
addr: STETH,
|
|
37
40
|
decimals: 18,
|
|
38
41
|
symbol: "STETH",
|
|
39
|
-
name: ""
|
|
42
|
+
name: "",
|
|
43
|
+
isPhantom: false
|
|
40
44
|
})
|
|
41
45
|
};
|
|
42
46
|
const prices = {
|
|
@@ -46,6 +46,7 @@ class TokenData {
|
|
|
46
46
|
name;
|
|
47
47
|
decimals;
|
|
48
48
|
icon;
|
|
49
|
+
isPhantom;
|
|
49
50
|
constructor(payload) {
|
|
50
51
|
const address = payload.addr.toLowerCase();
|
|
51
52
|
this.address = address;
|
|
@@ -54,6 +55,7 @@ class TokenData {
|
|
|
54
55
|
this.name = payload.name;
|
|
55
56
|
this.decimals = payload.decimals;
|
|
56
57
|
this.icon = TokenData.getTokenIcon(payload.symbol);
|
|
58
|
+
this.isPhantom = payload.isPhantom ?? false;
|
|
57
59
|
}
|
|
58
60
|
static getTokenIcon(symbol) {
|
|
59
61
|
return `${GearboxBackendApi.getStaticTokenUrl()}${symbol.toLowerCase()}.svg`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Address, type PublicClient } from "viem";
|
|
2
|
-
export declare function getPrices({ client, priceFeeds, chunkSize, gasLimit }: {
|
|
2
|
+
export declare function getPrices({ client, priceFeeds, chunkSize, gasLimit, }: {
|
|
3
3
|
client: PublicClient;
|
|
4
4
|
priceFeeds: Address[];
|
|
5
5
|
chunkSize?: number;
|
|
@@ -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];
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import type { TokenBase } from "./token.js";
|
|
2
|
-
import type { TokenNetwork } from "./tokenType.js";
|
|
3
|
-
import { TokenType } from "./tokenType.js";
|
|
2
|
+
import type { TokenNetwork, TokenType } from "./tokenType.js";
|
|
4
3
|
export type WrappedToken = "sfrxETH";
|
|
5
4
|
export type WrappedTokenData = {
|
|
6
5
|
symbol: WrappedToken;
|
|
7
6
|
type: Partial<Record<TokenNetwork, TokenType.WRAPPED_TOKEN | TokenType.NORMAL_TOKEN>>;
|
|
8
7
|
} & TokenBase;
|
|
9
|
-
export declare const isWrappedToken: (t: unknown) => t is WrappedToken;
|
|
@@ -6,6 +6,7 @@ export interface TokenDataPayload {
|
|
|
6
6
|
title?: string;
|
|
7
7
|
name: string;
|
|
8
8
|
decimals: number;
|
|
9
|
+
isPhantom: boolean;
|
|
9
10
|
}
|
|
10
11
|
export declare class TokenData {
|
|
11
12
|
readonly address: Address;
|
|
@@ -14,6 +15,7 @@ export declare class TokenData {
|
|
|
14
15
|
readonly name: string;
|
|
15
16
|
readonly decimals: number;
|
|
16
17
|
readonly icon: string;
|
|
18
|
+
readonly isPhantom: boolean;
|
|
17
19
|
constructor(payload: TokenDataPayload);
|
|
18
20
|
static getTokenIcon(symbol: string): string;
|
|
19
21
|
}
|