@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.
@@ -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
+ });
@@ -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 = 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
+ };
@@ -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 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];
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "11.6.7",
3
+ "version": "11.7.0",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",