@gearbox-protocol/sdk 11.6.8 → 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.
@@ -102,7 +102,7 @@ class GearboxSDK {
102
102
  /**
103
103
  * Token metadata such as symbol and decimals
104
104
  */
105
- tokensMeta = new import_base.TokensMeta(void 0, "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
+ });
@@ -101,7 +101,7 @@ class GearboxSDK {
101
101
  /**
102
102
  * Token metadata such as symbol and decimals
103
103
  */
104
- tokensMeta = new TokensMeta(void 0, "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 { AddressMap, formatBN } from "../utils/index.js";
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
@@ -4,4 +4,5 @@ export * from "./bot-permissions.js";
4
4
  export * from "./math.js";
5
5
  export * from "./networks.js";
6
6
  export * from "./periphery.js";
7
+ export * from "./phantom-tokens.js";
7
8
  export * from "./versions.js";
@@ -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,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 declare class TokensMeta extends AddressMap<TokenMetaData> {
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
  }
@@ -4,4 +4,5 @@ export * from "./bot-permissions.js";
4
4
  export * from "./math.js";
5
5
  export * from "./networks.js";
6
6
  export * from "./periphery.js";
7
+ export * from "./phantom-tokens.js";
7
8
  export * from "./versions.js";
@@ -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];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "11.6.8",
3
+ "version": "11.7.0",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",