@gearbox-protocol/sdk 13.2.0-next.1 → 13.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.
- package/dist/cjs/dev/AccountOpener.js +5 -45
- package/dist/cjs/dev/index.js +13 -0
- package/dist/cjs/dev/isTransientError.js +5 -1
- package/dist/cjs/dev/logSplitterTransport.js +154 -0
- package/dist/cjs/plugins/zappers/ZappersPlugin.js +144 -0
- package/dist/cjs/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +6 -110
- package/dist/cjs/plugins/zappers/index.js +26 -0
- package/dist/cjs/plugins/zappers/package.json +1 -0
- package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +104 -462
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -16
- package/dist/cjs/sdk/base/ChainContractsRegister.js +1 -1
- package/dist/cjs/sdk/base/TokensMeta.js +32 -255
- package/dist/cjs/sdk/base/index.js +0 -2
- package/dist/cjs/sdk/chain/chains.js +1 -2
- package/dist/cjs/sdk/constants/index.js +2 -0
- package/dist/cjs/sdk/{base/token-types.js → constants/phantom-tokens.js} +3 -9
- package/dist/cjs/sdk/market/MarketRegister.js +2 -2
- package/dist/cjs/sdk/market/MarketSuite.js +0 -6
- package/dist/cjs/sdk/market/index.js +1 -3
- package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -17
- package/dist/cjs/sdk/market/pool/index.js +0 -4
- package/dist/cjs/sdk/pools/AbstractPoolService.js +137 -0
- package/dist/cjs/{abi/iStateSerializer.js → sdk/pools/PoolServiceV310.js} +8 -14
- package/dist/cjs/sdk/pools/createPoolService.js +35 -0
- package/dist/cjs/sdk/pools/index.js +4 -2
- package/dist/cjs/sdk/utils/AddressMap.js +1 -1
- package/dist/cjs/sdk/utils/viem/sendRawTx.js +0 -16
- package/dist/esm/dev/AccountOpener.js +6 -47
- package/dist/esm/dev/index.js +10 -0
- package/dist/esm/dev/isTransientError.js +5 -1
- package/dist/esm/dev/logSplitterTransport.js +131 -0
- package/dist/esm/plugins/zappers/ZappersPlugin.js +126 -0
- package/dist/esm/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +2 -109
- package/dist/esm/plugins/zappers/index.js +3 -0
- package/dist/esm/plugins/zappers/package.json +1 -0
- package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +104 -462
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -16
- package/dist/esm/sdk/base/ChainContractsRegister.js +1 -1
- package/dist/esm/sdk/base/TokensMeta.js +32 -261
- package/dist/esm/sdk/base/index.js +0 -1
- package/dist/esm/sdk/chain/chains.js +1 -2
- package/dist/esm/sdk/constants/index.js +1 -0
- package/dist/esm/sdk/{base/token-types.js → constants/phantom-tokens.js} +0 -4
- package/dist/esm/sdk/market/MarketRegister.js +2 -2
- package/dist/esm/sdk/market/MarketSuite.js +0 -6
- package/dist/esm/sdk/market/index.js +0 -1
- package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -17
- package/dist/esm/sdk/market/pool/index.js +0 -2
- package/dist/esm/sdk/pools/AbstractPoolService.js +113 -0
- package/dist/esm/sdk/pools/PoolServiceV310.js +6 -0
- package/dist/esm/sdk/pools/createPoolService.js +11 -0
- package/dist/esm/sdk/pools/index.js +2 -1
- package/dist/esm/sdk/utils/AddressMap.js +1 -1
- package/dist/esm/sdk/utils/viem/sendRawTx.js +1 -19
- package/dist/types/dev/index.d.ts +1 -0
- package/dist/types/dev/logSplitterTransport.d.ts +118 -0
- package/dist/types/plugins/zappers/ZappersPlugin.d.ts +18 -0
- package/dist/types/plugins/zappers/extraZappers.d.ts +6 -0
- package/dist/types/plugins/zappers/index.d.ts +3 -0
- package/dist/types/plugins/zappers/types.d.ts +12 -0
- package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +27 -123
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
- package/dist/types/sdk/accounts/types.d.ts +8 -108
- package/dist/types/sdk/base/TokensMeta.d.ts +18 -34
- package/dist/types/sdk/base/index.d.ts +0 -1
- package/dist/types/sdk/base/types.d.ts +1 -0
- package/dist/types/sdk/chain/chains.d.ts +1 -1
- package/dist/types/sdk/constants/index.d.ts +1 -0
- package/dist/types/sdk/constants/phantom-tokens.d.ts +2 -0
- package/dist/types/sdk/market/MarketRegister.d.ts +2 -2
- package/dist/types/sdk/market/MarketSuite.d.ts +0 -3
- package/dist/types/sdk/market/credit/CreditFacadeV310BaseContract.d.ts +1 -1
- package/dist/types/sdk/market/index.d.ts +0 -1
- package/dist/types/sdk/market/pool/PoolSuite.d.ts +0 -2
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
- package/dist/types/sdk/market/pool/index.d.ts +0 -2
- package/dist/types/sdk/pools/AbstractPoolService.d.ts +9 -0
- package/dist/types/sdk/pools/PoolServiceV310.d.ts +4 -0
- package/dist/types/sdk/pools/createPoolService.d.ts +3 -0
- package/dist/types/sdk/pools/index.d.ts +2 -1
- package/dist/types/sdk/pools/types.d.ts +63 -84
- package/dist/types/sdk/utils/AddressMap.d.ts +1 -1
- package/dist/types/sdk/utils/viem/sendRawTx.d.ts +1 -5
- package/package.json +5 -3
- package/dist/cjs/abi/310/iSecuritizeDegenNFT.js +0 -263
- package/dist/cjs/abi/310/iSecuritizeKYCFactory.js +0 -278
- package/dist/cjs/sdk/market/pool/SecuritizeKYCFactory.js +0 -97
- package/dist/cjs/sdk/pools/PoolService.js +0 -391
- package/dist/esm/abi/310/iSecuritizeDegenNFT.js +0 -239
- package/dist/esm/abi/310/iSecuritizeKYCFactory.js +0 -254
- package/dist/esm/abi/iStateSerializer.js +0 -12
- package/dist/esm/sdk/market/pool/SecuritizeKYCFactory.js +0 -73
- package/dist/esm/sdk/pools/PoolService.js +0 -371
- package/dist/types/abi/310/iSecuritizeDegenNFT.d.ts +0 -324
- package/dist/types/abi/310/iSecuritizeKYCFactory.d.ts +0 -322
- package/dist/types/abi/iStateSerializer.d.ts +0 -11
- package/dist/types/sdk/base/token-types.d.ts +0 -33
- package/dist/types/sdk/market/ZapperRegister.d.ts +0 -17
- package/dist/types/sdk/market/pool/SecuritizeKYCFactory.d.ts +0 -345
- package/dist/types/sdk/market/types.d.ts +0 -10
- package/dist/types/sdk/pools/PoolService.d.ts +0 -14
- /package/dist/cjs/{sdk/market → plugins/zappers}/types.js +0 -0
- /package/dist/esm/{sdk/market → plugins/zappers}/types.js +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
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 AbstractPoolService_exports = {};
|
|
20
|
+
__export(AbstractPoolService_exports, {
|
|
21
|
+
AbstractPoolService: () => AbstractPoolService
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(AbstractPoolService_exports);
|
|
24
|
+
var import_generated = require("../../abi/310/generated.js");
|
|
25
|
+
var import_iERC20ZapperDeposits = require("../../abi/iERC20ZapperDeposits.js");
|
|
26
|
+
var import_iETHZapperDeposits = require("../../abi/iETHZapperDeposits.js");
|
|
27
|
+
var import_iZapper = require("../../abi/iZapper.js");
|
|
28
|
+
var import_base = require("../base/index.js");
|
|
29
|
+
class AbstractPoolService extends import_base.SDKConstruct {
|
|
30
|
+
#version;
|
|
31
|
+
constructor(sdk, version) {
|
|
32
|
+
super(sdk);
|
|
33
|
+
this.#version = version;
|
|
34
|
+
this.logger?.debug(`Created PoolService with version: ${this.#version}`);
|
|
35
|
+
}
|
|
36
|
+
addLiquidity({
|
|
37
|
+
collateral,
|
|
38
|
+
pool,
|
|
39
|
+
account,
|
|
40
|
+
zapper,
|
|
41
|
+
permit,
|
|
42
|
+
nativeTokenAddress,
|
|
43
|
+
referralCode = 0n,
|
|
44
|
+
migrate
|
|
45
|
+
}) {
|
|
46
|
+
if (zapper?.tokenIn === nativeTokenAddress) {
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
target: zapper.zapper,
|
|
50
|
+
abi: import_iETHZapperDeposits.iethZapperDepositsAbi,
|
|
51
|
+
functionName: "depositWithReferral",
|
|
52
|
+
args: [account, referralCode],
|
|
53
|
+
value: collateral.balance
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
} else if (zapper) {
|
|
57
|
+
return permit ? [
|
|
58
|
+
{
|
|
59
|
+
target: zapper.zapper,
|
|
60
|
+
abi: import_iERC20ZapperDeposits.ierc20ZapperDepositsAbi,
|
|
61
|
+
functionName: "depositWithReferralAndPermit",
|
|
62
|
+
args: [
|
|
63
|
+
collateral.balance,
|
|
64
|
+
account,
|
|
65
|
+
referralCode,
|
|
66
|
+
permit.deadline,
|
|
67
|
+
permit.v,
|
|
68
|
+
permit.r,
|
|
69
|
+
permit.s
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
] : [
|
|
73
|
+
{
|
|
74
|
+
target: zapper.zapper,
|
|
75
|
+
abi: import_iERC20ZapperDeposits.ierc20ZapperDepositsAbi,
|
|
76
|
+
functionName: "depositWithReferral",
|
|
77
|
+
args: [collateral.balance, account, referralCode]
|
|
78
|
+
}
|
|
79
|
+
];
|
|
80
|
+
} else {
|
|
81
|
+
if (migrate) throw Error("No zapper for migration");
|
|
82
|
+
return [
|
|
83
|
+
{
|
|
84
|
+
target: pool,
|
|
85
|
+
abi: import_generated.iPoolV310Abi,
|
|
86
|
+
functionName: "depositWithReferral",
|
|
87
|
+
args: [collateral.balance, account, referralCode]
|
|
88
|
+
}
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
removeLiquidity({
|
|
93
|
+
pool,
|
|
94
|
+
amount,
|
|
95
|
+
account,
|
|
96
|
+
zapper,
|
|
97
|
+
permit
|
|
98
|
+
}) {
|
|
99
|
+
if (zapper) {
|
|
100
|
+
return permit ? [
|
|
101
|
+
{
|
|
102
|
+
target: zapper.zapper,
|
|
103
|
+
abi: import_iZapper.iZapperAbi,
|
|
104
|
+
functionName: "redeemWithPermit",
|
|
105
|
+
args: [
|
|
106
|
+
amount,
|
|
107
|
+
account,
|
|
108
|
+
permit.deadline,
|
|
109
|
+
permit.v,
|
|
110
|
+
permit.r,
|
|
111
|
+
permit.s
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
] : [
|
|
115
|
+
{
|
|
116
|
+
target: zapper.zapper,
|
|
117
|
+
abi: import_iZapper.iZapperAbi,
|
|
118
|
+
functionName: "redeem",
|
|
119
|
+
args: [amount, account]
|
|
120
|
+
}
|
|
121
|
+
];
|
|
122
|
+
} else {
|
|
123
|
+
return [
|
|
124
|
+
{
|
|
125
|
+
target: pool,
|
|
126
|
+
abi: import_generated.iPoolV310Abi,
|
|
127
|
+
functionName: "redeem",
|
|
128
|
+
args: [amount, account, account]
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
135
|
+
0 && (module.exports = {
|
|
136
|
+
AbstractPoolService
|
|
137
|
+
});
|
|
@@ -16,21 +16,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var PoolServiceV310_exports = {};
|
|
20
|
+
__export(PoolServiceV310_exports, {
|
|
21
|
+
PoolServiceV310: () => PoolServiceV310
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
inputs: [],
|
|
28
|
-
name: "serialize",
|
|
29
|
-
outputs: [{ name: "serializedData", internalType: "bytes", type: "bytes" }],
|
|
30
|
-
stateMutability: "view"
|
|
31
|
-
}
|
|
32
|
-
];
|
|
23
|
+
module.exports = __toCommonJS(PoolServiceV310_exports);
|
|
24
|
+
var import_AbstractPoolService = require("./AbstractPoolService.js");
|
|
25
|
+
class PoolServiceV310 extends import_AbstractPoolService.AbstractPoolService {
|
|
26
|
+
}
|
|
33
27
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
28
|
0 && (module.exports = {
|
|
35
|
-
|
|
29
|
+
PoolServiceV310
|
|
36
30
|
});
|
|
@@ -0,0 +1,35 @@
|
|
|
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 createPoolService_exports = {};
|
|
20
|
+
__export(createPoolService_exports, {
|
|
21
|
+
createPoolService: () => createPoolService
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(createPoolService_exports);
|
|
24
|
+
var import_constants = require("../constants/index.js");
|
|
25
|
+
var import_PoolServiceV310 = require("./PoolServiceV310.js");
|
|
26
|
+
function createPoolService(sdk, version) {
|
|
27
|
+
if ((0, import_constants.isV310)(version)) {
|
|
28
|
+
return new import_PoolServiceV310.PoolServiceV310(sdk, version);
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`Unsupported Pool Service version ${version}`);
|
|
31
|
+
}
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
createPoolService
|
|
35
|
+
});
|
|
@@ -15,10 +15,12 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
|
|
|
15
15
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
16
|
var pools_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(pools_exports);
|
|
18
|
-
__reExport(pools_exports, require("./
|
|
18
|
+
__reExport(pools_exports, require("./AbstractPoolService.js"), module.exports);
|
|
19
|
+
__reExport(pools_exports, require("./createPoolService.js"), module.exports);
|
|
19
20
|
__reExport(pools_exports, require("./types.js"), module.exports);
|
|
20
21
|
// Annotate the CommonJS export names for ESM import in node:
|
|
21
22
|
0 && (module.exports = {
|
|
22
|
-
...require("./
|
|
23
|
+
...require("./AbstractPoolService.js"),
|
|
24
|
+
...require("./createPoolService.js"),
|
|
23
25
|
...require("./types.js")
|
|
24
26
|
});
|
|
@@ -18,7 +18,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var sendRawTx_exports = {};
|
|
20
20
|
__export(sendRawTx_exports, {
|
|
21
|
-
estimateRawTxGas: () => estimateRawTxGas,
|
|
22
21
|
sendRawTx: () => sendRawTx
|
|
23
22
|
});
|
|
24
23
|
module.exports = __toCommonJS(sendRawTx_exports);
|
|
@@ -37,22 +36,7 @@ async function sendRawTx(client, params) {
|
|
|
37
36
|
value: BigInt(tx.value)
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
|
-
async function estimateRawTxGas(client, params) {
|
|
41
|
-
const { tx, ...rest } = params;
|
|
42
|
-
return (0, import_utils.getAction)(
|
|
43
|
-
client,
|
|
44
|
-
import_actions.estimateGas,
|
|
45
|
-
"estimateGas"
|
|
46
|
-
)({
|
|
47
|
-
...rest,
|
|
48
|
-
account: params.account,
|
|
49
|
-
data: tx.callData,
|
|
50
|
-
to: tx.to,
|
|
51
|
-
value: BigInt(tx.value)
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
55
40
|
0 && (module.exports = {
|
|
56
|
-
estimateRawTxGas,
|
|
57
41
|
sendRawTx
|
|
58
42
|
});
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
parseEventLogs
|
|
7
7
|
} from "viem";
|
|
8
8
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
9
|
-
import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
|
|
9
|
+
import { iCreditFacadeV310Abi, iPoolV310Abi } from "../abi/310/generated.js";
|
|
10
10
|
import { ierc20Abi } from "../abi/iERC20.js";
|
|
11
11
|
import {
|
|
12
12
|
ADDRESS_0X0,
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
childLogger,
|
|
16
16
|
MAX_UINT256,
|
|
17
17
|
PERCENTAGE_FACTOR,
|
|
18
|
-
PoolService,
|
|
19
18
|
SDKConstruct,
|
|
20
19
|
sendRawTx
|
|
21
20
|
} from "../sdk/index.js";
|
|
@@ -44,7 +43,6 @@ class AccountOpener extends SDKConstruct {
|
|
|
44
43
|
#minDebtMultiplier;
|
|
45
44
|
#allowMint;
|
|
46
45
|
#leverageDelta;
|
|
47
|
-
#poolService;
|
|
48
46
|
constructor(service, options_ = {}) {
|
|
49
47
|
super(service.sdk);
|
|
50
48
|
const {
|
|
@@ -70,7 +68,6 @@ class AccountOpener extends SDKConstruct {
|
|
|
70
68
|
this.#poolDepositMultiplier = BigInt(poolDepositMultiplier);
|
|
71
69
|
this.#minDebtMultiplier = BigInt(minDebtMultiplier);
|
|
72
70
|
this.#leverageDelta = BigInt(leverageDelta);
|
|
73
|
-
this.#poolService = new PoolService(service.sdk);
|
|
74
71
|
this.#logger?.info(
|
|
75
72
|
{
|
|
76
73
|
borrower: privateKeyToAccount(this.borrowerKey).address,
|
|
@@ -108,10 +105,6 @@ class AccountOpener extends SDKConstruct {
|
|
|
108
105
|
},
|
|
109
106
|
"opening credit accounts"
|
|
110
107
|
);
|
|
111
|
-
await Promise.all([
|
|
112
|
-
this.sdk.tokensMeta.loadTokenData(),
|
|
113
|
-
this.sdk.marketRegister.loadZappers()
|
|
114
|
-
]);
|
|
115
108
|
let deposits = [];
|
|
116
109
|
if (depositIntoPools) {
|
|
117
110
|
try {
|
|
@@ -463,34 +456,9 @@ class AccountOpener extends SDKConstruct {
|
|
|
463
456
|
this.#logger?.debug(
|
|
464
457
|
`depositor balance in underlying: ${this.sdk.tokensMeta.formatBN(pool.underlying, allowance, { symbol: true })}`
|
|
465
458
|
);
|
|
466
|
-
const tokensOut = this.#poolService.getDepositTokensOut(
|
|
467
|
-
address,
|
|
468
|
-
underlying
|
|
469
|
-
);
|
|
470
|
-
this.#logger?.debug(
|
|
471
|
-
{ tokensOut: tokensOut.map((t) => this.labelAddress(t)) },
|
|
472
|
-
"deposit tokens out"
|
|
473
|
-
);
|
|
474
|
-
if (tokensOut.length === 0) {
|
|
475
|
-
throw new Error(`no tokens out found for pool ${poolName}`);
|
|
476
|
-
}
|
|
477
|
-
const tokenOut = tokensOut[0];
|
|
478
|
-
const metadata = this.#poolService.getDepositMetadata(
|
|
479
|
-
address,
|
|
480
|
-
underlying,
|
|
481
|
-
tokenOut
|
|
482
|
-
);
|
|
483
|
-
this.logger?.debug(
|
|
484
|
-
{
|
|
485
|
-
underlying: this.labelAddress(underlying),
|
|
486
|
-
tokenOut: this.labelAddress(tokenOut),
|
|
487
|
-
...metadata
|
|
488
|
-
},
|
|
489
|
-
"pool deposit metadata"
|
|
490
|
-
);
|
|
491
459
|
txHash = await this.#anvil.writeContract({
|
|
492
460
|
account: depositor,
|
|
493
|
-
address:
|
|
461
|
+
address: underlying,
|
|
494
462
|
abi: ierc20Abi,
|
|
495
463
|
functionName: "approve",
|
|
496
464
|
args: [address, allowance],
|
|
@@ -507,21 +475,12 @@ class AccountOpener extends SDKConstruct {
|
|
|
507
475
|
this.#logger?.debug(
|
|
508
476
|
`depositor approved underlying for pool ${poolName}: ${txHash}`
|
|
509
477
|
);
|
|
510
|
-
const depositCall = this.#poolService.addLiquidity({
|
|
511
|
-
collateral: { token: underlying, balance: amount },
|
|
512
|
-
pool: address,
|
|
513
|
-
wallet: depositor.address,
|
|
514
|
-
meta: metadata
|
|
515
|
-
});
|
|
516
|
-
if (!depositCall) {
|
|
517
|
-
throw new Error(`no deposit call could be created for ${poolName}`);
|
|
518
|
-
}
|
|
519
478
|
txHash = await this.#anvil.writeContract({
|
|
520
479
|
account: depositor,
|
|
521
|
-
address
|
|
522
|
-
abi:
|
|
523
|
-
functionName:
|
|
524
|
-
args:
|
|
480
|
+
address,
|
|
481
|
+
abi: iPoolV310Abi,
|
|
482
|
+
functionName: "deposit",
|
|
483
|
+
args: [amount, depositor.address],
|
|
525
484
|
chain: this.#anvil.chain
|
|
526
485
|
});
|
|
527
486
|
receipt = await this.#anvil.waitForTransactionReceipt({ hash: txHash });
|
package/dist/esm/dev/index.js
CHANGED
|
@@ -9,6 +9,11 @@ export * from "./EthCallSpy.js";
|
|
|
9
9
|
export * from "./isOutOfSyncError.js";
|
|
10
10
|
export * from "./isRateLimitError.js";
|
|
11
11
|
export * from "./isTransientError.js";
|
|
12
|
+
import {
|
|
13
|
+
isRangeError,
|
|
14
|
+
LogSplitterTransportOptions,
|
|
15
|
+
logSplitterTransport
|
|
16
|
+
} from "./logSplitterTransport.js";
|
|
12
17
|
export * from "./ltUtils.js";
|
|
13
18
|
export * from "./migrateFaucet.js";
|
|
14
19
|
export * from "./mint/index.js";
|
|
@@ -18,3 +23,8 @@ export * from "./replaceStorage.js";
|
|
|
18
23
|
export * from "./resilientTransport.js";
|
|
19
24
|
export * from "./transports.js";
|
|
20
25
|
export * from "./types.js";
|
|
26
|
+
export {
|
|
27
|
+
LogSplitterTransportOptions as GetLogsTransportOptions,
|
|
28
|
+
isRangeError,
|
|
29
|
+
logSplitterTransport
|
|
30
|
+
};
|
|
@@ -34,7 +34,11 @@ const TRANSIENT_PATTERNS = [
|
|
|
34
34
|
// EIP-1474 ResourceUnavailableRpcError (code -32002): node is syncing or the
|
|
35
35
|
// requested resource is temporarily unavailable.
|
|
36
36
|
// Matches both the RPC message and viem's shortMessage "Requested resource not available."
|
|
37
|
-
/resource unavailable|requested resource not available/i
|
|
37
|
+
/resource unavailable|requested resource not available/i,
|
|
38
|
+
// sometimes happens on DRPC: "GRPC Context cancellation"
|
|
39
|
+
/context cancel/i,
|
|
40
|
+
// DRPC error: Can't route your request to suitable provider, if you specified certain providers revise the list
|
|
41
|
+
/suitable provider/i
|
|
38
42
|
];
|
|
39
43
|
function isTransientError(e) {
|
|
40
44
|
if (e instanceof BaseError) {
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HttpRequestError,
|
|
3
|
+
hexToNumber,
|
|
4
|
+
InvalidParamsRpcError,
|
|
5
|
+
numberToHex
|
|
6
|
+
} from "viem";
|
|
7
|
+
function isFixedBlockRange(filter) {
|
|
8
|
+
if (filter.blockHash != null) return false;
|
|
9
|
+
return isHexBlockNumber(filter.fromBlock) && isHexBlockNumber(filter.toBlock);
|
|
10
|
+
}
|
|
11
|
+
function isHexBlockNumber(value) {
|
|
12
|
+
return typeof value === "string" && value.startsWith("0x");
|
|
13
|
+
}
|
|
14
|
+
const RANGE_ERROR_PATTERNS = [
|
|
15
|
+
/block range/i,
|
|
16
|
+
/too many results/i,
|
|
17
|
+
/response size/i,
|
|
18
|
+
/result window/i,
|
|
19
|
+
/exceeds allowed/i,
|
|
20
|
+
/cannot request logs over more than/i,
|
|
21
|
+
/eth_getLogs is limited to/i,
|
|
22
|
+
/eth_getLogs requests with up to/i,
|
|
23
|
+
/range is too large/i,
|
|
24
|
+
/exceeded max allowed range/i
|
|
25
|
+
];
|
|
26
|
+
function isRangeError(error) {
|
|
27
|
+
const msg = errorMessage(error);
|
|
28
|
+
return RANGE_ERROR_PATTERNS.some((re) => re.test(msg));
|
|
29
|
+
}
|
|
30
|
+
const GENERIC_BLOCKS_RE = /(\d+)\s*block/i;
|
|
31
|
+
const ALCHEMY_RANGE_RE = /this block range should work: \[(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)\]/;
|
|
32
|
+
function parsePageSizeHint(error) {
|
|
33
|
+
const alchemy = tryAlchemyHint(error);
|
|
34
|
+
if (alchemy != null) return alchemy;
|
|
35
|
+
const msg = errorMessage(error);
|
|
36
|
+
const m = msg.match(GENERIC_BLOCKS_RE);
|
|
37
|
+
return m ? Number(m[1]) : null;
|
|
38
|
+
}
|
|
39
|
+
function tryAlchemyHint(error) {
|
|
40
|
+
if (!(error instanceof HttpRequestError)) return void 0;
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(error.details);
|
|
43
|
+
if (typeof parsed.message !== "string") return void 0;
|
|
44
|
+
const match = parsed.message.match(ALCHEMY_RANGE_RE);
|
|
45
|
+
if (!match) return void 0;
|
|
46
|
+
const from = hexToNumber(match[1]);
|
|
47
|
+
const to = hexToNumber(match[2]);
|
|
48
|
+
return to - from + 1;
|
|
49
|
+
} catch {
|
|
50
|
+
return void 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function errorMessage(error) {
|
|
54
|
+
if (error instanceof Error) {
|
|
55
|
+
const details = error.details;
|
|
56
|
+
return details ? `${error.message} ${details}` : error.message;
|
|
57
|
+
}
|
|
58
|
+
return String(error);
|
|
59
|
+
}
|
|
60
|
+
async function fetchLogsWithPagination(callRpc, from, to, options) {
|
|
61
|
+
if (from > to) {
|
|
62
|
+
throw new InvalidParamsRpcError(
|
|
63
|
+
new Error(`Invalid parameters: from (${from}) > to (${to})`)
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
const { softLimit, hardLimit } = options ?? {};
|
|
67
|
+
let pageSize = hardLimit ?? to - from + 1;
|
|
68
|
+
const results = [];
|
|
69
|
+
let cursor = from;
|
|
70
|
+
while (cursor <= to) {
|
|
71
|
+
const chunkEnd = Math.min(to, cursor + pageSize - 1);
|
|
72
|
+
try {
|
|
73
|
+
const logs = await callRpc(cursor, chunkEnd);
|
|
74
|
+
results.push(...logs);
|
|
75
|
+
cursor = chunkEnd + 1;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
if (!isRangeError(error)) {
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
if (cursor === chunkEnd) {
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
const hint = parsePageSizeHint(error);
|
|
84
|
+
if (hint) {
|
|
85
|
+
pageSize = hint;
|
|
86
|
+
} else {
|
|
87
|
+
const half = Math.max(1, Math.floor((chunkEnd - cursor + 1) / 2));
|
|
88
|
+
pageSize = softLimit ? Math.min(softLimit, half) : half;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
94
|
+
function logSplitterTransport(transport, logOptions) {
|
|
95
|
+
return (opts) => {
|
|
96
|
+
const base = transport(opts);
|
|
97
|
+
const rpcRequest = base.request;
|
|
98
|
+
const request = (async (args) => {
|
|
99
|
+
const { method, params } = args;
|
|
100
|
+
if (method !== "eth_getLogs") {
|
|
101
|
+
return rpcRequest(args);
|
|
102
|
+
}
|
|
103
|
+
const filter = params?.[0] ?? {};
|
|
104
|
+
if (!isFixedBlockRange(filter)) {
|
|
105
|
+
return rpcRequest(args);
|
|
106
|
+
}
|
|
107
|
+
const from = hexToNumber(filter.fromBlock);
|
|
108
|
+
const to = hexToNumber(filter.toBlock);
|
|
109
|
+
const callRpc = async (f, t) => {
|
|
110
|
+
const paginatedFilter = {
|
|
111
|
+
...filter,
|
|
112
|
+
fromBlock: numberToHex(f),
|
|
113
|
+
toBlock: numberToHex(t)
|
|
114
|
+
};
|
|
115
|
+
return rpcRequest({
|
|
116
|
+
method: "eth_getLogs",
|
|
117
|
+
params: [paginatedFilter]
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
return fetchLogsWithPagination(callRpc, from, to, logOptions);
|
|
121
|
+
});
|
|
122
|
+
return { ...base, request };
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export {
|
|
126
|
+
fetchLogsWithPagination,
|
|
127
|
+
isFixedBlockRange,
|
|
128
|
+
isRangeError,
|
|
129
|
+
logSplitterTransport,
|
|
130
|
+
parsePageSizeHint
|
|
131
|
+
};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { peripheryCompressorAbi } from "../../abi/compressors/peripheryCompressor.js";
|
|
2
|
+
import {
|
|
3
|
+
AddressMap,
|
|
4
|
+
AP_PERIPHERY_COMPRESSOR,
|
|
5
|
+
BasePlugin,
|
|
6
|
+
hexEq,
|
|
7
|
+
VERSION_RANGE_310
|
|
8
|
+
} from "../../sdk/index.js";
|
|
9
|
+
class ZappersPlugin extends BasePlugin {
|
|
10
|
+
#zappers;
|
|
11
|
+
#extraZappers;
|
|
12
|
+
constructor(extraZappers = [], loadOnAttach = false) {
|
|
13
|
+
super(loadOnAttach);
|
|
14
|
+
this.#extraZappers = this.#addExtraZappers(extraZappers);
|
|
15
|
+
}
|
|
16
|
+
async load(force) {
|
|
17
|
+
if (!force && this.loaded) {
|
|
18
|
+
return this.state;
|
|
19
|
+
}
|
|
20
|
+
const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
|
|
21
|
+
AP_PERIPHERY_COMPRESSOR,
|
|
22
|
+
VERSION_RANGE_310
|
|
23
|
+
);
|
|
24
|
+
this.sdk.logger?.debug(
|
|
25
|
+
`loading zappers with periphery compressor ${pcAddr}`
|
|
26
|
+
);
|
|
27
|
+
const markets = this.sdk.marketRegister.markets;
|
|
28
|
+
const resp = await this.client.multicall({
|
|
29
|
+
contracts: markets.map(
|
|
30
|
+
(m) => ({
|
|
31
|
+
abi: peripheryCompressorAbi,
|
|
32
|
+
address: pcAddr,
|
|
33
|
+
functionName: "getZappers",
|
|
34
|
+
args: [m.configurator.address, m.pool.pool.address]
|
|
35
|
+
})
|
|
36
|
+
),
|
|
37
|
+
allowFailure: true,
|
|
38
|
+
batchSize: 0,
|
|
39
|
+
blockNumber: this.sdk.currentBlock
|
|
40
|
+
});
|
|
41
|
+
this.#zappers = new AddressMap(void 0, "zappers");
|
|
42
|
+
for (let i = 0; i < resp.length; i++) {
|
|
43
|
+
const { status, result, error } = resp[i];
|
|
44
|
+
const marketConfigurator = markets[i].configurator.address;
|
|
45
|
+
const pool = markets[i].pool.pool.address;
|
|
46
|
+
if (status === "success") {
|
|
47
|
+
this.#zappers.upsert(
|
|
48
|
+
pool,
|
|
49
|
+
result.map((z) => ({ ...z, pool }))
|
|
50
|
+
);
|
|
51
|
+
} else {
|
|
52
|
+
this.sdk.logger?.error(
|
|
53
|
+
`failed to load zapper for market configurator ${this.labelAddress(
|
|
54
|
+
marketConfigurator
|
|
55
|
+
)} and pool ${this.labelAddress(pool)}: ${error}`
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
this.#loadZapperTokens();
|
|
60
|
+
return this.state;
|
|
61
|
+
}
|
|
62
|
+
#addExtraZappers(extraZappers) {
|
|
63
|
+
const zappers = new AddressMap();
|
|
64
|
+
for (const z of extraZappers) {
|
|
65
|
+
const existing = zappers?.get(z.pool);
|
|
66
|
+
if (existing) {
|
|
67
|
+
const hasZapper = existing.some(
|
|
68
|
+
(zz) => hexEq(zz.baseParams.addr, z.baseParams.addr)
|
|
69
|
+
);
|
|
70
|
+
if (!hasZapper) {
|
|
71
|
+
existing.push(z);
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
zappers?.upsert(z.pool, [z]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return zappers;
|
|
78
|
+
}
|
|
79
|
+
get extraZappers() {
|
|
80
|
+
if (!this.#extraZappers) {
|
|
81
|
+
console.error("extra zappers not attached");
|
|
82
|
+
return new AddressMap();
|
|
83
|
+
}
|
|
84
|
+
return this.#extraZappers;
|
|
85
|
+
}
|
|
86
|
+
get zappers() {
|
|
87
|
+
if (!this.#zappers) {
|
|
88
|
+
throw new Error("zappers plugin not attached");
|
|
89
|
+
}
|
|
90
|
+
return this.#zappers;
|
|
91
|
+
}
|
|
92
|
+
get loaded() {
|
|
93
|
+
return !!this.#zappers;
|
|
94
|
+
}
|
|
95
|
+
stateHuman(_) {
|
|
96
|
+
return this.zappers.values().flatMap(
|
|
97
|
+
(l) => l.flatMap((z) => ({
|
|
98
|
+
address: z.baseParams.addr,
|
|
99
|
+
contractType: z.baseParams.contractType,
|
|
100
|
+
version: Number(z.baseParams.version),
|
|
101
|
+
tokenIn: this.labelAddress(z.tokenIn.addr),
|
|
102
|
+
tokenOut: this.labelAddress(z.tokenOut.addr)
|
|
103
|
+
}))
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
get state() {
|
|
107
|
+
return {
|
|
108
|
+
zappers: this.zappers.asRecord()
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
hydrate(state) {
|
|
112
|
+
this.#zappers = new AddressMap(Object.entries(state.zappers), "zappers");
|
|
113
|
+
this.#loadZapperTokens();
|
|
114
|
+
}
|
|
115
|
+
#loadZapperTokens() {
|
|
116
|
+
const zappersTokens = this.zappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
|
|
117
|
+
const extraZappersTokens = this.extraZappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
|
|
118
|
+
for (const t of [...zappersTokens, ...extraZappersTokens]) {
|
|
119
|
+
this.sdk.tokensMeta.upsert(t.addr, t);
|
|
120
|
+
this.sdk.setAddressLabel(t.addr, t.symbol);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export {
|
|
125
|
+
ZappersPlugin
|
|
126
|
+
};
|