@gearbox-protocol/sdk 10.1.0 → 10.2.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/dev/calcLiquidatableLTs.js +1 -2
- package/dist/cjs/sdk/router/AbstractRouterContract.js +6 -3
- package/dist/cjs/sdk/router/RouterV310Contract.js +7 -3
- package/dist/cjs/sdk/utils/filterDust.js +21 -2
- package/dist/cjs/sdk/utils/index.js +2 -0
- package/dist/cjs/sdk/utils/isDust.js +40 -0
- package/dist/esm/dev/calcLiquidatableLTs.js +2 -3
- package/dist/esm/sdk/router/AbstractRouterContract.js +7 -4
- package/dist/esm/sdk/router/RouterV310Contract.js +7 -3
- package/dist/esm/sdk/utils/filterDust.js +19 -1
- package/dist/esm/sdk/utils/index.js +1 -0
- package/dist/esm/sdk/utils/isDust.js +16 -0
- package/dist/types/sdk/utils/filterDust.d.ts +10 -0
- package/dist/types/sdk/utils/index.d.ts +1 -0
- package/dist/types/sdk/utils/isDust.d.ts +18 -0
- package/package.json +7 -7
|
@@ -26,8 +26,7 @@ async function calcLiquidatableLTs(sdk, ca, factor = 9990n, logger) {
|
|
|
26
26
|
const cm = sdk.marketRegister.findCreditManager(ca.creditManager);
|
|
27
27
|
const market = sdk.marketRegister.findByCreditManager(ca.creditManager);
|
|
28
28
|
const weightedBalances = ca.tokens.filter(({ token, balance }) => {
|
|
29
|
-
|
|
30
|
-
return balance > minBalance;
|
|
29
|
+
return !(0, import_sdk.isDust)({ sdk, token, balance, creditManager: ca.creditManager });
|
|
31
30
|
}).map((t) => {
|
|
32
31
|
const { token, balance } = t;
|
|
33
32
|
const balanceU = market.priceOracle.convert(
|
|
@@ -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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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,10 +1,9 @@
|
|
|
1
|
-
import { PERCENTAGE_FACTOR, WAD } from "../sdk/index.js";
|
|
1
|
+
import { isDust, PERCENTAGE_FACTOR, WAD } from "../sdk/index.js";
|
|
2
2
|
async function calcLiquidatableLTs(sdk, ca, factor = 9990n, logger) {
|
|
3
3
|
const cm = sdk.marketRegister.findCreditManager(ca.creditManager);
|
|
4
4
|
const market = sdk.marketRegister.findByCreditManager(ca.creditManager);
|
|
5
5
|
const weightedBalances = ca.tokens.filter(({ token, balance }) => {
|
|
6
|
-
|
|
7
|
-
return balance > minBalance;
|
|
6
|
+
return !isDust({ sdk, token, balance, creditManager: ca.creditManager });
|
|
8
7
|
}).map((t) => {
|
|
9
8
|
const { token, balance } = t;
|
|
10
9
|
const balanceU = market.priceOracle.convert(
|
|
@@ -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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
};
|
|
@@ -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>;
|
|
@@ -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
|
|
3
|
+
"version": "10.2.1",
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
77
|
-
"pino": "^10.
|
|
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": "^
|
|
83
|
+
"vitest": "^4.0.4"
|
|
84
84
|
},
|
|
85
85
|
"peerDependencies": {
|
|
86
86
|
"axios": "^1.0.0",
|