@gearbox-protocol/sdk 8.24.4 → 8.24.6
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/router/AbstractRouterContract.js +6 -2
- package/dist/cjs/sdk/router/RouterV300Contract.js +17 -4
- package/dist/cjs/sdk/router/RouterV310Contract.js +6 -3
- package/dist/cjs/sdk/router/helpers.js +13 -2
- package/dist/cjs/sdk/sdk-legacy/tokens/tokenData.js +1 -0
- package/dist/esm/sdk/router/AbstractRouterContract.js +6 -2
- package/dist/esm/sdk/router/RouterV300Contract.js +23 -5
- package/dist/esm/sdk/router/RouterV310Contract.js +7 -4
- package/dist/esm/sdk/router/helpers.js +11 -1
- package/dist/esm/sdk/sdk-legacy/tokens/tokenData.js +1 -0
- package/dist/types/sdk/router/helpers.d.ts +7 -0
- package/package.json +1 -1
|
@@ -24,6 +24,7 @@ module.exports = __toCommonJS(AbstractRouterContract_exports);
|
|
|
24
24
|
var import_base = require("../base/index.js");
|
|
25
25
|
var import_utils = require("../utils/index.js");
|
|
26
26
|
var import_internal = require("../utils/internal/index.js");
|
|
27
|
+
var import_helpers = require("./helpers.js");
|
|
27
28
|
class AbstractRouterContract extends import_base.BaseContract {
|
|
28
29
|
hooks = new import_internal.Hooks();
|
|
29
30
|
addHook = this.hooks.addHook.bind(this.hooks);
|
|
@@ -38,7 +39,7 @@ class AbstractRouterContract extends import_base.BaseContract {
|
|
|
38
39
|
expected.upsert(token, { token, balance: actual > 10n ? actual : 0n });
|
|
39
40
|
leftover.upsert(token, {
|
|
40
41
|
token,
|
|
41
|
-
balance: leftoverBalances.get(token)?.balance || 1n
|
|
42
|
+
balance: (0, import_helpers.limitLeftover)(leftoverBalances.get(token)?.balance || 1n, token) ?? 1n
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
return {
|
|
@@ -58,7 +59,10 @@ class AbstractRouterContract extends import_base.BaseContract {
|
|
|
58
59
|
const decimals = this.sdk.tokensMeta.decimals(token);
|
|
59
60
|
const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
|
|
60
61
|
if (keepAssetsSet.has(token.toLowerCase()) || balance < minBalance || !isEnabled) {
|
|
61
|
-
leftoverBalances.upsert(token, {
|
|
62
|
+
leftoverBalances.upsert(token, {
|
|
63
|
+
token,
|
|
64
|
+
balance: (0, import_helpers.limitLeftover)(balance, token) ?? balance
|
|
65
|
+
});
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
return {
|
|
@@ -77,7 +77,7 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
77
77
|
tokenOut,
|
|
78
78
|
connectors,
|
|
79
79
|
amount,
|
|
80
|
-
leftoverAmount
|
|
80
|
+
leftoverAmount: (0, import_helpers.limitLeftover)(leftoverAmount, tokenIn) ?? 0n
|
|
81
81
|
};
|
|
82
82
|
const { result } = await this.contract.simulate.findAllSwaps(
|
|
83
83
|
[swapTask, BigInt(slippage)],
|
|
@@ -151,7 +151,7 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
151
151
|
}));
|
|
152
152
|
const leftover = cm.collateralTokens.map((token) => ({
|
|
153
153
|
token,
|
|
154
|
-
balance: leftoverMap.get(token) ?? 0n
|
|
154
|
+
balance: (0, import_helpers.limitLeftover)(leftoverMap.get(token), token) ?? 0n
|
|
155
155
|
}));
|
|
156
156
|
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
157
157
|
const {
|
|
@@ -196,7 +196,12 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
196
196
|
slippage,
|
|
197
197
|
balances
|
|
198
198
|
}) {
|
|
199
|
-
const {
|
|
199
|
+
const {
|
|
200
|
+
pathOptions,
|
|
201
|
+
expected,
|
|
202
|
+
leftover: leftoverUnsafe,
|
|
203
|
+
connectors
|
|
204
|
+
} = this.getFindClosePathInput(
|
|
200
205
|
ca,
|
|
201
206
|
cm,
|
|
202
207
|
balances ? {
|
|
@@ -205,6 +210,10 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
205
210
|
tokensToClaim: (0, import_helpers.assetsMap)(balances.tokensToClaim || [])
|
|
206
211
|
} : void 0
|
|
207
212
|
);
|
|
213
|
+
const leftover = leftoverUnsafe.map((a) => ({
|
|
214
|
+
...a,
|
|
215
|
+
balance: (0, import_helpers.limitLeftover)(a.balance, a.token) ?? 0n
|
|
216
|
+
}));
|
|
208
217
|
await this.hooks.triggerHooks("foundPathOptions", {
|
|
209
218
|
creditAccount: ca.creditAccount,
|
|
210
219
|
pathOptions,
|
|
@@ -267,6 +276,10 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
267
276
|
balances,
|
|
268
277
|
keepAssets
|
|
269
278
|
);
|
|
279
|
+
const leftover = leftoverBalances.values().map((a) => ({
|
|
280
|
+
...a,
|
|
281
|
+
balance: (0, import_helpers.limitLeftover)(a.balance, a.token) ?? 0n
|
|
282
|
+
}));
|
|
270
283
|
const pathOptions = import_PathOptionFactory.PathOptionFactory.generatePathOptions(
|
|
271
284
|
ca.tokens,
|
|
272
285
|
this.provider.networkType,
|
|
@@ -275,7 +288,7 @@ class RouterV300Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
275
288
|
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
276
289
|
return {
|
|
277
290
|
expected: expectedBalances.values(),
|
|
278
|
-
leftover
|
|
291
|
+
leftover,
|
|
279
292
|
connectors,
|
|
280
293
|
pathOptions
|
|
281
294
|
};
|
|
@@ -103,7 +103,7 @@ class RouterV310Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
103
103
|
(token) => ({
|
|
104
104
|
token,
|
|
105
105
|
balance: expectedMap.get(token) ?? 0n,
|
|
106
|
-
leftoverBalance: leftoverMap.get(token) ?? 0n,
|
|
106
|
+
leftoverBalance: (0, import_helpers.limitLeftover)(leftoverMap.get(token), token) ?? 0n,
|
|
107
107
|
numSplits: getNumSplits(token),
|
|
108
108
|
claimRewards: false
|
|
109
109
|
})
|
|
@@ -187,7 +187,7 @@ class RouterV310Contract extends import_AbstractRouterContract.AbstractRouterCon
|
|
|
187
187
|
tData.push({
|
|
188
188
|
token,
|
|
189
189
|
balance: expectedBalances.get(token)?.balance || 0n,
|
|
190
|
-
leftoverBalance: leftoverBalances.get(token)?.balance
|
|
190
|
+
leftoverBalance: (0, import_helpers.limitLeftover)(leftoverBalances.get(token)?.balance, token) ?? 0n,
|
|
191
191
|
numSplits: getNumSplits(token),
|
|
192
192
|
claimRewards: !!tokensToClaim.get(token)
|
|
193
193
|
});
|
|
@@ -319,7 +319,10 @@ function balancesAfterOpen(target, targetAmount, expected, leftover) {
|
|
|
319
319
|
if (t === targetAddr) {
|
|
320
320
|
result[t] = (expected.get(t) ?? 0n) + targetAmount;
|
|
321
321
|
} else {
|
|
322
|
-
result[t] = import_sdk_legacy.BigIntMath.min(
|
|
322
|
+
result[t] = import_sdk_legacy.BigIntMath.min(
|
|
323
|
+
expected.get(t) ?? 0n,
|
|
324
|
+
(0, import_helpers.limitLeftover)(leftover.get(t), t) ?? 0n
|
|
325
|
+
);
|
|
323
326
|
}
|
|
324
327
|
}
|
|
325
328
|
return result;
|
|
@@ -20,7 +20,8 @@ var helpers_exports = {};
|
|
|
20
20
|
__export(helpers_exports, {
|
|
21
21
|
assetsMap: () => assetsMap,
|
|
22
22
|
balancesMap: () => balancesMap,
|
|
23
|
-
compareRouterResults: () => compareRouterResults
|
|
23
|
+
compareRouterResults: () => compareRouterResults,
|
|
24
|
+
limitLeftover: () => limitLeftover
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(helpers_exports);
|
|
26
27
|
var import_utils = require("../utils/index.js");
|
|
@@ -33,9 +34,19 @@ function compareRouterResults(a, b) {
|
|
|
33
34
|
function assetsMap(assets) {
|
|
34
35
|
return new import_utils.AddressMap(assets.map((a) => [a.token, a]));
|
|
35
36
|
}
|
|
37
|
+
const TOKEN = "0x19ebd191f7a24ece672ba13a302212b5ef7f35cb".toLowerCase();
|
|
38
|
+
const THRESHOLD = 5n * 10n ** 17n;
|
|
39
|
+
function limitLeftover(balance, token) {
|
|
40
|
+
const leftoverBalance = balance ?? 0n;
|
|
41
|
+
if (token.toLowerCase() === TOKEN && leftoverBalance < THRESHOLD) {
|
|
42
|
+
return THRESHOLD;
|
|
43
|
+
}
|
|
44
|
+
return balance;
|
|
45
|
+
}
|
|
36
46
|
// Annotate the CommonJS export names for ESM import in node:
|
|
37
47
|
0 && (module.exports = {
|
|
38
48
|
assetsMap,
|
|
39
49
|
balancesMap,
|
|
40
|
-
compareRouterResults
|
|
50
|
+
compareRouterResults,
|
|
51
|
+
limitLeftover
|
|
41
52
|
});
|
|
@@ -45,6 +45,7 @@ const HUMAN_READABLE_SYMBOLS = {
|
|
|
45
45
|
PT_USDf_29JAN2026: "pt.USDf(29.01.26)",
|
|
46
46
|
["PT-wstUSR-25SEP2025"]: "pt.wstUSR(25.09.25)",
|
|
47
47
|
["PT-yUSD-27NOV2025"]: "pt.yUSD(27.11.25)",
|
|
48
|
+
["PT-pUSDe-16OCT2025"]: "pt.pUSDe(16.10.25)",
|
|
48
49
|
["0xab7d50fc2486a1ac06516e2ece9dadc95ba8cd20"]: "cp0xLRT\xA0\u2192\xA0wstETH"
|
|
49
50
|
};
|
|
50
51
|
class TokenData {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BaseContract } from "../base/index.js";
|
|
2
2
|
import { AddressMap } from "../utils/index.js";
|
|
3
3
|
import { Hooks } from "../utils/internal/index.js";
|
|
4
|
+
import { limitLeftover } from "./helpers.js";
|
|
4
5
|
class AbstractRouterContract extends BaseContract {
|
|
5
6
|
hooks = new Hooks();
|
|
6
7
|
addHook = this.hooks.addHook.bind(this.hooks);
|
|
@@ -15,7 +16,7 @@ class AbstractRouterContract extends BaseContract {
|
|
|
15
16
|
expected.upsert(token, { token, balance: actual > 10n ? actual : 0n });
|
|
16
17
|
leftover.upsert(token, {
|
|
17
18
|
token,
|
|
18
|
-
balance: leftoverBalances.get(token)?.balance || 1n
|
|
19
|
+
balance: limitLeftover(leftoverBalances.get(token)?.balance || 1n, token) ?? 1n
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
return {
|
|
@@ -35,7 +36,10 @@ class AbstractRouterContract extends BaseContract {
|
|
|
35
36
|
const decimals = this.sdk.tokensMeta.decimals(token);
|
|
36
37
|
const minBalance = 10n ** BigInt(Math.max(8, decimals) - 8);
|
|
37
38
|
if (keepAssetsSet.has(token.toLowerCase()) || balance < minBalance || !isEnabled) {
|
|
38
|
-
leftoverBalances.upsert(token, {
|
|
39
|
+
leftoverBalances.upsert(token, {
|
|
40
|
+
token,
|
|
41
|
+
balance: limitLeftover(balance, token) ?? balance
|
|
42
|
+
});
|
|
39
43
|
}
|
|
40
44
|
}
|
|
41
45
|
return {
|
|
@@ -7,7 +7,12 @@ import {
|
|
|
7
7
|
getTokenAddress_Legacy
|
|
8
8
|
} from "../sdk-gov-legacy/index.js";
|
|
9
9
|
import { AbstractRouterContract } from "./AbstractRouterContract.js";
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
assetsMap,
|
|
12
|
+
balancesMap,
|
|
13
|
+
compareRouterResults,
|
|
14
|
+
limitLeftover
|
|
15
|
+
} from "./helpers.js";
|
|
11
16
|
import { PathOptionFactory } from "./PathOptionFactory.js";
|
|
12
17
|
const MAX_GAS_PER_ROUTE = 200000000n;
|
|
13
18
|
const GAS_PER_BLOCK = 400000000n;
|
|
@@ -57,7 +62,7 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
57
62
|
tokenOut,
|
|
58
63
|
connectors,
|
|
59
64
|
amount,
|
|
60
|
-
leftoverAmount
|
|
65
|
+
leftoverAmount: limitLeftover(leftoverAmount, tokenIn) ?? 0n
|
|
61
66
|
};
|
|
62
67
|
const { result } = await this.contract.simulate.findAllSwaps(
|
|
63
68
|
[swapTask, BigInt(slippage)],
|
|
@@ -131,7 +136,7 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
131
136
|
}));
|
|
132
137
|
const leftover = cm.collateralTokens.map((token) => ({
|
|
133
138
|
token,
|
|
134
|
-
balance: leftoverMap.get(token) ?? 0n
|
|
139
|
+
balance: limitLeftover(leftoverMap.get(token), token) ?? 0n
|
|
135
140
|
}));
|
|
136
141
|
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
137
142
|
const {
|
|
@@ -176,7 +181,12 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
176
181
|
slippage,
|
|
177
182
|
balances
|
|
178
183
|
}) {
|
|
179
|
-
const {
|
|
184
|
+
const {
|
|
185
|
+
pathOptions,
|
|
186
|
+
expected,
|
|
187
|
+
leftover: leftoverUnsafe,
|
|
188
|
+
connectors
|
|
189
|
+
} = this.getFindClosePathInput(
|
|
180
190
|
ca,
|
|
181
191
|
cm,
|
|
182
192
|
balances ? {
|
|
@@ -185,6 +195,10 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
185
195
|
tokensToClaim: assetsMap(balances.tokensToClaim || [])
|
|
186
196
|
} : void 0
|
|
187
197
|
);
|
|
198
|
+
const leftover = leftoverUnsafe.map((a) => ({
|
|
199
|
+
...a,
|
|
200
|
+
balance: limitLeftover(a.balance, a.token) ?? 0n
|
|
201
|
+
}));
|
|
188
202
|
await this.hooks.triggerHooks("foundPathOptions", {
|
|
189
203
|
creditAccount: ca.creditAccount,
|
|
190
204
|
pathOptions,
|
|
@@ -247,6 +261,10 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
247
261
|
balances,
|
|
248
262
|
keepAssets
|
|
249
263
|
);
|
|
264
|
+
const leftover = leftoverBalances.values().map((a) => ({
|
|
265
|
+
...a,
|
|
266
|
+
balance: limitLeftover(a.balance, a.token) ?? 0n
|
|
267
|
+
}));
|
|
250
268
|
const pathOptions = PathOptionFactory.generatePathOptions(
|
|
251
269
|
ca.tokens,
|
|
252
270
|
this.provider.networkType,
|
|
@@ -255,7 +273,7 @@ class RouterV300Contract extends AbstractRouterContract {
|
|
|
255
273
|
const connectors = this.getAvailableConnectors(cm.collateralTokens);
|
|
256
274
|
return {
|
|
257
275
|
expected: expectedBalances.values(),
|
|
258
|
-
leftover
|
|
276
|
+
leftover,
|
|
259
277
|
connectors,
|
|
260
278
|
pathOptions
|
|
261
279
|
};
|
|
@@ -4,7 +4,7 @@ import { BigIntMath } from "../sdk-legacy/index.js";
|
|
|
4
4
|
import { AddressMap } from "../utils/AddressMap.js";
|
|
5
5
|
import { formatBN } from "../utils/formatter.js";
|
|
6
6
|
import { AbstractRouterContract } from "./AbstractRouterContract.js";
|
|
7
|
-
import { assetsMap, balancesMap } from "./helpers.js";
|
|
7
|
+
import { assetsMap, balancesMap, limitLeftover } from "./helpers.js";
|
|
8
8
|
const abi = iGearboxRouterV310Abi;
|
|
9
9
|
const ERR_NOT_IMPLEMENTED = new Error("Not implemented in router v3.1");
|
|
10
10
|
class RouterV310Contract extends AbstractRouterContract {
|
|
@@ -80,7 +80,7 @@ class RouterV310Contract extends AbstractRouterContract {
|
|
|
80
80
|
(token) => ({
|
|
81
81
|
token,
|
|
82
82
|
balance: expectedMap.get(token) ?? 0n,
|
|
83
|
-
leftoverBalance: leftoverMap.get(token) ?? 0n,
|
|
83
|
+
leftoverBalance: limitLeftover(leftoverMap.get(token), token) ?? 0n,
|
|
84
84
|
numSplits: getNumSplits(token),
|
|
85
85
|
claimRewards: false
|
|
86
86
|
})
|
|
@@ -164,7 +164,7 @@ class RouterV310Contract extends AbstractRouterContract {
|
|
|
164
164
|
tData.push({
|
|
165
165
|
token,
|
|
166
166
|
balance: expectedBalances.get(token)?.balance || 0n,
|
|
167
|
-
leftoverBalance: leftoverBalances.get(token)?.balance
|
|
167
|
+
leftoverBalance: limitLeftover(leftoverBalances.get(token)?.balance, token) ?? 0n,
|
|
168
168
|
numSplits: getNumSplits(token),
|
|
169
169
|
claimRewards: !!tokensToClaim.get(token)
|
|
170
170
|
});
|
|
@@ -296,7 +296,10 @@ function balancesAfterOpen(target, targetAmount, expected, leftover) {
|
|
|
296
296
|
if (t === targetAddr) {
|
|
297
297
|
result[t] = (expected.get(t) ?? 0n) + targetAmount;
|
|
298
298
|
} else {
|
|
299
|
-
result[t] = BigIntMath.min(
|
|
299
|
+
result[t] = BigIntMath.min(
|
|
300
|
+
expected.get(t) ?? 0n,
|
|
301
|
+
limitLeftover(leftover.get(t), t) ?? 0n
|
|
302
|
+
);
|
|
300
303
|
}
|
|
301
304
|
}
|
|
302
305
|
return result;
|
|
@@ -8,8 +8,18 @@ function compareRouterResults(a, b) {
|
|
|
8
8
|
function assetsMap(assets) {
|
|
9
9
|
return new AddressMap(assets.map((a) => [a.token, a]));
|
|
10
10
|
}
|
|
11
|
+
const TOKEN = "0x19ebd191f7a24ece672ba13a302212b5ef7f35cb".toLowerCase();
|
|
12
|
+
const THRESHOLD = 5n * 10n ** 17n;
|
|
13
|
+
function limitLeftover(balance, token) {
|
|
14
|
+
const leftoverBalance = balance ?? 0n;
|
|
15
|
+
if (token.toLowerCase() === TOKEN && leftoverBalance < THRESHOLD) {
|
|
16
|
+
return THRESHOLD;
|
|
17
|
+
}
|
|
18
|
+
return balance;
|
|
19
|
+
}
|
|
11
20
|
export {
|
|
12
21
|
assetsMap,
|
|
13
22
|
balancesMap,
|
|
14
|
-
compareRouterResults
|
|
23
|
+
compareRouterResults,
|
|
24
|
+
limitLeftover
|
|
15
25
|
};
|
|
@@ -22,6 +22,7 @@ const HUMAN_READABLE_SYMBOLS = {
|
|
|
22
22
|
PT_USDf_29JAN2026: "pt.USDf(29.01.26)",
|
|
23
23
|
["PT-wstUSR-25SEP2025"]: "pt.wstUSR(25.09.25)",
|
|
24
24
|
["PT-yUSD-27NOV2025"]: "pt.yUSD(27.11.25)",
|
|
25
|
+
["PT-pUSDe-16OCT2025"]: "pt.pUSDe(16.10.25)",
|
|
25
26
|
["0xab7d50fc2486a1ac06516e2ece9dadc95ba8cd20"]: "cp0xLRT\xA0\u2192\xA0wstETH"
|
|
26
27
|
};
|
|
27
28
|
class TokenData {
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import type { Address } from "abitype";
|
|
1
2
|
import { AddressMap } from "../utils/index.js";
|
|
2
3
|
import type { Asset, RouterResult } from "./types.js";
|
|
3
4
|
export declare function balancesMap(assets: Array<Asset>): AddressMap<bigint>;
|
|
4
5
|
export declare function compareRouterResults(a: RouterResult, b: RouterResult): RouterResult;
|
|
5
6
|
export declare function assetsMap<T extends Asset>(assets: Array<T> | readonly T[]): AddressMap<T>;
|
|
7
|
+
/**
|
|
8
|
+
* According to van0k, leftover balance for 0x19ebd191f7a24ece672ba13a302212b5ef7f35cb
|
|
9
|
+
* should always be rounded up to 5e17 if amount is less than 5e17
|
|
10
|
+
* Should NEVER be compared with "||" since function will lose it's effect
|
|
11
|
+
*/
|
|
12
|
+
export declare function limitLeftover(balance: bigint | undefined, token: Address): bigint | undefined;
|