@reyaxyz/common 0.134.0 → 0.135.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/README.md CHANGED
@@ -6,5 +6,5 @@
6
6
 
7
7
  | Statements | Branches | Functions | Lines |
8
8
  | --------------------------- | ----------------------- | ------------------------- | ----------------- |
9
- | ![Statements](https://img.shields.io/badge/statements-14%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-13.58%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-9.3%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-14.5%25-red.svg?style=flat) |
9
+ | ![Statements](https://img.shields.io/badge/statements-13.84%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-13.33%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-9.16%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-14.33%25-red.svg?style=flat) |
10
10
 
@@ -19,6 +19,10 @@ export type GetETHBalanceArgs = {
19
19
  walletAddress: string;
20
20
  subject: Signer | Provider;
21
21
  };
22
+ export type GetETHBalanceBatchArgs = {
23
+ walletAddress: string;
24
+ chain: MoneyInOutChainId;
25
+ };
22
26
  export type GetERC20BalanceBatchArgs = {
23
27
  tokenAddress: string;
24
28
  walletAddress: string;
@@ -29,5 +33,6 @@ export type GetBalancesForBridgeArgs = {
29
33
  };
30
34
  export declare const getERC20Balance: ({ tokenAddress, walletAddress, subject, }: GetERC20BalanceArgs) => Promise<number>;
31
35
  export declare const getETHBalance: ({ walletAddress, subject, }: GetETHBalanceArgs) => Promise<number>;
36
+ export declare const getETHBalanceBatch: ({ walletAddress, chain, }: GetETHBalanceBatchArgs) => Promise<number>;
32
37
  export declare const getERC20BalanceBatch: ({ tokenAddress, walletAddress, chain, }: GetERC20BalanceBatchArgs) => Promise<number>;
33
38
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"/","sources":["utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG1C,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,OAAO,kBAAmB,MAAM,aACzB,MAAM,WAKzB,CAAC;AAEF,eAAO,MAAM,KAAK,kBAAmB,MAAM,aAAY,MAAM,KAAK,MAiBjE,CAAC;AAEF,eAAO,MAAM,qBAAqB,iBAClB,MAAM,WACX,MAAM,GAAG,QAAQ,KACzB,QAWF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,OAE9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,sBACb,OAAO,GAAG,MAAM,YACzB,WAAW,GAAG,iBAAiB,KACxC,SA+BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,WAAW,GAAG,iBAAiB,KACvC,SAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,YACtB,WAAW,GAAG,iBAAiB,KACvC,SAAS,EAEX,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAC5B,WAAW,GAAG,iBAAiB,KACvC,SAYF,CAAC;AAEF,eAAO,MAAM,iBAAiB,8DAK3B,uBAAuB,KAAG,QAAQ,MAAM,CAW1C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,eAAe,8CAIzB,mBAAmB,KAAG,QAAQ,MAAM,CAUtC,CAAC;AAEF,eAAO,MAAM,aAAa,gCAGvB,iBAAiB,KAAG,QAAQ,MAAM,CASpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4CAI9B,wBAAwB,KAAG,QAAQ,MAAM,CAsB3C,CAAC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"/","sources":["utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG1C,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACV,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,OAAO,kBAAmB,MAAM,aACzB,MAAM,WAKzB,CAAC;AAEF,eAAO,MAAM,KAAK,kBAAmB,MAAM,aAAY,MAAM,KAAK,MAiBjE,CAAC;AAEF,eAAO,MAAM,qBAAqB,iBAClB,MAAM,WACX,MAAM,GAAG,QAAQ,KACzB,QAWF,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,OAE9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,sBACb,OAAO,GAAG,MAAM,YACzB,WAAW,GAAG,iBAAiB,KACxC,SA+BF,CAAC;AAEF,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,WAAW,GAAG,iBAAiB,KACvC,SAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,YACtB,WAAW,GAAG,iBAAiB,KACvC,SAAS,EAEX,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAC5B,WAAW,GAAG,iBAAiB,KACvC,SAYF,CAAC;AAEF,eAAO,MAAM,iBAAiB,8DAK3B,uBAAuB,KAAG,QAAQ,MAAM,CAW1C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,eAAe,8CAIzB,mBAAmB,KAAG,QAAQ,MAAM,CAUtC,CAAC;AAEF,eAAO,MAAM,aAAa,gCAGvB,iBAAiB,KAAG,QAAQ,MAAM,CASpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,8BAG5B,sBAAsB,KAAG,QAAQ,MAAM,CAqBzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4CAI9B,wBAAwB,KAAG,QAAQ,MAAM,CAsB3C,CAAC"}
@@ -36,18 +36,6 @@
36
36
  }
37
37
  }
38
38
  },
39
- "WETH": {
40
- "isAppChain": false,
41
- "NonMintableToken": "0x6c7a28F6ae2D245B0130520B112FA3544a06d9AE",
42
- "Vault": "0xA53586c3fB181b244CC4Ee42222300b882396427",
43
- "ExecutionHelper": "0x5D77d53a982caac4FC9BF5e21B9aa4C52731fCaA",
44
- "LimitExecutionHook": "0xBc40F10f50a97af01650c43F174F28806e0Bf083",
45
- "connectors": {
46
- "89346161": {
47
- "FAST": "0xaDF21508f72Cc5b28F70cb22171995f817D5282A"
48
- }
49
- }
50
- },
51
39
  "WBTC": {
52
40
  "isAppChain": false,
53
41
  "NonMintableToken": "0x92c7a51BD507736AC0Dda48b5F35A4AaD0c2Bb4D",
@@ -98,27 +86,39 @@
98
86
  }
99
87
  }
100
88
  },
101
- "WETH": {
89
+ "WBTC": {
90
+ "isAppChain": false,
91
+ "NonMintableToken": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
92
+ "Vault": "0xbA755214612C5A61fba9edec4155Dd3AC707cF4B",
93
+ "ExecutionHelper": "0xD34007319B34652615BA3BCfAefcb0d75b78FD07",
94
+ "LimitExecutionHook": "0xc71d74027264C5B664a9283f6F34D4ceB2544F75",
95
+ "connectors": {
96
+ "89346161": {
97
+ "FAST": "0x4972F3ef9191c1C0D99dE1e4ec6D346aeDE91878"
98
+ }
99
+ }
100
+ },
101
+ "ETH": {
102
102
  "isAppChain": false,
103
103
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
104
- "Vault": "0x4f5164Ea22a4Bf46FCE30C439eE6C6755b3525F6",
105
- "ExecutionHelper": "0x79C06E5BD8e7a4dc151D7591eba71C2a5D49e2B6",
106
- "LimitExecutionHook": "0x4f471ff392733b722992F012e40728e36c5e9848",
104
+ "Vault": "0x717faCaA298fa151c6ffad47B5e9c51c41BC2199",
105
+ "ExecutionHelper": "0xFFB09850fAb52765b5E48eAC1AA3fFAD620C8fcE",
106
+ "LimitExecutionHook": "0x7e54F4c0aCafec318aF1f5d1dCD373CdACc32622",
107
107
  "connectors": {
108
108
  "89346161": {
109
- "FAST": "0x791A471f4a355a7807870Eb633b59C867a79c0B7"
109
+ "FAST": "0xb1800573eD7828359555279711D8A27928940416"
110
110
  }
111
111
  }
112
112
  },
113
- "WBTC": {
113
+ "WETH": {
114
114
  "isAppChain": false,
115
- "NonMintableToken": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
116
- "Vault": "0xbA755214612C5A61fba9edec4155Dd3AC707cF4B",
117
- "ExecutionHelper": "0xD34007319B34652615BA3BCfAefcb0d75b78FD07",
118
- "LimitExecutionHook": "0xc71d74027264C5B664a9283f6F34D4ceB2544F75",
115
+ "NonMintableToken": "0x565810cbfa3Cf1390963E5aFa2fB953795686339",
116
+ "Vault": "0x7178e4ac1e451b48B689F71097f7d7d0A2805e4c",
117
+ "ExecutionHelper": "0x1F0F1FC746fcd4d59b6dBDDFf67a88cde70dAeE5",
118
+ "LimitExecutionHook": "0xD9edcC943ed9729B08E52Bb1e110FE43d1930773",
119
119
  "connectors": {
120
120
  "89346161": {
121
- "FAST": "0x4972F3ef9191c1C0D99dE1e4ec6D346aeDE91878"
121
+ "FAST": "0x613efcCFa27110e2A4d12e0467599a2911Fd96dc"
122
122
  }
123
123
  }
124
124
  }
@@ -160,27 +160,39 @@
160
160
  }
161
161
  }
162
162
  },
163
- "WETH": {
163
+ "WBTC": {
164
+ "isAppChain": false,
165
+ "NonMintableToken": "0x94BEff5da6201cB2C8F489196FD970B3DF5aA32A",
166
+ "Vault": "0x0645095Dc03B9546DFDB2fC8e7a52959ec37efA1",
167
+ "ExecutionHelper": "0xb7A6DBA1D9035Cc7Fe20A2e40e5B2FB2E8F5Ddf9",
168
+ "LimitExecutionHook": "0x0D50d4336df62F86771B2Ef5db67be8c1896Ace1",
169
+ "connectors": {
170
+ "89346161": {
171
+ "FAST": "0xd550Ce2BB4cC954542EfcF23Ea1147143Bd8F77C"
172
+ }
173
+ }
174
+ },
175
+ "ETH": {
164
176
  "isAppChain": false,
165
177
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
166
- "Vault": "0x4FE1aDdCb348BF191164FB10605C8Beec8D42aBd",
167
- "ExecutionHelper": "0x5333982087C2Db4f85d0Ed2CdE22b22ABC0fdae3",
168
- "LimitExecutionHook": "0x450aa5c9a0809e5e704254F79CF3452031c01EDE",
178
+ "Vault": "0x9cC1Cc14976345b5672188484eAC851FBAba7B78",
179
+ "ExecutionHelper": "0xD0C23F8288053725B7cB13E8Bc274E347F5Ac2F1",
180
+ "LimitExecutionHook": "0x9A1409D4A9A89f0dA90Bb03c781b31F8339c2A87",
169
181
  "connectors": {
170
182
  "89346161": {
171
- "FAST": "0xD23678c7D554cb09CA7892d6521d40BFb02a05C8"
183
+ "FAST": "0xDca63a39BDBb2d47eb7DED4e50653296dDb92D34"
172
184
  }
173
185
  }
174
186
  },
175
- "WBTC": {
187
+ "WETH": {
176
188
  "isAppChain": false,
177
- "NonMintableToken": "0x94BEff5da6201cB2C8F489196FD970B3DF5aA32A",
178
- "Vault": "0x0645095Dc03B9546DFDB2fC8e7a52959ec37efA1",
179
- "ExecutionHelper": "0xb7A6DBA1D9035Cc7Fe20A2e40e5B2FB2E8F5Ddf9",
180
- "LimitExecutionHook": "0x0D50d4336df62F86771B2Ef5db67be8c1896Ace1",
189
+ "NonMintableToken": "0xE67ABDA0D43f7AC8f37876bBF00D1DFadbB93aaa",
190
+ "Vault": "0x5035d9B44C29b503ebCC1E7d6223Ae78A37032d6",
191
+ "ExecutionHelper": "0xd9a317288843d8Ae4c80Bc78Eb9Af4Ee21AeeDF3",
192
+ "LimitExecutionHook": "0x10567782c459BC8Bf90B89f7Da189c754203BFEc",
181
193
  "connectors": {
182
194
  "89346161": {
183
- "FAST": "0xd550Ce2BB4cC954542EfcF23Ea1147143Bd8F77C"
195
+ "FAST": "0xF68EAa807c14b74E3feD68ED91A6Ac7063F8570B"
184
196
  }
185
197
  }
186
198
  }
@@ -222,27 +234,39 @@
222
234
  }
223
235
  }
224
236
  },
225
- "WETH": {
237
+ "WBTC": {
238
+ "isAppChain": false,
239
+ "NonMintableToken": "0xfC5CC93d85861ac82d89fc2D3e56315540E9C8A7",
240
+ "Vault": "0x65ce0D9c5bbF43ee7A6011B3D077DD2FeA6b2726",
241
+ "ExecutionHelper": "0x78C39bA2c327821F6080A79146baf2Ae704a6384",
242
+ "LimitExecutionHook": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
243
+ "connectors": {
244
+ "89346161": {
245
+ "FAST": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a"
246
+ }
247
+ }
248
+ },
249
+ "ETH": {
226
250
  "isAppChain": false,
227
251
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
228
- "Vault": "0x2dc464B4f5Fd55ea19f0bdF71A8dc3584eeb64d7",
229
- "ExecutionHelper": "0x322A8EA44716586b6BB31456055e61B28da4f1C1",
230
- "LimitExecutionHook": "0xEB7F89394B325a021259939DA5Ba5EE83984b7F5",
252
+ "Vault": "0x6c929A83B660cF12EEf6DE937b4cC49f7cc8d801",
253
+ "ExecutionHelper": "0xb0C67c39BF32bEDF8AF43F5E972EF580239Dd99f",
254
+ "LimitExecutionHook": "0x4EB0ECF4f9b6145fFFa1AEf938bFCb71CFfBe15c",
231
255
  "connectors": {
232
256
  "89346161": {
233
- "FAST": "0x13058f01BB8E2A93a600875aBE8647b30BE72765"
257
+ "FAST": "0x2DD3d706cCA9c0b7970e8D0478e5b0BA6d2FD51F"
234
258
  }
235
259
  }
236
260
  },
237
- "WBTC": {
261
+ "WETH": {
238
262
  "isAppChain": false,
239
- "NonMintableToken": "0xfC5CC93d85861ac82d89fc2D3e56315540E9C8A7",
240
- "Vault": "0x65ce0D9c5bbF43ee7A6011B3D077DD2FeA6b2726",
241
- "ExecutionHelper": "0x78C39bA2c327821F6080A79146baf2Ae704a6384",
242
- "LimitExecutionHook": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
263
+ "NonMintableToken": "0x2b42AFFD4b7C14d9B7C2579229495c052672Ccd3",
264
+ "Vault": "0xb871c1B0f46eB248746e7c69f0438Fa0B44874a5",
265
+ "ExecutionHelper": "0x520172BB0Fe58a31f661f4710DF423f430841438",
266
+ "LimitExecutionHook": "0xa4437603F27f49b9e2cEC7FD03A35e3804c9747b",
243
267
  "connectors": {
244
268
  "89346161": {
245
- "FAST": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a"
269
+ "FAST": "0xc8E11C9C1D8c1512b4a5bb058aaC92b8B397d4Bf"
246
270
  }
247
271
  }
248
272
  }
@@ -311,24 +335,39 @@
311
335
  }
312
336
  }
313
337
  },
314
- "WETH": {
338
+ "ETH": {
315
339
  "isAppChain": true,
316
340
  "MintableToken": "0xC123B7aEb9D2B2e8a035217d5C29e317c91842E2",
317
- "Controller": "0x9a573B27D7298c6E2f4d2D4a41c37A0C8AF6accA",
318
- "ExecutionHelper": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
319
- "LimitExecutionHook": "0x9838Fc33ea56F7664c677b1F2917c60d75a73BC6",
341
+ "Controller": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
342
+ "ExecutionHelper": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a",
343
+ "LimitExecutionHook": "0x32e6D1B1BEc1be1B93E3647c1e75228E95Da4d32",
320
344
  "connectors": {
321
- "80001": {
322
- "FAST": "0x1485BdF9fd30e32cAb4E608158D9604f4d8110f3"
345
+ "421614": {
346
+ "FAST": "0xb23DD533817e924bb4D87822E139C18008AB9220"
323
347
  },
348
+ "11155111": {
349
+ "FAST": "0xAa4edaBDB765687AE602e9EDE825a7F3ab39a1Ea"
350
+ },
351
+ "11155420": {
352
+ "FAST": "0xf25c9355aEc6d57e8A07a307e594cbD944E1dc7c"
353
+ }
354
+ }
355
+ },
356
+ "WETH": {
357
+ "isAppChain": true,
358
+ "MintableToken": "0xC123B7aEb9D2B2e8a035217d5C29e317c91842E2",
359
+ "Controller": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
360
+ "ExecutionHelper": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a",
361
+ "LimitExecutionHook": "0x32e6D1B1BEc1be1B93E3647c1e75228E95Da4d32",
362
+ "connectors": {
324
363
  "421614": {
325
- "FAST": "0x36580Ab5CC5db1E220e20156ad333Ef2229d1F2e"
364
+ "FAST": "0x2aF7a52C1fe0Ef66af0a65d32c6ab4112Db393ED"
326
365
  },
327
366
  "11155111": {
328
- "FAST": "0xeCFad5D71026979aF7B04E8C1D64D3fBda7aCC9e"
367
+ "FAST": "0x321C2Bd69819a43C340b55db40F7c8Eb3334cDe0"
329
368
  },
330
369
  "11155420": {
331
- "FAST": "0xF64010ACE8f7333dF61F6D0ae3d08C5d4704D69A"
370
+ "FAST": "0xdeCa2aff30DCBE7671d0EE8d611DC0e407279013"
332
371
  }
333
372
  }
334
373
  },
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getERC20BalanceBatch = exports.getETHBalance = exports.getERC20Balance = exports.getERC20Allowance = exports.getRUSDUnderlyingTokenInfo = exports.getTokenInfosByChain = exports.getTokenInfoByName = exports.getTokenInfoByAddress = exports.convertToAddress = exports.getERC20TokenContract = exports.scale = exports.descale = void 0;
39
+ exports.getERC20BalanceBatch = exports.getETHBalanceBatch = exports.getETHBalance = exports.getERC20Balance = exports.getERC20Allowance = exports.getRUSDUnderlyingTokenInfo = exports.getTokenInfosByChain = exports.getTokenInfoByName = exports.getTokenInfoByAddress = exports.convertToAddress = exports.getERC20TokenContract = exports.scale = exports.descale = void 0;
40
40
  var ethers_1 = require("ethers");
41
41
  var ethers_2 = require("ethers");
42
42
  var token_info_1 = require("./token-info");
@@ -189,10 +189,10 @@ var getETHBalance = function (_a) {
189
189
  });
190
190
  };
191
191
  exports.getETHBalance = getETHBalance;
192
- var getERC20BalanceBatch = function (_a) {
193
- var tokenAddress = _a.tokenAddress, walletAddress = _a.walletAddress, chain = _a.chain;
192
+ var getETHBalanceBatch = function (_a) {
193
+ var walletAddress = _a.walletAddress, chain = _a.chain;
194
194
  return __awaiter(void 0, void 0, void 0, function () {
195
- var rpcUrls, lastError, _i, rpcUrls_1, url, provider, token, currentBalance, tokenInfo, error_1;
195
+ var rpcUrls, lastError, _loop_1, _i, rpcUrls_1, url, state_1;
196
196
  return __generator(this, function (_b) {
197
197
  switch (_b.label) {
198
198
  case 0:
@@ -201,11 +201,64 @@ var getERC20BalanceBatch = function (_a) {
201
201
  throw new Error('No RPC URLs configured for the chain: ' + chain);
202
202
  }
203
203
  lastError = null;
204
+ _loop_1 = function (url) {
205
+ var provider_1, currentBalance, error_1;
206
+ return __generator(this, function (_c) {
207
+ switch (_c.label) {
208
+ case 0:
209
+ _c.trys.push([0, 2, , 3]);
210
+ provider_1 = new ethers_1.ethers.JsonRpcProvider(url);
211
+ return [4 /*yield*/, (0, retry_1.exponentialBackoff)(function () {
212
+ return provider_1.getBalance(ethers_1.ethers.getAddress(walletAddress));
213
+ })];
214
+ case 1:
215
+ currentBalance = _c.sent();
216
+ return [2 /*return*/, { value: (0, exports.descale)(18)(currentBalance) }];
217
+ case 2:
218
+ error_1 = _c.sent();
219
+ lastError = error_1;
220
+ return [3 /*break*/, 3];
221
+ case 3: return [2 /*return*/];
222
+ }
223
+ });
224
+ };
204
225
  _i = 0, rpcUrls_1 = rpcUrls;
205
226
  _b.label = 1;
206
227
  case 1:
207
- if (!(_i < rpcUrls_1.length)) return [3 /*break*/, 6];
228
+ if (!(_i < rpcUrls_1.length)) return [3 /*break*/, 4];
208
229
  url = rpcUrls_1[_i];
230
+ return [5 /*yield**/, _loop_1(url)];
231
+ case 2:
232
+ state_1 = _b.sent();
233
+ if (typeof state_1 === "object")
234
+ return [2 /*return*/, state_1.value];
235
+ _b.label = 3;
236
+ case 3:
237
+ _i++;
238
+ return [3 /*break*/, 1];
239
+ case 4: throw new Error('All RPC URLs failed; last error: ' + lastError);
240
+ }
241
+ });
242
+ });
243
+ };
244
+ exports.getETHBalanceBatch = getETHBalanceBatch;
245
+ var getERC20BalanceBatch = function (_a) {
246
+ var tokenAddress = _a.tokenAddress, walletAddress = _a.walletAddress, chain = _a.chain;
247
+ return __awaiter(void 0, void 0, void 0, function () {
248
+ var rpcUrls, lastError, _i, rpcUrls_2, url, provider, token, currentBalance, tokenInfo, error_2;
249
+ return __generator(this, function (_b) {
250
+ switch (_b.label) {
251
+ case 0:
252
+ rpcUrls = network_1.ChainRpcUrls[chain];
253
+ if (!rpcUrls || rpcUrls.length === 0) {
254
+ throw new Error('No RPC URLs configured for the chain: ' + chain);
255
+ }
256
+ lastError = null;
257
+ _i = 0, rpcUrls_2 = rpcUrls;
258
+ _b.label = 1;
259
+ case 1:
260
+ if (!(_i < rpcUrls_2.length)) return [3 /*break*/, 6];
261
+ url = rpcUrls_2[_i];
209
262
  _b.label = 2;
210
263
  case 2:
211
264
  _b.trys.push([2, 4, , 5]);
@@ -217,8 +270,8 @@ var getERC20BalanceBatch = function (_a) {
217
270
  tokenInfo = (0, exports.getTokenInfoByAddress)((0, exports.convertToAddress)(tokenAddress));
218
271
  return [2 /*return*/, (0, exports.descale)(tokenInfo.decimals)(currentBalance)];
219
272
  case 4:
220
- error_1 = _b.sent();
221
- lastError = error_1;
273
+ error_2 = _b.sent();
274
+ lastError = error_2;
222
275
  return [3 /*break*/, 5];
223
276
  case 5:
224
277
  _i++;
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"/","sources":["utils/token.ts"],"names":[],"mappings":"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","sourcesContent":["import { ethers, Provider } from 'ethers';\n\nimport { Contract, Signer } from 'ethers';\nimport { TOKEN_INFO } from './token-info';\nimport { exponentialBackoff } from './retry';\nimport {\n Address,\n GetERC20AllowanceParams,\n MoneyInOutChainId,\n ReyaChainId,\n TokenInfo,\n TokenName,\n} from '../types';\nimport { ChainRpcUrls } from './network';\nexport const descale = (tokenDecimals: number) => {\n const f = (value: bigint) => {\n return Number(ethers.formatUnits(value.toString(), tokenDecimals));\n };\n\n return f;\n};\n\nexport const scale = (tokenDecimals: number): ((value: number) => bigint) => {\n return (value: number): bigint => {\n // Convert the number to a string\n const valueStr = value.toString();\n // Split the string into whole and fractional parts\n // eslint-disable-next-line prefer-const\n let [whole, fractional = ''] = valueStr.split('.');\n // Ensure the fractional part is the correct length, padding with zeros if necessary\n fractional = fractional\n .padEnd(tokenDecimals, '0')\n .substring(0, tokenDecimals);\n // Concatenate the whole part with the correctly length-limited fractional part\n const scaledValueStr = whole + fractional;\n // Convert the concatenated string to a BigInt, assuming it represents a value in wei (or equivalent smallest unit)\n // This is safe as we're not losing precision - just scaling the number to its smallest unit representation\n return BigInt(scaledValueStr);\n };\n};\n\nexport const getERC20TokenContract = (\n tokenAddress: string,\n subject: Signer | Provider,\n): Contract => {\n const abi: string[] = [\n `function approve(address, uint256) external returns (bool)`,\n `function balanceOf(address) external view returns (uint256)`,\n `function allowance(address,address) external view returns (uint256)`,\n `function approve(address,uint256) external returns (bool)`,\n ];\n\n const contract = new Contract(tokenAddress, abi, subject);\n\n return contract;\n};\n\nexport const convertToAddress = (str: string): Address => {\n return str.toLowerCase() as Address;\n};\n\nexport const getTokenInfoByAddress = (\n tokenAddressParam: Address | string,\n chainId?: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenAddress =\n typeof tokenAddressParam === 'string'\n ? convertToAddress(tokenAddressParam)\n : tokenAddressParam;\n\n if (chainId) {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.address === tokenAddress,\n );\n if (!tokenInfo) {\n throw new Error(\n `getTokenInfoByAddress: no token info found [chainId ${chainId}, token address ${tokenAddress}]`,\n );\n }\n return tokenInfo;\n } else {\n for (const chainId in TOKEN_INFO) {\n const tokenInfos =\n TOKEN_INFO[chainId as unknown as keyof typeof TOKEN_INFO];\n const tokenInfo = tokenInfos.find(\n (tokenInfo) => tokenInfo.address === tokenAddress,\n );\n if (tokenInfo) {\n return tokenInfo;\n }\n }\n throw new Error(\n `getTokenInfoByAddress: no token info found [token address ${tokenAddress}]`,\n );\n }\n};\n\nexport const getTokenInfoByName = (\n tokenName: TokenName,\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.name === tokenName,\n );\n\n if (!tokenInfo) {\n throw new Error(\n `getTokenInfoByName: no token info found [chain id ${chainId}, token name ${tokenName}]`,\n );\n }\n\n return tokenInfo;\n};\n\nexport const getTokenInfosByChain = (\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo[] => {\n return TOKEN_INFO[chainId];\n};\n\nexport const getRUSDUnderlyingTokenInfo = (\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.isRUSDUnderlying === true,\n );\n\n if (!tokenInfo) {\n throw new Error(\n `getRUSDUnderlyingTokenInfo: no token info found [chain id ${chainId}]`,\n );\n }\n\n return tokenInfo;\n};\n\nexport const getERC20Allowance = async ({\n walletAddress,\n tokenAddress,\n spenderAddress,\n subject,\n}: GetERC20AllowanceParams): Promise<number> => {\n const tokenContract = getERC20TokenContract(tokenAddress, subject);\n const tokenInfo = getTokenInfoByAddress(tokenAddress);\n\n const allowance = await exponentialBackoff(() =>\n tokenContract.allowance(walletAddress, spenderAddress),\n );\n\n return BigInt(allowance) > scale(tokenInfo.decimals)(Number.MAX_SAFE_INTEGER)\n ? Number.MAX_SAFE_INTEGER\n : descale(tokenInfo.decimals)(allowance);\n};\n\nexport type GetERC20BalanceArgs = {\n tokenAddress: string;\n walletAddress: string;\n subject: Signer | Provider;\n};\n\nexport type GetETHBalanceArgs = {\n walletAddress: string;\n subject: Signer | Provider;\n};\n\nexport type GetERC20BalanceBatchArgs = {\n tokenAddress: string;\n walletAddress: string;\n chain: MoneyInOutChainId;\n};\n\nexport type GetBalancesForBridgeArgs = {\n walletAddress: string;\n};\n\nexport const getERC20Balance = async ({\n tokenAddress,\n walletAddress,\n subject,\n}: GetERC20BalanceArgs): Promise<number> => {\n const token = getERC20TokenContract(tokenAddress, subject);\n\n const tokenInfo = getTokenInfoByAddress(convertToAddress(tokenAddress));\n\n const currentBalance = await exponentialBackoff(() =>\n token.balanceOf(walletAddress),\n );\n\n return descale(tokenInfo.decimals)(currentBalance);\n};\n\nexport const getETHBalance = async ({\n walletAddress,\n subject,\n}: GetETHBalanceArgs): Promise<number> => {\n const provider = subject.provider;\n if (!provider) throw new Error(\"User's provider not found\");\n\n const currentBalance = await exponentialBackoff(() =>\n provider.getBalance(ethers.getAddress(walletAddress)),\n );\n\n return descale(18)(currentBalance);\n};\n\nexport const getERC20BalanceBatch = async ({\n tokenAddress,\n walletAddress,\n chain,\n}: GetERC20BalanceBatchArgs): Promise<number> => {\n const rpcUrls = ChainRpcUrls[chain];\n if (!rpcUrls || rpcUrls.length === 0) {\n throw new Error('No RPC URLs configured for the chain: ' + chain);\n }\n\n let lastError = null;\n\n for (const url of rpcUrls) {\n try {\n const provider = new ethers.JsonRpcProvider(url);\n const token = getERC20TokenContract(tokenAddress, provider);\n const currentBalance = await token.balanceOf(walletAddress);\n\n const tokenInfo = getTokenInfoByAddress(convertToAddress(tokenAddress));\n return descale(tokenInfo.decimals)(currentBalance);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error('All RPC URLs failed; last error: ' + lastError);\n};\n"]}
1
+ {"version":3,"file":"token.js","sourceRoot":"/","sources":["utils/token.ts"],"names":[],"mappings":"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","sourcesContent":["import { ethers, Provider } from 'ethers';\n\nimport { Contract, Signer } from 'ethers';\nimport { TOKEN_INFO } from './token-info';\nimport { exponentialBackoff } from './retry';\nimport {\n Address,\n GetERC20AllowanceParams,\n MoneyInOutChainId,\n ReyaChainId,\n TokenInfo,\n TokenName,\n} from '../types';\nimport { ChainRpcUrls } from './network';\nexport const descale = (tokenDecimals: number) => {\n const f = (value: bigint) => {\n return Number(ethers.formatUnits(value.toString(), tokenDecimals));\n };\n\n return f;\n};\n\nexport const scale = (tokenDecimals: number): ((value: number) => bigint) => {\n return (value: number): bigint => {\n // Convert the number to a string\n const valueStr = value.toString();\n // Split the string into whole and fractional parts\n // eslint-disable-next-line prefer-const\n let [whole, fractional = ''] = valueStr.split('.');\n // Ensure the fractional part is the correct length, padding with zeros if necessary\n fractional = fractional\n .padEnd(tokenDecimals, '0')\n .substring(0, tokenDecimals);\n // Concatenate the whole part with the correctly length-limited fractional part\n const scaledValueStr = whole + fractional;\n // Convert the concatenated string to a BigInt, assuming it represents a value in wei (or equivalent smallest unit)\n // This is safe as we're not losing precision - just scaling the number to its smallest unit representation\n return BigInt(scaledValueStr);\n };\n};\n\nexport const getERC20TokenContract = (\n tokenAddress: string,\n subject: Signer | Provider,\n): Contract => {\n const abi: string[] = [\n `function approve(address, uint256) external returns (bool)`,\n `function balanceOf(address) external view returns (uint256)`,\n `function allowance(address,address) external view returns (uint256)`,\n `function approve(address,uint256) external returns (bool)`,\n ];\n\n const contract = new Contract(tokenAddress, abi, subject);\n\n return contract;\n};\n\nexport const convertToAddress = (str: string): Address => {\n return str.toLowerCase() as Address;\n};\n\nexport const getTokenInfoByAddress = (\n tokenAddressParam: Address | string,\n chainId?: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenAddress =\n typeof tokenAddressParam === 'string'\n ? convertToAddress(tokenAddressParam)\n : tokenAddressParam;\n\n if (chainId) {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.address === tokenAddress,\n );\n if (!tokenInfo) {\n throw new Error(\n `getTokenInfoByAddress: no token info found [chainId ${chainId}, token address ${tokenAddress}]`,\n );\n }\n return tokenInfo;\n } else {\n for (const chainId in TOKEN_INFO) {\n const tokenInfos =\n TOKEN_INFO[chainId as unknown as keyof typeof TOKEN_INFO];\n const tokenInfo = tokenInfos.find(\n (tokenInfo) => tokenInfo.address === tokenAddress,\n );\n if (tokenInfo) {\n return tokenInfo;\n }\n }\n throw new Error(\n `getTokenInfoByAddress: no token info found [token address ${tokenAddress}]`,\n );\n }\n};\n\nexport const getTokenInfoByName = (\n tokenName: TokenName,\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.name === tokenName,\n );\n\n if (!tokenInfo) {\n throw new Error(\n `getTokenInfoByName: no token info found [chain id ${chainId}, token name ${tokenName}]`,\n );\n }\n\n return tokenInfo;\n};\n\nexport const getTokenInfosByChain = (\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo[] => {\n return TOKEN_INFO[chainId];\n};\n\nexport const getRUSDUnderlyingTokenInfo = (\n chainId: ReyaChainId | MoneyInOutChainId,\n): TokenInfo => {\n const tokenInfo = TOKEN_INFO[chainId].find(\n (tokenInfo) => tokenInfo.isRUSDUnderlying === true,\n );\n\n if (!tokenInfo) {\n throw new Error(\n `getRUSDUnderlyingTokenInfo: no token info found [chain id ${chainId}]`,\n );\n }\n\n return tokenInfo;\n};\n\nexport const getERC20Allowance = async ({\n walletAddress,\n tokenAddress,\n spenderAddress,\n subject,\n}: GetERC20AllowanceParams): Promise<number> => {\n const tokenContract = getERC20TokenContract(tokenAddress, subject);\n const tokenInfo = getTokenInfoByAddress(tokenAddress);\n\n const allowance = await exponentialBackoff(() =>\n tokenContract.allowance(walletAddress, spenderAddress),\n );\n\n return BigInt(allowance) > scale(tokenInfo.decimals)(Number.MAX_SAFE_INTEGER)\n ? Number.MAX_SAFE_INTEGER\n : descale(tokenInfo.decimals)(allowance);\n};\n\nexport type GetERC20BalanceArgs = {\n tokenAddress: string;\n walletAddress: string;\n subject: Signer | Provider;\n};\n\nexport type GetETHBalanceArgs = {\n walletAddress: string;\n subject: Signer | Provider;\n};\n\nexport type GetETHBalanceBatchArgs = {\n walletAddress: string;\n chain: MoneyInOutChainId;\n};\n\nexport type GetERC20BalanceBatchArgs = {\n tokenAddress: string;\n walletAddress: string;\n chain: MoneyInOutChainId;\n};\n\nexport type GetBalancesForBridgeArgs = {\n walletAddress: string;\n};\n\nexport const getERC20Balance = async ({\n tokenAddress,\n walletAddress,\n subject,\n}: GetERC20BalanceArgs): Promise<number> => {\n const token = getERC20TokenContract(tokenAddress, subject);\n\n const tokenInfo = getTokenInfoByAddress(convertToAddress(tokenAddress));\n\n const currentBalance = await exponentialBackoff(() =>\n token.balanceOf(walletAddress),\n );\n\n return descale(tokenInfo.decimals)(currentBalance);\n};\n\nexport const getETHBalance = async ({\n walletAddress,\n subject,\n}: GetETHBalanceArgs): Promise<number> => {\n const provider = subject.provider;\n if (!provider) throw new Error(\"User's provider not found\");\n\n const currentBalance = await exponentialBackoff(() =>\n provider.getBalance(ethers.getAddress(walletAddress)),\n );\n\n return descale(18)(currentBalance);\n};\n\nexport const getETHBalanceBatch = async ({\n walletAddress,\n chain,\n}: GetETHBalanceBatchArgs): Promise<number> => {\n const rpcUrls = ChainRpcUrls[chain];\n if (!rpcUrls || rpcUrls.length === 0) {\n throw new Error('No RPC URLs configured for the chain: ' + chain);\n }\n\n let lastError = null;\n\n for (const url of rpcUrls) {\n try {\n const provider = new ethers.JsonRpcProvider(url);\n const currentBalance = await exponentialBackoff(() =>\n provider.getBalance(ethers.getAddress(walletAddress)),\n );\n return descale(18)(currentBalance);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error('All RPC URLs failed; last error: ' + lastError);\n};\n\nexport const getERC20BalanceBatch = async ({\n tokenAddress,\n walletAddress,\n chain,\n}: GetERC20BalanceBatchArgs): Promise<number> => {\n const rpcUrls = ChainRpcUrls[chain];\n if (!rpcUrls || rpcUrls.length === 0) {\n throw new Error('No RPC URLs configured for the chain: ' + chain);\n }\n\n let lastError = null;\n\n for (const url of rpcUrls) {\n try {\n const provider = new ethers.JsonRpcProvider(url);\n const token = getERC20TokenContract(tokenAddress, provider);\n const currentBalance = await token.balanceOf(walletAddress);\n\n const tokenInfo = getTokenInfoByAddress(convertToAddress(tokenAddress));\n return descale(tokenInfo.decimals)(currentBalance);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error('All RPC URLs failed; last error: ' + lastError);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reyaxyz/common",
3
- "version": "0.134.0",
3
+ "version": "0.135.1",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -43,5 +43,5 @@
43
43
  "generate:coverage-badges": "npx istanbul-badges-readme --silent"
44
44
  },
45
45
  "packageManager": "pnpm@8.3.1",
46
- "gitHead": "0d9ce05312733515344752d3a59992cc016af07b"
46
+ "gitHead": "a62a3d6caff6693ad0877b4b40eea7107ab2d32f"
47
47
  }
@@ -36,18 +36,6 @@
36
36
  }
37
37
  }
38
38
  },
39
- "WETH": {
40
- "isAppChain": false,
41
- "NonMintableToken": "0x6c7a28F6ae2D245B0130520B112FA3544a06d9AE",
42
- "Vault": "0xA53586c3fB181b244CC4Ee42222300b882396427",
43
- "ExecutionHelper": "0x5D77d53a982caac4FC9BF5e21B9aa4C52731fCaA",
44
- "LimitExecutionHook": "0xBc40F10f50a97af01650c43F174F28806e0Bf083",
45
- "connectors": {
46
- "89346161": {
47
- "FAST": "0xaDF21508f72Cc5b28F70cb22171995f817D5282A"
48
- }
49
- }
50
- },
51
39
  "WBTC": {
52
40
  "isAppChain": false,
53
41
  "NonMintableToken": "0x92c7a51BD507736AC0Dda48b5F35A4AaD0c2Bb4D",
@@ -98,27 +86,39 @@
98
86
  }
99
87
  }
100
88
  },
101
- "WETH": {
89
+ "WBTC": {
90
+ "isAppChain": false,
91
+ "NonMintableToken": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
92
+ "Vault": "0xbA755214612C5A61fba9edec4155Dd3AC707cF4B",
93
+ "ExecutionHelper": "0xD34007319B34652615BA3BCfAefcb0d75b78FD07",
94
+ "LimitExecutionHook": "0xc71d74027264C5B664a9283f6F34D4ceB2544F75",
95
+ "connectors": {
96
+ "89346161": {
97
+ "FAST": "0x4972F3ef9191c1C0D99dE1e4ec6D346aeDE91878"
98
+ }
99
+ }
100
+ },
101
+ "ETH": {
102
102
  "isAppChain": false,
103
103
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
104
- "Vault": "0x4f5164Ea22a4Bf46FCE30C439eE6C6755b3525F6",
105
- "ExecutionHelper": "0x79C06E5BD8e7a4dc151D7591eba71C2a5D49e2B6",
106
- "LimitExecutionHook": "0x4f471ff392733b722992F012e40728e36c5e9848",
104
+ "Vault": "0x717faCaA298fa151c6ffad47B5e9c51c41BC2199",
105
+ "ExecutionHelper": "0xFFB09850fAb52765b5E48eAC1AA3fFAD620C8fcE",
106
+ "LimitExecutionHook": "0x7e54F4c0aCafec318aF1f5d1dCD373CdACc32622",
107
107
  "connectors": {
108
108
  "89346161": {
109
- "FAST": "0x791A471f4a355a7807870Eb633b59C867a79c0B7"
109
+ "FAST": "0xb1800573eD7828359555279711D8A27928940416"
110
110
  }
111
111
  }
112
112
  },
113
- "WBTC": {
113
+ "WETH": {
114
114
  "isAppChain": false,
115
- "NonMintableToken": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
116
- "Vault": "0xbA755214612C5A61fba9edec4155Dd3AC707cF4B",
117
- "ExecutionHelper": "0xD34007319B34652615BA3BCfAefcb0d75b78FD07",
118
- "LimitExecutionHook": "0xc71d74027264C5B664a9283f6F34D4ceB2544F75",
115
+ "NonMintableToken": "0x565810cbfa3Cf1390963E5aFa2fB953795686339",
116
+ "Vault": "0x7178e4ac1e451b48B689F71097f7d7d0A2805e4c",
117
+ "ExecutionHelper": "0x1F0F1FC746fcd4d59b6dBDDFf67a88cde70dAeE5",
118
+ "LimitExecutionHook": "0xD9edcC943ed9729B08E52Bb1e110FE43d1930773",
119
119
  "connectors": {
120
120
  "89346161": {
121
- "FAST": "0x4972F3ef9191c1C0D99dE1e4ec6D346aeDE91878"
121
+ "FAST": "0x613efcCFa27110e2A4d12e0467599a2911Fd96dc"
122
122
  }
123
123
  }
124
124
  }
@@ -160,27 +160,39 @@
160
160
  }
161
161
  }
162
162
  },
163
- "WETH": {
163
+ "WBTC": {
164
+ "isAppChain": false,
165
+ "NonMintableToken": "0x94BEff5da6201cB2C8F489196FD970B3DF5aA32A",
166
+ "Vault": "0x0645095Dc03B9546DFDB2fC8e7a52959ec37efA1",
167
+ "ExecutionHelper": "0xb7A6DBA1D9035Cc7Fe20A2e40e5B2FB2E8F5Ddf9",
168
+ "LimitExecutionHook": "0x0D50d4336df62F86771B2Ef5db67be8c1896Ace1",
169
+ "connectors": {
170
+ "89346161": {
171
+ "FAST": "0xd550Ce2BB4cC954542EfcF23Ea1147143Bd8F77C"
172
+ }
173
+ }
174
+ },
175
+ "ETH": {
164
176
  "isAppChain": false,
165
177
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
166
- "Vault": "0x4FE1aDdCb348BF191164FB10605C8Beec8D42aBd",
167
- "ExecutionHelper": "0x5333982087C2Db4f85d0Ed2CdE22b22ABC0fdae3",
168
- "LimitExecutionHook": "0x450aa5c9a0809e5e704254F79CF3452031c01EDE",
178
+ "Vault": "0x9cC1Cc14976345b5672188484eAC851FBAba7B78",
179
+ "ExecutionHelper": "0xD0C23F8288053725B7cB13E8Bc274E347F5Ac2F1",
180
+ "LimitExecutionHook": "0x9A1409D4A9A89f0dA90Bb03c781b31F8339c2A87",
169
181
  "connectors": {
170
182
  "89346161": {
171
- "FAST": "0xD23678c7D554cb09CA7892d6521d40BFb02a05C8"
183
+ "FAST": "0xDca63a39BDBb2d47eb7DED4e50653296dDb92D34"
172
184
  }
173
185
  }
174
186
  },
175
- "WBTC": {
187
+ "WETH": {
176
188
  "isAppChain": false,
177
- "NonMintableToken": "0x94BEff5da6201cB2C8F489196FD970B3DF5aA32A",
178
- "Vault": "0x0645095Dc03B9546DFDB2fC8e7a52959ec37efA1",
179
- "ExecutionHelper": "0xb7A6DBA1D9035Cc7Fe20A2e40e5B2FB2E8F5Ddf9",
180
- "LimitExecutionHook": "0x0D50d4336df62F86771B2Ef5db67be8c1896Ace1",
189
+ "NonMintableToken": "0xE67ABDA0D43f7AC8f37876bBF00D1DFadbB93aaa",
190
+ "Vault": "0x5035d9B44C29b503ebCC1E7d6223Ae78A37032d6",
191
+ "ExecutionHelper": "0xd9a317288843d8Ae4c80Bc78Eb9Af4Ee21AeeDF3",
192
+ "LimitExecutionHook": "0x10567782c459BC8Bf90B89f7Da189c754203BFEc",
181
193
  "connectors": {
182
194
  "89346161": {
183
- "FAST": "0xd550Ce2BB4cC954542EfcF23Ea1147143Bd8F77C"
195
+ "FAST": "0xF68EAa807c14b74E3feD68ED91A6Ac7063F8570B"
184
196
  }
185
197
  }
186
198
  }
@@ -222,27 +234,39 @@
222
234
  }
223
235
  }
224
236
  },
225
- "WETH": {
237
+ "WBTC": {
238
+ "isAppChain": false,
239
+ "NonMintableToken": "0xfC5CC93d85861ac82d89fc2D3e56315540E9C8A7",
240
+ "Vault": "0x65ce0D9c5bbF43ee7A6011B3D077DD2FeA6b2726",
241
+ "ExecutionHelper": "0x78C39bA2c327821F6080A79146baf2Ae704a6384",
242
+ "LimitExecutionHook": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
243
+ "connectors": {
244
+ "89346161": {
245
+ "FAST": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a"
246
+ }
247
+ }
248
+ },
249
+ "ETH": {
226
250
  "isAppChain": false,
227
251
  "NonMintableToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
228
- "Vault": "0x2dc464B4f5Fd55ea19f0bdF71A8dc3584eeb64d7",
229
- "ExecutionHelper": "0x322A8EA44716586b6BB31456055e61B28da4f1C1",
230
- "LimitExecutionHook": "0xEB7F89394B325a021259939DA5Ba5EE83984b7F5",
252
+ "Vault": "0x6c929A83B660cF12EEf6DE937b4cC49f7cc8d801",
253
+ "ExecutionHelper": "0xb0C67c39BF32bEDF8AF43F5E972EF580239Dd99f",
254
+ "LimitExecutionHook": "0x4EB0ECF4f9b6145fFFa1AEf938bFCb71CFfBe15c",
231
255
  "connectors": {
232
256
  "89346161": {
233
- "FAST": "0x13058f01BB8E2A93a600875aBE8647b30BE72765"
257
+ "FAST": "0x2DD3d706cCA9c0b7970e8D0478e5b0BA6d2FD51F"
234
258
  }
235
259
  }
236
260
  },
237
- "WBTC": {
261
+ "WETH": {
238
262
  "isAppChain": false,
239
- "NonMintableToken": "0xfC5CC93d85861ac82d89fc2D3e56315540E9C8A7",
240
- "Vault": "0x65ce0D9c5bbF43ee7A6011B3D077DD2FeA6b2726",
241
- "ExecutionHelper": "0x78C39bA2c327821F6080A79146baf2Ae704a6384",
242
- "LimitExecutionHook": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
263
+ "NonMintableToken": "0x2b42AFFD4b7C14d9B7C2579229495c052672Ccd3",
264
+ "Vault": "0xb871c1B0f46eB248746e7c69f0438Fa0B44874a5",
265
+ "ExecutionHelper": "0x520172BB0Fe58a31f661f4710DF423f430841438",
266
+ "LimitExecutionHook": "0xa4437603F27f49b9e2cEC7FD03A35e3804c9747b",
243
267
  "connectors": {
244
268
  "89346161": {
245
- "FAST": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a"
269
+ "FAST": "0xc8E11C9C1D8c1512b4a5bb058aaC92b8B397d4Bf"
246
270
  }
247
271
  }
248
272
  }
@@ -311,24 +335,39 @@
311
335
  }
312
336
  }
313
337
  },
314
- "WETH": {
338
+ "ETH": {
315
339
  "isAppChain": true,
316
340
  "MintableToken": "0xC123B7aEb9D2B2e8a035217d5C29e317c91842E2",
317
- "Controller": "0x9a573B27D7298c6E2f4d2D4a41c37A0C8AF6accA",
318
- "ExecutionHelper": "0x1019958C2BD43B882a4e1349337a32Ef9563FC4D",
319
- "LimitExecutionHook": "0x9838Fc33ea56F7664c677b1F2917c60d75a73BC6",
341
+ "Controller": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
342
+ "ExecutionHelper": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a",
343
+ "LimitExecutionHook": "0x32e6D1B1BEc1be1B93E3647c1e75228E95Da4d32",
320
344
  "connectors": {
321
- "80001": {
322
- "FAST": "0x1485BdF9fd30e32cAb4E608158D9604f4d8110f3"
345
+ "421614": {
346
+ "FAST": "0xb23DD533817e924bb4D87822E139C18008AB9220"
323
347
  },
348
+ "11155111": {
349
+ "FAST": "0xAa4edaBDB765687AE602e9EDE825a7F3ab39a1Ea"
350
+ },
351
+ "11155420": {
352
+ "FAST": "0xf25c9355aEc6d57e8A07a307e594cbD944E1dc7c"
353
+ }
354
+ }
355
+ },
356
+ "WETH": {
357
+ "isAppChain": true,
358
+ "MintableToken": "0xC123B7aEb9D2B2e8a035217d5C29e317c91842E2",
359
+ "Controller": "0x454Df13999c233193EEe9206aFb11E8c5321E340",
360
+ "ExecutionHelper": "0xa4E98b9724473A7371A437f7Ec076bC692219b7a",
361
+ "LimitExecutionHook": "0x32e6D1B1BEc1be1B93E3647c1e75228E95Da4d32",
362
+ "connectors": {
324
363
  "421614": {
325
- "FAST": "0x36580Ab5CC5db1E220e20156ad333Ef2229d1F2e"
364
+ "FAST": "0x2aF7a52C1fe0Ef66af0a65d32c6ab4112Db393ED"
326
365
  },
327
366
  "11155111": {
328
- "FAST": "0xeCFad5D71026979aF7B04E8C1D64D3fBda7aCC9e"
367
+ "FAST": "0x321C2Bd69819a43C340b55db40F7c8Eb3334cDe0"
329
368
  },
330
369
  "11155420": {
331
- "FAST": "0xF64010ACE8f7333dF61F6D0ae3d08C5d4704D69A"
370
+ "FAST": "0xdeCa2aff30DCBE7671d0EE8d611DC0e407279013"
332
371
  }
333
372
  }
334
373
  },
@@ -163,6 +163,11 @@ export type GetETHBalanceArgs = {
163
163
  subject: Signer | Provider;
164
164
  };
165
165
 
166
+ export type GetETHBalanceBatchArgs = {
167
+ walletAddress: string;
168
+ chain: MoneyInOutChainId;
169
+ };
170
+
166
171
  export type GetERC20BalanceBatchArgs = {
167
172
  tokenAddress: string;
168
173
  walletAddress: string;
@@ -203,6 +208,32 @@ export const getETHBalance = async ({
203
208
  return descale(18)(currentBalance);
204
209
  };
205
210
 
211
+ export const getETHBalanceBatch = async ({
212
+ walletAddress,
213
+ chain,
214
+ }: GetETHBalanceBatchArgs): Promise<number> => {
215
+ const rpcUrls = ChainRpcUrls[chain];
216
+ if (!rpcUrls || rpcUrls.length === 0) {
217
+ throw new Error('No RPC URLs configured for the chain: ' + chain);
218
+ }
219
+
220
+ let lastError = null;
221
+
222
+ for (const url of rpcUrls) {
223
+ try {
224
+ const provider = new ethers.JsonRpcProvider(url);
225
+ const currentBalance = await exponentialBackoff(() =>
226
+ provider.getBalance(ethers.getAddress(walletAddress)),
227
+ );
228
+ return descale(18)(currentBalance);
229
+ } catch (error) {
230
+ lastError = error;
231
+ }
232
+ }
233
+
234
+ throw new Error('All RPC URLs failed; last error: ' + lastError);
235
+ };
236
+
206
237
  export const getERC20BalanceBatch = async ({
207
238
  tokenAddress,
208
239
  walletAddress,