@gearbox-protocol/sdk 14.0.0-next.9 → 14.1.0-next.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/abi/kyc/iDSRegistryService.js +149 -0
- package/dist/cjs/abi/kyc/iDSToken.js +71 -0
- package/dist/cjs/abi/kyc/iKYCCompressor.js +196 -0
- package/dist/cjs/abi/kyc/iKYCFactory.js +122 -0
- package/dist/cjs/abi/kyc/iKYCUnderlying.js +401 -0
- package/dist/cjs/abi/kyc/iSecuritizeDegenNFT.js +326 -0
- package/dist/cjs/abi/kyc/iSecuritizeKYCFactory.js +319 -0
- package/dist/cjs/dev/AccountOpener.js +45 -5
- package/dist/cjs/rewards/rewards/extra-apy.js +1 -1
- package/dist/cjs/sdk/MultichainSDK.js +5 -0
- package/dist/cjs/sdk/OnchainSDK.js +55 -6
- package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +335 -21
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +7 -1
- package/dist/cjs/sdk/base/TokensMeta.js +22 -42
- package/dist/cjs/sdk/base/token-types.js +9 -0
- package/dist/cjs/sdk/chain/chains.js +18 -1
- package/dist/cjs/sdk/constants/address-provider.js +3 -0
- package/dist/cjs/sdk/market/MarketRegister.js +70 -116
- package/dist/cjs/sdk/market/MarketSuite.js +3 -0
- package/dist/cjs/sdk/market/index.js +2 -0
- package/dist/cjs/sdk/market/kyc/KYCRegistry.js +269 -0
- package/dist/cjs/sdk/market/kyc/index.js +26 -0
- package/dist/cjs/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +242 -0
- package/dist/cjs/sdk/market/kyc/securitize/constants.js +28 -0
- package/dist/cjs/sdk/market/kyc/securitize/index.js +26 -0
- package/dist/cjs/sdk/market/kyc/securitize/types.js +16 -0
- package/dist/cjs/sdk/{accounts/utils.js → market/kyc/types.js} +11 -15
- package/dist/cjs/sdk/market/pool/PoolSuite.js +3 -0
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +11 -2
- package/dist/cjs/sdk/market/pool/index.js +2 -0
- package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +3 -3
- package/dist/cjs/sdk/options.js +6 -0
- package/dist/cjs/sdk/pools/PoolService.js +104 -12
- package/dist/cjs/sdk/utils/viem/executeDelegatedMulticalls.js +38 -0
- package/dist/cjs/sdk/utils/viem/index.js +2 -4
- package/dist/esm/abi/kyc/iDSRegistryService.js +125 -0
- package/dist/esm/abi/kyc/iDSToken.js +47 -0
- package/dist/esm/abi/kyc/iKYCCompressor.js +172 -0
- package/dist/esm/abi/kyc/iKYCFactory.js +98 -0
- package/dist/esm/abi/kyc/iKYCUnderlying.js +377 -0
- package/dist/esm/abi/kyc/iSecuritizeDegenNFT.js +302 -0
- package/dist/esm/abi/kyc/iSecuritizeKYCFactory.js +295 -0
- package/dist/esm/dev/AccountOpener.js +47 -6
- package/dist/esm/rewards/rewards/extra-apy.js +1 -1
- package/dist/esm/sdk/MultichainSDK.js +5 -0
- package/dist/esm/sdk/OnchainSDK.js +58 -7
- package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +336 -22
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +7 -1
- package/dist/esm/sdk/base/TokensMeta.js +22 -44
- package/dist/esm/sdk/base/token-types.js +6 -0
- package/dist/esm/sdk/chain/chains.js +18 -1
- package/dist/esm/sdk/constants/address-provider.js +2 -0
- package/dist/esm/sdk/market/MarketRegister.js +74 -118
- package/dist/esm/sdk/market/MarketSuite.js +3 -0
- package/dist/esm/sdk/market/index.js +1 -0
- package/dist/esm/sdk/market/kyc/KYCRegistry.js +253 -0
- package/dist/esm/sdk/market/kyc/index.js +3 -0
- package/dist/esm/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +218 -0
- package/dist/esm/sdk/market/kyc/securitize/constants.js +4 -0
- package/dist/esm/sdk/market/kyc/securitize/index.js +3 -0
- package/dist/esm/sdk/market/kyc/securitize/types.js +0 -0
- package/dist/esm/sdk/market/kyc/types.js +9 -0
- package/dist/esm/sdk/market/pool/PoolSuite.js +3 -0
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +11 -2
- package/dist/esm/sdk/market/pool/index.js +1 -0
- package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +3 -3
- package/dist/esm/sdk/options.js +6 -0
- package/dist/esm/sdk/pools/PoolService.js +109 -13
- package/dist/esm/sdk/utils/viem/executeDelegatedMulticalls.js +14 -0
- package/dist/esm/sdk/utils/viem/index.js +1 -2
- package/dist/types/abi/kyc/iDSRegistryService.d.ts +191 -0
- package/dist/types/abi/kyc/iDSToken.d.ts +67 -0
- package/dist/types/abi/kyc/iKYCCompressor.d.ts +228 -0
- package/dist/types/abi/kyc/iKYCFactory.d.ts +139 -0
- package/dist/types/abi/kyc/iKYCUnderlying.d.ts +548 -0
- package/dist/types/abi/kyc/iSecuritizeDegenNFT.d.ts +404 -0
- package/dist/types/abi/kyc/iSecuritizeKYCFactory.d.ts +376 -0
- package/dist/types/sdk/OnchainSDK.d.ts +19 -1
- package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +59 -6
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
- package/dist/types/sdk/accounts/types.d.ts +114 -14
- package/dist/types/sdk/base/TokensMeta.d.ts +14 -3
- package/dist/types/sdk/base/token-types.d.ts +44 -4
- package/dist/types/sdk/base/types.d.ts +116 -2
- package/dist/types/sdk/chain/chains.d.ts +5 -1
- package/dist/types/sdk/constants/address-provider.d.ts +1 -0
- package/dist/types/sdk/market/MarketRegister.d.ts +6 -9
- package/dist/types/sdk/market/MarketSuite.d.ts +2 -0
- package/dist/types/sdk/market/index.d.ts +1 -0
- package/dist/types/sdk/market/kyc/KYCRegistry.d.ts +52 -0
- package/dist/types/sdk/market/kyc/index.d.ts +3 -0
- package/dist/types/sdk/market/kyc/securitize/SecuritizeKYCFactory.d.ts +429 -0
- package/dist/types/sdk/market/kyc/securitize/constants.d.ts +1 -0
- package/dist/types/sdk/market/kyc/securitize/index.d.ts +3 -0
- package/dist/types/sdk/market/kyc/securitize/types.d.ts +136 -0
- package/dist/types/sdk/market/kyc/types.d.ts +171 -0
- package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +3 -2
- package/dist/types/sdk/market/oracle/types.d.ts +3 -10
- package/dist/types/sdk/market/pool/PoolSuite.d.ts +2 -0
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +6 -2
- package/dist/types/sdk/market/pool/index.d.ts +1 -0
- package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +1 -1
- package/dist/types/sdk/market/types.d.ts +1 -1
- package/dist/types/sdk/options.d.ts +1 -0
- package/dist/types/sdk/pools/PoolService.d.ts +8 -8
- package/dist/types/sdk/pools/types.d.ts +1 -1
- package/dist/types/sdk/types/state-human.d.ts +2 -0
- package/dist/types/sdk/types/state.d.ts +5 -0
- package/dist/types/sdk/utils/viem/executeDelegatedMulticalls.d.ts +28 -0
- package/dist/types/sdk/utils/viem/index.d.ts +1 -2
- package/package.json +4 -4
- package/dist/cjs/sdk/utils/viem/getLogsPaginated.js +0 -62
- package/dist/cjs/sdk/utils/viem/getLogsSafe.js +0 -87
- package/dist/esm/sdk/accounts/utils.js +0 -14
- package/dist/esm/sdk/utils/viem/getLogsPaginated.js +0 -38
- package/dist/esm/sdk/utils/viem/getLogsSafe.js +0 -65
- package/dist/types/sdk/accounts/utils.d.ts +0 -2
- package/dist/types/sdk/utils/viem/getLogsPaginated.d.ts +0 -12
- package/dist/types/sdk/utils/viem/getLogsSafe.d.ts +0 -3
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
const iSecuritizeKYCFactoryAbi = [
|
|
2
|
+
{
|
|
3
|
+
type: "function",
|
|
4
|
+
name: "contractType",
|
|
5
|
+
inputs: [],
|
|
6
|
+
outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
|
|
7
|
+
stateMutability: "view"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
type: "function",
|
|
11
|
+
name: "getCreditAccounts",
|
|
12
|
+
inputs: [{ name: "investor", type: "address", internalType: "address" }],
|
|
13
|
+
outputs: [{ name: "", type: "address[]", internalType: "address[]" }],
|
|
14
|
+
stateMutability: "view"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: "function",
|
|
18
|
+
name: "getDegenNFT",
|
|
19
|
+
inputs: [],
|
|
20
|
+
outputs: [{ name: "", type: "address", internalType: "address" }],
|
|
21
|
+
stateMutability: "view"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: "function",
|
|
25
|
+
name: "getInvestor",
|
|
26
|
+
inputs: [
|
|
27
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
28
|
+
],
|
|
29
|
+
outputs: [{ name: "", type: "address", internalType: "address" }],
|
|
30
|
+
stateMutability: "view"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
type: "function",
|
|
34
|
+
name: "getTokens",
|
|
35
|
+
inputs: [],
|
|
36
|
+
outputs: [{ name: "", type: "address[]", internalType: "address[]" }],
|
|
37
|
+
stateMutability: "view"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: "function",
|
|
41
|
+
name: "getWallet",
|
|
42
|
+
inputs: [
|
|
43
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
44
|
+
],
|
|
45
|
+
outputs: [{ name: "", type: "address", internalType: "address" }],
|
|
46
|
+
stateMutability: "view"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: "function",
|
|
50
|
+
name: "isCreditAccount",
|
|
51
|
+
inputs: [
|
|
52
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
53
|
+
],
|
|
54
|
+
outputs: [{ name: "", type: "bool", internalType: "bool" }],
|
|
55
|
+
stateMutability: "view"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: "function",
|
|
59
|
+
name: "isFrozen",
|
|
60
|
+
inputs: [
|
|
61
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
62
|
+
],
|
|
63
|
+
outputs: [{ name: "", type: "bool", internalType: "bool" }],
|
|
64
|
+
stateMutability: "view"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: "function",
|
|
68
|
+
name: "multicall",
|
|
69
|
+
inputs: [
|
|
70
|
+
{ name: "creditAccount", type: "address", internalType: "address" },
|
|
71
|
+
{
|
|
72
|
+
name: "calls",
|
|
73
|
+
type: "tuple[]",
|
|
74
|
+
internalType: "struct MultiCall[]",
|
|
75
|
+
components: [
|
|
76
|
+
{ name: "target", type: "address", internalType: "address" },
|
|
77
|
+
{ name: "callData", type: "bytes", internalType: "bytes" }
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: "tokensToRegister",
|
|
82
|
+
type: "address[]",
|
|
83
|
+
internalType: "address[]"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "signaturesToCache",
|
|
87
|
+
type: "tuple[]",
|
|
88
|
+
internalType: "struct ISecuritizeDegenNFT.RegisterMessage[]",
|
|
89
|
+
components: [
|
|
90
|
+
{ name: "token", type: "address", internalType: "address" },
|
|
91
|
+
{
|
|
92
|
+
name: "signature",
|
|
93
|
+
type: "tuple",
|
|
94
|
+
internalType: "struct ISecuritizeDegenNFT.Signature",
|
|
95
|
+
components: [
|
|
96
|
+
{ name: "deadline", type: "uint256", internalType: "uint256" },
|
|
97
|
+
{ name: "signature", type: "bytes", internalType: "bytes" }
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
outputs: [],
|
|
104
|
+
stateMutability: "nonpayable"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: "function",
|
|
108
|
+
name: "openCreditAccount",
|
|
109
|
+
inputs: [
|
|
110
|
+
{ name: "creditManager", type: "address", internalType: "address" },
|
|
111
|
+
{
|
|
112
|
+
name: "calls",
|
|
113
|
+
type: "tuple[]",
|
|
114
|
+
internalType: "struct MultiCall[]",
|
|
115
|
+
components: [
|
|
116
|
+
{ name: "target", type: "address", internalType: "address" },
|
|
117
|
+
{ name: "callData", type: "bytes", internalType: "bytes" }
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "tokensToRegister",
|
|
122
|
+
type: "address[]",
|
|
123
|
+
internalType: "address[]"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: "signaturesToCache",
|
|
127
|
+
type: "tuple[]",
|
|
128
|
+
internalType: "struct ISecuritizeDegenNFT.RegisterMessage[]",
|
|
129
|
+
components: [
|
|
130
|
+
{ name: "token", type: "address", internalType: "address" },
|
|
131
|
+
{
|
|
132
|
+
name: "signature",
|
|
133
|
+
type: "tuple",
|
|
134
|
+
internalType: "struct ISecuritizeDegenNFT.Signature",
|
|
135
|
+
components: [
|
|
136
|
+
{ name: "deadline", type: "uint256", internalType: "uint256" },
|
|
137
|
+
{ name: "signature", type: "bytes", internalType: "bytes" }
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
outputs: [
|
|
144
|
+
{ name: "creditAccount", type: "address", internalType: "address" },
|
|
145
|
+
{ name: "wallet", type: "address", internalType: "address" }
|
|
146
|
+
],
|
|
147
|
+
stateMutability: "nonpayable"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: "function",
|
|
151
|
+
name: "precomputeWalletAddress",
|
|
152
|
+
inputs: [
|
|
153
|
+
{ name: "creditManager", type: "address", internalType: "address" },
|
|
154
|
+
{ name: "investor", type: "address", internalType: "address" }
|
|
155
|
+
],
|
|
156
|
+
outputs: [{ name: "", type: "address", internalType: "address" }],
|
|
157
|
+
stateMutability: "view"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: "function",
|
|
161
|
+
name: "serialize",
|
|
162
|
+
inputs: [],
|
|
163
|
+
outputs: [{ name: "serializedData", type: "bytes", internalType: "bytes" }],
|
|
164
|
+
stateMutability: "view"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: "function",
|
|
168
|
+
name: "setFrozenStatus",
|
|
169
|
+
inputs: [
|
|
170
|
+
{ name: "creditAccount", type: "address", internalType: "address" },
|
|
171
|
+
{ name: "frozen", type: "bool", internalType: "bool" }
|
|
172
|
+
],
|
|
173
|
+
outputs: [],
|
|
174
|
+
stateMutability: "nonpayable"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
type: "function",
|
|
178
|
+
name: "setInvestor",
|
|
179
|
+
inputs: [
|
|
180
|
+
{ name: "creditAccount", type: "address", internalType: "address" },
|
|
181
|
+
{ name: "investor", type: "address", internalType: "address" }
|
|
182
|
+
],
|
|
183
|
+
outputs: [],
|
|
184
|
+
stateMutability: "nonpayable"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
type: "function",
|
|
188
|
+
name: "version",
|
|
189
|
+
inputs: [],
|
|
190
|
+
outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
|
|
191
|
+
stateMutability: "view"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
type: "event",
|
|
195
|
+
name: "CreateWallet",
|
|
196
|
+
inputs: [
|
|
197
|
+
{
|
|
198
|
+
name: "creditAccount",
|
|
199
|
+
type: "address",
|
|
200
|
+
indexed: true,
|
|
201
|
+
internalType: "address"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: "wallet",
|
|
205
|
+
type: "address",
|
|
206
|
+
indexed: true,
|
|
207
|
+
internalType: "address"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: "investor",
|
|
211
|
+
type: "address",
|
|
212
|
+
indexed: true,
|
|
213
|
+
internalType: "address"
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
anonymous: false
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
type: "event",
|
|
220
|
+
name: "SetFrozenStatus",
|
|
221
|
+
inputs: [
|
|
222
|
+
{
|
|
223
|
+
name: "creditAccount",
|
|
224
|
+
type: "address",
|
|
225
|
+
indexed: true,
|
|
226
|
+
internalType: "address"
|
|
227
|
+
},
|
|
228
|
+
{ name: "frozen", type: "bool", indexed: false, internalType: "bool" }
|
|
229
|
+
],
|
|
230
|
+
anonymous: false
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
type: "event",
|
|
234
|
+
name: "SetInvestor",
|
|
235
|
+
inputs: [
|
|
236
|
+
{
|
|
237
|
+
name: "creditAccount",
|
|
238
|
+
type: "address",
|
|
239
|
+
indexed: true,
|
|
240
|
+
internalType: "address"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: "oldInvestor",
|
|
244
|
+
type: "address",
|
|
245
|
+
indexed: true,
|
|
246
|
+
internalType: "address"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
name: "newInvestor",
|
|
250
|
+
type: "address",
|
|
251
|
+
indexed: true,
|
|
252
|
+
internalType: "address"
|
|
253
|
+
}
|
|
254
|
+
],
|
|
255
|
+
anonymous: false
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
type: "error",
|
|
259
|
+
name: "CallerIsNotInvestorException",
|
|
260
|
+
inputs: [
|
|
261
|
+
{ name: "caller", type: "address", internalType: "address" },
|
|
262
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
type: "error",
|
|
267
|
+
name: "FrozenCreditAccountException",
|
|
268
|
+
inputs: [
|
|
269
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
270
|
+
]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
type: "error",
|
|
274
|
+
name: "InvalidCreditManagerException",
|
|
275
|
+
inputs: [
|
|
276
|
+
{ name: "creditManager", type: "address", internalType: "address" }
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
type: "error",
|
|
281
|
+
name: "InvalidUnderlyingTokenException",
|
|
282
|
+
inputs: [{ name: "underlying", type: "address", internalType: "address" }]
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
type: "error",
|
|
286
|
+
name: "UnknownCreditAccountException",
|
|
287
|
+
inputs: [
|
|
288
|
+
{ name: "creditAccount", type: "address", internalType: "address" }
|
|
289
|
+
]
|
|
290
|
+
},
|
|
291
|
+
{ type: "error", name: "ZeroAddressException", inputs: [] }
|
|
292
|
+
];
|
|
293
|
+
export {
|
|
294
|
+
iSecuritizeKYCFactoryAbi
|
|
295
|
+
};
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
parseEventLogs
|
|
7
7
|
} from "viem";
|
|
8
8
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
9
|
-
import { iCreditFacadeV310Abi
|
|
9
|
+
import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
|
|
10
10
|
import { ierc20Abi } from "../abi/iERC20.js";
|
|
11
11
|
import {
|
|
12
12
|
ADDRESS_0X0,
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
childLogger,
|
|
16
16
|
MAX_UINT256,
|
|
17
17
|
PERCENTAGE_FACTOR,
|
|
18
|
+
PoolService,
|
|
18
19
|
SDKConstruct,
|
|
19
20
|
sendRawTx
|
|
20
21
|
} from "../sdk/index.js";
|
|
@@ -43,6 +44,7 @@ class AccountOpener extends SDKConstruct {
|
|
|
43
44
|
#minDebtMultiplier;
|
|
44
45
|
#allowMint;
|
|
45
46
|
#leverageDelta;
|
|
47
|
+
#poolService;
|
|
46
48
|
constructor(service, options_ = {}) {
|
|
47
49
|
super(service.sdk);
|
|
48
50
|
const {
|
|
@@ -68,6 +70,7 @@ class AccountOpener extends SDKConstruct {
|
|
|
68
70
|
this.#poolDepositMultiplier = BigInt(poolDepositMultiplier);
|
|
69
71
|
this.#minDebtMultiplier = BigInt(minDebtMultiplier);
|
|
70
72
|
this.#leverageDelta = BigInt(leverageDelta);
|
|
73
|
+
this.#poolService = new PoolService(service.sdk);
|
|
71
74
|
this.#logger?.info(
|
|
72
75
|
{
|
|
73
76
|
borrower: privateKeyToAccount(this.borrowerKey).address,
|
|
@@ -105,6 +108,10 @@ class AccountOpener extends SDKConstruct {
|
|
|
105
108
|
},
|
|
106
109
|
"opening credit accounts"
|
|
107
110
|
);
|
|
111
|
+
await Promise.all([
|
|
112
|
+
this.sdk.tokensMeta.loadTokenData(),
|
|
113
|
+
this.sdk.marketRegister.loadZappers()
|
|
114
|
+
]);
|
|
108
115
|
let deposits = [];
|
|
109
116
|
if (depositIntoPools) {
|
|
110
117
|
try {
|
|
@@ -456,9 +463,34 @@ class AccountOpener extends SDKConstruct {
|
|
|
456
463
|
this.#logger?.debug(
|
|
457
464
|
`depositor balance in underlying: ${this.sdk.tokensMeta.formatBN(pool.underlying, allowance, { symbol: true })}`
|
|
458
465
|
);
|
|
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
|
+
);
|
|
459
491
|
txHash = await this.#anvil.writeContract({
|
|
460
492
|
account: depositor,
|
|
461
|
-
address:
|
|
493
|
+
address: metadata.approveTarget,
|
|
462
494
|
abi: ierc20Abi,
|
|
463
495
|
functionName: "approve",
|
|
464
496
|
args: [address, allowance],
|
|
@@ -475,12 +507,21 @@ class AccountOpener extends SDKConstruct {
|
|
|
475
507
|
this.#logger?.debug(
|
|
476
508
|
`depositor approved underlying for pool ${poolName}: ${txHash}`
|
|
477
509
|
);
|
|
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
|
+
}
|
|
478
519
|
txHash = await this.#anvil.writeContract({
|
|
479
520
|
account: depositor,
|
|
480
|
-
address,
|
|
481
|
-
abi:
|
|
482
|
-
functionName:
|
|
483
|
-
args:
|
|
521
|
+
address: depositCall.target,
|
|
522
|
+
abi: depositCall.abi,
|
|
523
|
+
functionName: depositCall.functionName,
|
|
524
|
+
args: depositCall.args,
|
|
484
525
|
chain: this.#anvil.chain
|
|
485
526
|
});
|
|
486
527
|
receipt = await this.#anvil.waitForTransactionReceipt({ hash: txHash });
|
|
@@ -36,7 +36,7 @@ class PoolPointsAPI {
|
|
|
36
36
|
}
|
|
37
37
|
static async getTokenTotal(token, network, tokensList) {
|
|
38
38
|
const chainId = chains[network]?.id;
|
|
39
|
-
const url = `https://
|
|
39
|
+
const url = `https://api.gearbox.foundation/v1/getBalanceAt?asset=${token}&chainId=${chainId}`;
|
|
40
40
|
const result = await axios.get(url);
|
|
41
41
|
const balance = result.data.result.reduce(
|
|
42
42
|
(sum, r) => r.effective_balance + sum,
|
|
@@ -15,8 +15,10 @@ class MultichainSDK {
|
|
|
15
15
|
#chains;
|
|
16
16
|
#redstoneCache;
|
|
17
17
|
#pythCache;
|
|
18
|
+
#logger;
|
|
18
19
|
constructor(options) {
|
|
19
20
|
this.#chains = /* @__PURE__ */ new Map();
|
|
21
|
+
this.#logger = options.logger;
|
|
20
22
|
for (const [network, chainConfig] of Object.entries(options.chains)) {
|
|
21
23
|
const { gasLimit, ...clientOptions } = chainConfig;
|
|
22
24
|
let plugins;
|
|
@@ -78,6 +80,7 @@ class MultichainSDK {
|
|
|
78
80
|
});
|
|
79
81
|
})
|
|
80
82
|
);
|
|
83
|
+
this.#logger?.info("Attached all chains");
|
|
81
84
|
}
|
|
82
85
|
/**
|
|
83
86
|
* Hydrate all configured chains from serialised state.
|
|
@@ -128,6 +131,7 @@ class MultichainSDK {
|
|
|
128
131
|
}
|
|
129
132
|
});
|
|
130
133
|
}
|
|
134
|
+
this.#logger?.info("Hydrated all chains");
|
|
131
135
|
}
|
|
132
136
|
/**
|
|
133
137
|
* Returns the {@link OnchainSDK} for a given network or chain ID.
|
|
@@ -186,6 +190,7 @@ class MultichainSDK {
|
|
|
186
190
|
if (Object.keys(errors).length > 0) {
|
|
187
191
|
throw new SdkSyncFailedError(errors);
|
|
188
192
|
}
|
|
193
|
+
this.#logger?.info("Synced state for all chains");
|
|
189
194
|
}
|
|
190
195
|
/**
|
|
191
196
|
* Serialisable snapshot of all chains' state.
|
|
@@ -22,12 +22,15 @@ import {
|
|
|
22
22
|
SdkNotAttachedError,
|
|
23
23
|
SdkStateVersionMismatchError
|
|
24
24
|
} from "./core/index.js";
|
|
25
|
+
import { KYCRegistry } from "./market/index.js";
|
|
25
26
|
import { MarketRegister } from "./market/MarketRegister.js";
|
|
26
27
|
import { PriceFeedRegister } from "./market/pricefeeds/index.js";
|
|
27
28
|
import { PluginStateVersionError } from "./plugins/index.js";
|
|
28
29
|
import { createRouter } from "./router/index.js";
|
|
29
30
|
import { formatTimestamp, TypedObjectUtils, toAddress } from "./utils/index.js";
|
|
30
|
-
import {
|
|
31
|
+
import {
|
|
32
|
+
executeDelegatedMulticalls
|
|
33
|
+
} from "./utils/viem/index.js";
|
|
31
34
|
const STATE_VERSION = 1;
|
|
32
35
|
function createViemClient(opts, chain) {
|
|
33
36
|
if ("client" in opts) {
|
|
@@ -56,6 +59,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
56
59
|
#syncing = false;
|
|
57
60
|
#attached = false;
|
|
58
61
|
#addressProvider;
|
|
62
|
+
#kyc;
|
|
59
63
|
#marketRegister;
|
|
60
64
|
#priceFeeds;
|
|
61
65
|
/**
|
|
@@ -83,6 +87,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
83
87
|
super(client, options?.logger);
|
|
84
88
|
this.strictContractTypes = options?.strictContractTypes ?? false;
|
|
85
89
|
this.plugins = options?.plugins ?? {};
|
|
90
|
+
this.#kyc = new KYCRegistry(this);
|
|
86
91
|
for (const plugin of Object.values(this.plugins)) {
|
|
87
92
|
plugin.sdk = this;
|
|
88
93
|
}
|
|
@@ -112,6 +117,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
112
117
|
const marketConfigurators = mcs ?? TypedObjectUtils.keys(
|
|
113
118
|
this.client.chain.defaultMarketConfigurators
|
|
114
119
|
);
|
|
120
|
+
const kycFactories = options?.kycFactories ?? this.client.chain.kycFactories;
|
|
115
121
|
this.logger?.info(
|
|
116
122
|
{
|
|
117
123
|
networkType: this.networkType,
|
|
@@ -149,10 +155,33 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
149
155
|
);
|
|
150
156
|
await this.#addressProvider.syncState(this.currentBlock);
|
|
151
157
|
this.#marketRegister = new MarketRegister(this, ignoreMarkets);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
if (!marketConfigurators.length) {
|
|
159
|
+
this.logger?.warn(
|
|
160
|
+
"no market configurators provided, skipping market loading"
|
|
161
|
+
);
|
|
162
|
+
} else {
|
|
163
|
+
const delegated = [
|
|
164
|
+
...this.#marketRegister.getLoadMulticalls(marketConfigurators),
|
|
165
|
+
...this.#kyc.getLoadMulticalls(marketConfigurators, kycFactories)
|
|
166
|
+
];
|
|
167
|
+
let txs = [];
|
|
168
|
+
if (!ignoreUpdateablePrices) {
|
|
169
|
+
const updatables = await this.#priceFeeds.getPartialUpdatablePriceFeeds(
|
|
170
|
+
marketConfigurators
|
|
171
|
+
);
|
|
172
|
+
const updates = await this.#priceFeeds.generatePriceFeedsUpdateTxs(updatables);
|
|
173
|
+
txs = updates.txs;
|
|
174
|
+
}
|
|
175
|
+
this.logger?.debug(
|
|
176
|
+
{ configurators: marketConfigurators },
|
|
177
|
+
`calling getMarkets with ${txs.length} price updates in block ${this.currentBlock}`
|
|
178
|
+
);
|
|
179
|
+
await executeDelegatedMulticalls(this.client, delegated, {
|
|
180
|
+
priceUpdates: txs,
|
|
181
|
+
blockNumber: this.currentBlock,
|
|
182
|
+
gas: this.gasLimit
|
|
183
|
+
});
|
|
184
|
+
}
|
|
156
185
|
const pluginsList = TypedObjectUtils.entries(this.plugins);
|
|
157
186
|
const pluginResponse = await Promise.allSettled(
|
|
158
187
|
pluginsList.map(([name, plugin]) => {
|
|
@@ -205,6 +234,8 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
205
234
|
);
|
|
206
235
|
this.#marketRegister = new MarketRegister(this, ignoreMarkets);
|
|
207
236
|
this.#marketRegister.hydrate(state.markets);
|
|
237
|
+
this.#kyc = new KYCRegistry(this);
|
|
238
|
+
this.#kyc.setState(state.kyc);
|
|
208
239
|
for (const [name, plugin] of TypedObjectUtils.entries(this.plugins)) {
|
|
209
240
|
const pluginState = state.plugins[name];
|
|
210
241
|
if (plugin.hydrate && pluginState) {
|
|
@@ -248,6 +279,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
248
279
|
addressProviderV3: this.addressProvider.stateHuman(raw)
|
|
249
280
|
},
|
|
250
281
|
tokens: this.tokensMeta.values(),
|
|
282
|
+
kyc: this.#kyc.stateHuman(raw),
|
|
251
283
|
plugins: Object.fromEntries(
|
|
252
284
|
TypedObjectUtils.entries(this.plugins).map(([name, plugin]) => [
|
|
253
285
|
name,
|
|
@@ -267,6 +299,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
267
299
|
timestamp: this.timestamp,
|
|
268
300
|
addressProvider: this.addressProvider.state,
|
|
269
301
|
markets: this.marketRegister.state,
|
|
302
|
+
kyc: this.#kyc.state,
|
|
270
303
|
plugins: Object.fromEntries(
|
|
271
304
|
TypedObjectUtils.entries(this.plugins).map(([name, plugin]) => [
|
|
272
305
|
name,
|
|
@@ -321,7 +354,7 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
321
354
|
this.logger?.debug(
|
|
322
355
|
`getting logs from ${watchAddresses.length} addresses in [${fromBlock}:${blockNumber}]`
|
|
323
356
|
);
|
|
324
|
-
const logs = await
|
|
357
|
+
const logs = await this.client.getLogs({
|
|
325
358
|
fromBlock,
|
|
326
359
|
toBlock: blockNumber,
|
|
327
360
|
address: watchAddresses
|
|
@@ -434,9 +467,27 @@ class OnchainSDK extends ChainContractsRegister {
|
|
|
434
467
|
return this.#marketRegister;
|
|
435
468
|
}
|
|
436
469
|
/**
|
|
470
|
+
* KYC register for KYC-wrapped underlying tokens and factories.
|
|
471
|
+
*
|
|
472
|
+
* @throws If the SDK has not been attached or hydrated yet.
|
|
473
|
+
**/
|
|
474
|
+
get kyc() {
|
|
475
|
+
if (this.#kyc === void 0) {
|
|
476
|
+
throw new SdkNotAttachedError();
|
|
477
|
+
}
|
|
478
|
+
return this.#kyc;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* @internal
|
|
437
482
|
* Resolves the appropriate router contract for a given credit manager,
|
|
438
483
|
* credit facade, or explicit version range.
|
|
439
|
-
|
|
484
|
+
*
|
|
485
|
+
* @param params - Identifies the context: a credit manager address/state,
|
|
486
|
+
* a credit facade address/state, or a {@link VersionRange}.
|
|
487
|
+
* @returns The matching router contract instance.
|
|
488
|
+
* @throws If the credit facade version is unsupported or no router is
|
|
489
|
+
* registered for the resolved version range.
|
|
490
|
+
**/
|
|
440
491
|
routerFor(params) {
|
|
441
492
|
let routerRange;
|
|
442
493
|
if (Array.isArray(params)) {
|