@gearbox-protocol/sdk 10.1.0 → 10.2.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.
@@ -56,9 +56,12 @@ class AbstractRouterContract extends import_base.BaseContract {
56
56
  const token = t;
57
57
  const isEnabled = (mask & ca.enabledTokensMask) !== 0n;
58
58
  expectedBalances.upsert(token, { token, balance });
59
- const decimals = this.sdk.tokensMeta.decimals(token);
60
- const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
61
- if (keepAssetsSet.has(token.toLowerCase()) || balance < minBalance || !isEnabled) {
59
+ if (keepAssetsSet.has(token.toLowerCase()) || !isEnabled || (0, import_utils.isDust)({
60
+ sdk: this.sdk,
61
+ token,
62
+ balance,
63
+ creditManager: ca.creditManager
64
+ })) {
62
65
  leftoverBalances.upsert(token, {
63
66
  token,
64
67
  balance: (0, import_helpers.limitLeftover)(balance, token) ?? balance
@@ -26,6 +26,7 @@ var import_gearboxRouter = require("../../abi/router/gearboxRouter.js");
26
26
  var import_sdk_legacy = require("../sdk-legacy/index.js");
27
27
  var import_AddressMap = require("../utils/AddressMap.js");
28
28
  var import_formatter = require("../utils/formatter.js");
29
+ var import_utils = require("../utils/index.js");
29
30
  var import_AbstractRouterContract = require("./AbstractRouterContract.js");
30
31
  var import_helpers = require("./helpers.js");
31
32
  const abi = import_gearboxRouter.gearboxRouterAbi;
@@ -247,9 +248,12 @@ class RouterV310Contract extends import_AbstractRouterContract.AbstractRouterCon
247
248
  creditManager.address
248
249
  );
249
250
  const inUSD = assets.filter(({ token, balance }) => {
250
- const decimals = this.sdk.tokensMeta.decimals(token);
251
- const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
252
- return balance >= minBalance;
251
+ return !(0, import_utils.isDust)({
252
+ sdk: this.sdk,
253
+ token,
254
+ balance,
255
+ creditManager: creditManager.address
256
+ });
253
257
  }).map(({ token, balance }) => {
254
258
  return {
255
259
  token,
@@ -18,9 +18,11 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var filterDust_exports = {};
20
20
  __export(filterDust_exports, {
21
- filterDust: () => filterDust
21
+ filterDust: () => filterDust,
22
+ filterDustUSD: () => filterDustUSD
22
23
  });
23
24
  module.exports = __toCommonJS(filterDust_exports);
25
+ var import_isDust = require("./isDust.js");
24
26
  function filterDust(account) {
25
27
  const result = {};
26
28
  for (const { token, balance } of account.tokens) {
@@ -30,7 +32,24 @@ function filterDust(account) {
30
32
  }
31
33
  return result;
32
34
  }
35
+ function filterDustUSD(opts) {
36
+ const { sdk, account, minBalanceUSD } = opts;
37
+ const result = {};
38
+ for (const { token, balance } of account.tokens) {
39
+ if (!(0, import_isDust.isDust)({
40
+ sdk,
41
+ token,
42
+ balance,
43
+ creditManager: account.creditManager,
44
+ minBalanceUSD
45
+ })) {
46
+ result[token] = balance;
47
+ }
48
+ }
49
+ return result;
50
+ }
33
51
  // Annotate the CommonJS export names for ESM import in node:
34
52
  0 && (module.exports = {
35
- filterDust
53
+ filterDust,
54
+ filterDustUSD
36
55
  });
@@ -24,6 +24,7 @@ __reExport(utils_exports, require("./etherscan.js"), module.exports);
24
24
  __reExport(utils_exports, require("./filterDust.js"), module.exports);
25
25
  __reExport(utils_exports, require("./formatter.js"), module.exports);
26
26
  __reExport(utils_exports, require("./hex.js"), module.exports);
27
+ __reExport(utils_exports, require("./isDust.js"), module.exports);
27
28
  __reExport(utils_exports, require("./json.js"), module.exports);
28
29
  __reExport(utils_exports, require("./mappers.js"), module.exports);
29
30
  __reExport(utils_exports, require("./retry.js"), module.exports);
@@ -41,6 +42,7 @@ __reExport(utils_exports, require("./zod.js"), module.exports);
41
42
  ...require("./filterDust.js"),
42
43
  ...require("./formatter.js"),
43
44
  ...require("./hex.js"),
45
+ ...require("./isDust.js"),
44
46
  ...require("./json.js"),
45
47
  ...require("./mappers.js"),
46
48
  ...require("./retry.js"),
@@ -0,0 +1,40 @@
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 isDust_exports = {};
20
+ __export(isDust_exports, {
21
+ isDust: () => isDust
22
+ });
23
+ module.exports = __toCommonJS(isDust_exports);
24
+ var import_constants = require("../constants/index.js");
25
+ function isDust(opts) {
26
+ const { sdk, token, balance, creditManager } = opts;
27
+ const minBalanceUSD = (opts.minBalanceUSD ?? 10n) * 10n ** 8n;
28
+ const { priceOracle } = sdk.marketRegister.findByCreditManager(creditManager);
29
+ let balanceUSD = import_constants.MAX_UINT256;
30
+ try {
31
+ balanceUSD = priceOracle.convertToUSD(token, balance);
32
+ } catch {
33
+ balanceUSD = priceOracle.convertToUSD(token, balance, true);
34
+ }
35
+ return balanceUSD < minBalanceUSD;
36
+ }
37
+ // Annotate the CommonJS export names for ESM import in node:
38
+ 0 && (module.exports = {
39
+ isDust
40
+ });
@@ -1,5 +1,5 @@
1
1
  import { BaseContract } from "../base/index.js";
2
- import { AddressMap } from "../utils/index.js";
2
+ import { AddressMap, isDust } from "../utils/index.js";
3
3
  import { Hooks } from "../utils/internal/index.js";
4
4
  import { limitLeftover } from "./helpers.js";
5
5
  class AbstractRouterContract extends BaseContract {
@@ -33,9 +33,12 @@ class AbstractRouterContract extends BaseContract {
33
33
  const token = t;
34
34
  const isEnabled = (mask & ca.enabledTokensMask) !== 0n;
35
35
  expectedBalances.upsert(token, { token, balance });
36
- const decimals = this.sdk.tokensMeta.decimals(token);
37
- const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
38
- if (keepAssetsSet.has(token.toLowerCase()) || balance < minBalance || !isEnabled) {
36
+ if (keepAssetsSet.has(token.toLowerCase()) || !isEnabled || isDust({
37
+ sdk: this.sdk,
38
+ token,
39
+ balance,
40
+ creditManager: ca.creditManager
41
+ })) {
39
42
  leftoverBalances.upsert(token, {
40
43
  token,
41
44
  balance: limitLeftover(balance, token) ?? balance
@@ -3,6 +3,7 @@ import { gearboxRouterAbi } from "../../abi/router/gearboxRouter.js";
3
3
  import { BigIntMath } from "../sdk-legacy/index.js";
4
4
  import { AddressMap } from "../utils/AddressMap.js";
5
5
  import { formatBN } from "../utils/formatter.js";
6
+ import { isDust } from "../utils/index.js";
6
7
  import { AbstractRouterContract } from "./AbstractRouterContract.js";
7
8
  import { assetsMap, balancesMap, limitLeftover } from "./helpers.js";
8
9
  const abi = gearboxRouterAbi;
@@ -224,9 +225,12 @@ class RouterV310Contract extends AbstractRouterContract {
224
225
  creditManager.address
225
226
  );
226
227
  const inUSD = assets.filter(({ token, balance }) => {
227
- const decimals = this.sdk.tokensMeta.decimals(token);
228
- const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
229
- return balance >= minBalance;
228
+ return !isDust({
229
+ sdk: this.sdk,
230
+ token,
231
+ balance,
232
+ creditManager: creditManager.address
233
+ });
230
234
  }).map(({ token, balance }) => {
231
235
  return {
232
236
  token,
@@ -1,3 +1,4 @@
1
+ import { isDust } from "./isDust.js";
1
2
  function filterDust(account) {
2
3
  const result = {};
3
4
  for (const { token, balance } of account.tokens) {
@@ -7,6 +8,23 @@ function filterDust(account) {
7
8
  }
8
9
  return result;
9
10
  }
11
+ function filterDustUSD(opts) {
12
+ const { sdk, account, minBalanceUSD } = opts;
13
+ const result = {};
14
+ for (const { token, balance } of account.tokens) {
15
+ if (!isDust({
16
+ sdk,
17
+ token,
18
+ balance,
19
+ creditManager: account.creditManager,
20
+ minBalanceUSD
21
+ })) {
22
+ result[token] = balance;
23
+ }
24
+ }
25
+ return result;
26
+ }
10
27
  export {
11
- filterDust
28
+ filterDust,
29
+ filterDustUSD
12
30
  };
@@ -7,6 +7,7 @@ export * from "./etherscan.js";
7
7
  export * from "./filterDust.js";
8
8
  export * from "./formatter.js";
9
9
  export * from "./hex.js";
10
+ export * from "./isDust.js";
10
11
  export * from "./json.js";
11
12
  export * from "./mappers.js";
12
13
  export * from "./retry.js";
@@ -0,0 +1,16 @@
1
+ import { MAX_UINT256 } from "../constants/index.js";
2
+ function isDust(opts) {
3
+ const { sdk, token, balance, creditManager } = opts;
4
+ const minBalanceUSD = (opts.minBalanceUSD ?? 10n) * 10n ** 8n;
5
+ const { priceOracle } = sdk.marketRegister.findByCreditManager(creditManager);
6
+ let balanceUSD = MAX_UINT256;
7
+ try {
8
+ balanceUSD = priceOracle.convertToUSD(token, balance);
9
+ } catch {
10
+ balanceUSD = priceOracle.convertToUSD(token, balance, true);
11
+ }
12
+ return balanceUSD < minBalanceUSD;
13
+ }
14
+ export {
15
+ isDust
16
+ };
@@ -1,8 +1,18 @@
1
1
  import type { Address } from "viem";
2
2
  import type { CreditAccountData } from "../base/index.js";
3
+ import type { GearboxSDK } from "../GearboxSDK.js";
3
4
  /**
4
5
  * Helper function to filter out low-balance assets
5
6
  * @param account
6
7
  * @returns
7
8
  */
8
9
  export declare function filterDust(account: CreditAccountData): Record<Address, bigint>;
10
+ export interface FilterDustUSDOptions {
11
+ sdk: GearboxSDK;
12
+ account: CreditAccountData;
13
+ /**
14
+ * Dust threshold in USD, without decimals
15
+ */
16
+ minBalanceUSD?: bigint;
17
+ }
18
+ export declare function filterDustUSD(opts: FilterDustUSDOptions): Record<Address, bigint>;
@@ -7,6 +7,7 @@ export * from "./etherscan.js";
7
7
  export * from "./filterDust.js";
8
8
  export * from "./formatter.js";
9
9
  export * from "./hex.js";
10
+ export * from "./isDust.js";
10
11
  export * from "./json.js";
11
12
  export * from "./mappers.js";
12
13
  export * from "./retry.js";
@@ -0,0 +1,18 @@
1
+ import type { Address } from "viem";
2
+ import type { GearboxSDK } from "../GearboxSDK.js";
3
+ export interface IsDustOptions {
4
+ sdk: GearboxSDK;
5
+ token: Address;
6
+ balance: bigint;
7
+ creditManager: Address;
8
+ /**
9
+ * Dust threshold in USD, without decimals
10
+ */
11
+ minBalanceUSD?: bigint;
12
+ }
13
+ /**
14
+ * Checks if balance of token is dust, by checking getting usd prices from oracle
15
+ * @param opts
16
+ * @returns
17
+ */
18
+ export declare function isDust(opts: IsDustOptions): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "10.1.0",
3
+ "version": "10.2.0",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",
@@ -51,7 +51,7 @@
51
51
  "typecheck:ci": "tsc --noEmit"
52
52
  },
53
53
  "dependencies": {
54
- "@gearbox-protocol/integrations-v3": "1.48.0",
54
+ "@gearbox-protocol/integrations-v3": "1.49.0",
55
55
  "@redstone-finance/evm-connector": "^0.9.0",
56
56
  "@redstone-finance/protocol": "^0.9.0",
57
57
  "@redstone-finance/sdk": "^0.9.0",
@@ -65,22 +65,22 @@
65
65
  "zod": "^4.1.12"
66
66
  },
67
67
  "devDependencies": {
68
- "@biomejs/biome": "^2.2.6",
68
+ "@biomejs/biome": "^2.3.1",
69
69
  "@commitlint/cli": "^20.1.0",
70
70
  "@commitlint/config-conventional": "^20.0.0",
71
- "@gearbox-protocol/biome-config": "^1.0.5",
71
+ "@gearbox-protocol/biome-config": "^1.0.7",
72
72
  "@types/cross-spawn": "^6.0.6",
73
73
  "axios": "^1.12.2",
74
74
  "cross-spawn": "^7.0.6",
75
75
  "husky": "^9.1.7",
76
- "lint-staged": "^16.2.4",
77
- "pino": "^10.0.0",
76
+ "lint-staged": "^16.2.6",
77
+ "pino": "^10.1.0",
78
78
  "pino-pretty": "^13.1.2",
79
79
  "tsup": "^8.5.0",
80
80
  "tsx": "^4.20.6",
81
81
  "typescript": "^5.9.3",
82
82
  "viem-deal": "^2.0.4",
83
- "vitest": "^3.2.4"
83
+ "vitest": "^4.0.4"
84
84
  },
85
85
  "peerDependencies": {
86
86
  "axios": "^1.0.0",