@gearbox-protocol/sdk 13.7.0-kyc.3 → 14.0.0-next.10

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.
Files changed (214) hide show
  1. package/dist/cjs/dev/AccountOpener.js +5 -45
  2. package/dist/cjs/dev/RevolverTransport.js +10 -4
  3. package/dist/cjs/dev/index.js +0 -2
  4. package/dist/cjs/dev/logSplitterTransport.js +10 -1
  5. package/dist/cjs/permissionless/utils/create2.js +2 -2
  6. package/dist/cjs/permissionless/utils/price-update/get-price-feeds.js +11 -5
  7. package/dist/cjs/permissionless/utils/price-update/get-price-update-tx.js +11 -5
  8. package/dist/cjs/permissionless/utils/price-update/get-prices.js +12 -6
  9. package/dist/cjs/sdk/MultichainSDK.js +232 -0
  10. package/dist/cjs/sdk/OnchainSDK.js +478 -0
  11. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +16 -324
  12. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +1 -7
  13. package/dist/cjs/sdk/base/TokensMeta.js +42 -22
  14. package/dist/cjs/sdk/base/token-types.js +0 -9
  15. package/dist/cjs/sdk/chain/chains.js +1 -2
  16. package/dist/cjs/sdk/constants/address-provider.js +0 -3
  17. package/dist/cjs/sdk/core/errors.js +77 -0
  18. package/dist/cjs/sdk/core/index.js +2 -0
  19. package/dist/cjs/sdk/index.js +4 -2
  20. package/dist/cjs/sdk/market/MarketRegister.js +116 -70
  21. package/dist/cjs/sdk/market/MarketSuite.js +0 -3
  22. package/dist/cjs/sdk/market/index.js +0 -2
  23. package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
  24. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -11
  25. package/dist/cjs/sdk/market/pool/index.js +0 -2
  26. package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +10 -3
  27. package/dist/cjs/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.js +20 -23
  28. package/dist/cjs/sdk/market/pricefeeds/updates/PythUpdater.js +7 -4
  29. package/dist/cjs/sdk/market/pricefeeds/updates/RedstoneUpdater.js +4 -4
  30. package/dist/cjs/sdk/market/pricefeeds/updates/fetchPythPayloads.js +1 -1
  31. package/dist/cjs/sdk/market/pricefeeds/updates/index.js +3 -0
  32. package/dist/cjs/sdk/options.js +24 -52
  33. package/dist/cjs/sdk/plugins/BasePlugin.js +11 -4
  34. package/dist/cjs/sdk/pools/PoolService.js +12 -104
  35. package/dist/cjs/sdk/utils/formatter.js +99 -20
  36. package/dist/cjs/sdk/utils/viem/index.js +3 -3
  37. package/dist/cjs/sdk/utils/viem/watchBlocksAsync.js +76 -0
  38. package/dist/esm/dev/AccountOpener.js +6 -47
  39. package/dist/esm/dev/RevolverTransport.js +10 -4
  40. package/dist/esm/dev/index.js +0 -1
  41. package/dist/esm/dev/logSplitterTransport.js +10 -1
  42. package/dist/esm/permissionless/utils/create2.js +1 -1
  43. package/dist/esm/permissionless/utils/price-update/get-price-feeds.js +12 -6
  44. package/dist/esm/permissionless/utils/price-update/get-price-update-tx.js +13 -7
  45. package/dist/esm/permissionless/utils/price-update/get-prices.js +13 -7
  46. package/dist/esm/sdk/MultichainSDK.js +217 -0
  47. package/dist/esm/sdk/OnchainSDK.js +472 -0
  48. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +17 -328
  49. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +1 -7
  50. package/dist/esm/sdk/base/TokensMeta.js +44 -22
  51. package/dist/esm/sdk/base/token-types.js +0 -6
  52. package/dist/esm/sdk/chain/chains.js +1 -2
  53. package/dist/esm/sdk/constants/address-provider.js +0 -2
  54. package/dist/esm/sdk/core/errors.js +48 -0
  55. package/dist/esm/sdk/core/index.js +1 -0
  56. package/dist/esm/sdk/index.js +2 -1
  57. package/dist/esm/sdk/market/MarketRegister.js +118 -74
  58. package/dist/esm/sdk/market/MarketSuite.js +0 -3
  59. package/dist/esm/sdk/market/index.js +0 -1
  60. package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
  61. package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -11
  62. package/dist/esm/sdk/market/pool/index.js +0 -1
  63. package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +10 -3
  64. package/dist/esm/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.js +20 -13
  65. package/dist/esm/sdk/market/pricefeeds/updates/PythUpdater.js +7 -4
  66. package/dist/esm/sdk/market/pricefeeds/updates/RedstoneUpdater.js +4 -4
  67. package/dist/esm/sdk/market/pricefeeds/updates/fetchPythPayloads.js +1 -1
  68. package/dist/esm/sdk/market/pricefeeds/updates/index.js +2 -0
  69. package/dist/esm/sdk/options.js +22 -51
  70. package/dist/esm/sdk/plugins/BasePlugin.js +11 -4
  71. package/dist/esm/sdk/pools/PoolService.js +13 -109
  72. package/dist/esm/sdk/utils/formatter.js +99 -10
  73. package/dist/esm/sdk/utils/viem/index.js +1 -1
  74. package/dist/esm/sdk/utils/viem/watchBlocksAsync.js +52 -0
  75. package/dist/types/dev/RevolverTransport.d.ts +2 -1
  76. package/dist/types/dev/calcLiquidatableLTs.d.ts +2 -2
  77. package/dist/types/dev/claimFromFaucet.d.ts +2 -2
  78. package/dist/types/dev/create2.d.ts +3 -4
  79. package/dist/types/dev/index.d.ts +0 -1
  80. package/dist/types/dev/logSplitterTransport.d.ts +3 -1
  81. package/dist/types/dev/migrateFaucet.d.ts +2 -2
  82. package/dist/types/dev/mint/AbstractMinter.d.ts +2 -2
  83. package/dist/types/dev/mint/FallbackMinter.d.ts +2 -2
  84. package/dist/types/dev/mint/factory.d.ts +2 -2
  85. package/dist/types/dev/replaceStorage.d.ts +1 -1
  86. package/dist/types/permissionless/utils/price-update/get-updatable-feeds.d.ts +2 -2
  87. package/dist/types/plugins/accounts/AccountsPlugin.d.ts +2 -2
  88. package/dist/types/plugins/accounts-counter/AccountsCounterPlugin.d.ts +2 -2
  89. package/dist/types/plugins/adapters/AdaptersPlugin.d.ts +2 -2
  90. package/dist/types/plugins/apy/ApyPlugin.d.ts +2 -2
  91. package/dist/types/plugins/bots/BotsPlugin.d.ts +2 -2
  92. package/dist/types/plugins/bots/PartialLiquidationBotV310Contract.d.ts +2 -2
  93. package/dist/types/plugins/degen-distributors/DegenDistributorsPlugin.d.ts +2 -2
  94. package/dist/types/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.d.ts +2 -2
  95. package/dist/types/sdk/MultichainSDK.d.ts +144 -0
  96. package/dist/types/sdk/OnchainSDK.d.ts +257 -0
  97. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +4 -54
  98. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
  99. package/dist/types/sdk/accounts/createCreditAccountService.d.ts +2 -2
  100. package/dist/types/sdk/accounts/types.d.ts +15 -95
  101. package/dist/types/sdk/base/SDKConstruct.d.ts +4 -4
  102. package/dist/types/sdk/base/TokensMeta.d.ts +3 -14
  103. package/dist/types/sdk/base/token-types.d.ts +4 -44
  104. package/dist/types/sdk/base/types.d.ts +2 -116
  105. package/dist/types/sdk/chain/chains.d.ts +1 -5
  106. package/dist/types/sdk/constants/address-provider.d.ts +0 -1
  107. package/dist/types/sdk/core/createAddressProvider.d.ts +3 -3
  108. package/dist/types/sdk/core/errors.d.ts +51 -0
  109. package/dist/types/sdk/core/index.d.ts +1 -0
  110. package/dist/types/sdk/index.d.ts +2 -1
  111. package/dist/types/sdk/market/MarketRegister.d.ts +11 -8
  112. package/dist/types/sdk/market/MarketSuite.d.ts +2 -4
  113. package/dist/types/sdk/market/adapters/createAdapter.d.ts +2 -2
  114. package/dist/types/sdk/market/credit/CreditConfiguratorV310Contract.d.ts +3 -3
  115. package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +2 -2
  116. package/dist/types/sdk/market/credit/CreditSuite.d.ts +2 -2
  117. package/dist/types/sdk/market/credit/createCreditConfigurator.d.ts +2 -2
  118. package/dist/types/sdk/market/credit/createCreditFacade.d.ts +2 -2
  119. package/dist/types/sdk/market/credit/createCreditManager.d.ts +2 -2
  120. package/dist/types/sdk/market/credit/types.d.ts +1 -1
  121. package/dist/types/sdk/market/index.d.ts +0 -1
  122. package/dist/types/sdk/market/loss-policy/AliasLossPolicyV310Contract.d.ts +3 -3
  123. package/dist/types/sdk/market/loss-policy/createLossPolicy.d.ts +2 -2
  124. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +5 -6
  125. package/dist/types/sdk/market/oracle/PriceOracleV310Contract.d.ts +2 -2
  126. package/dist/types/sdk/market/oracle/createPriceOracle.d.ts +2 -2
  127. package/dist/types/sdk/market/oracle/types.d.ts +10 -3
  128. package/dist/types/sdk/market/pool/PoolSuite.d.ts +2 -4
  129. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
  130. package/dist/types/sdk/market/pool/createInterestRateModel.d.ts +2 -2
  131. package/dist/types/sdk/market/pool/createPool.d.ts +2 -2
  132. package/dist/types/sdk/market/pool/createPoolQuotaKeeper.d.ts +2 -2
  133. package/dist/types/sdk/market/pool/createRateKeeper.d.ts +2 -2
  134. package/dist/types/sdk/market/pool/index.d.ts +0 -1
  135. package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +8 -3
  136. package/dist/types/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.d.ts +12 -13
  137. package/dist/types/sdk/market/pricefeeds/updates/PythUpdater.d.ts +8 -3
  138. package/dist/types/sdk/market/pricefeeds/updates/RedstoneUpdater.d.ts +8 -3
  139. package/dist/types/sdk/market/pricefeeds/updates/index.d.ts +1 -0
  140. package/dist/types/sdk/market/pricefeeds/updates/types.d.ts +4 -0
  141. package/dist/types/sdk/market/types.d.ts +1 -1
  142. package/dist/types/sdk/options.d.ts +15 -16
  143. package/dist/types/sdk/plugins/BasePlugin.d.ts +12 -6
  144. package/dist/types/sdk/plugins/errors.d.ts +2 -2
  145. package/dist/types/sdk/plugins/types.d.ts +16 -6
  146. package/dist/types/sdk/pools/PoolService.d.ts +8 -8
  147. package/dist/types/sdk/pools/types.d.ts +2 -3
  148. package/dist/types/sdk/router/AbstractRouterContract.d.ts +3 -3
  149. package/dist/types/sdk/router/RouterV310Contract.d.ts +2 -2
  150. package/dist/types/sdk/router/createRouter.d.ts +2 -2
  151. package/dist/types/sdk/router/helpers.d.ts +1 -1
  152. package/dist/types/sdk/types/state-human.d.ts +10 -2
  153. package/dist/types/sdk/types/state.d.ts +14 -8
  154. package/dist/types/sdk/utils/filterDust.d.ts +2 -2
  155. package/dist/types/sdk/utils/formatter.d.ts +1 -1
  156. package/dist/types/sdk/utils/isDust.d.ts +2 -2
  157. package/dist/types/sdk/utils/toAddress.d.ts +1 -1
  158. package/dist/types/sdk/utils/viem/getLogsPaginated.d.ts +1 -2
  159. package/dist/types/sdk/utils/viem/getLogsSafe.d.ts +1 -1
  160. package/dist/types/sdk/utils/viem/index.d.ts +1 -1
  161. package/dist/types/sdk/utils/viem/simulateWithPriceUpdates.d.ts +1 -2
  162. package/dist/types/sdk/utils/viem/watchBlocksAsync.d.ts +74 -0
  163. package/package.json +3 -6
  164. package/dist/cjs/abi/kyc/iDSRegistryService.js +0 -70
  165. package/dist/cjs/abi/kyc/iDSToken.js +0 -71
  166. package/dist/cjs/abi/kyc/iKYCCompressor.js +0 -196
  167. package/dist/cjs/abi/kyc/iKYCFactory.js +0 -122
  168. package/dist/cjs/abi/kyc/iKYCUnderlying.js +0 -401
  169. package/dist/cjs/abi/kyc/iSecuritizeDegenNFT.js +0 -326
  170. package/dist/cjs/abi/kyc/iSecuritizeKYCFactory.js +0 -319
  171. package/dist/cjs/dev/CachedStateSubscriber.js +0 -78
  172. package/dist/cjs/sdk/GearboxSDK.js +0 -696
  173. package/dist/cjs/sdk/market/kyc/KYCRegistry.js +0 -269
  174. package/dist/cjs/sdk/market/kyc/index.js +0 -26
  175. package/dist/cjs/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +0 -244
  176. package/dist/cjs/sdk/market/kyc/securitize/constants.js +0 -28
  177. package/dist/cjs/sdk/market/kyc/securitize/index.js +0 -26
  178. package/dist/cjs/sdk/market/kyc/securitize/types.js +0 -16
  179. package/dist/cjs/sdk/market/kyc/types.js +0 -34
  180. package/dist/cjs/sdk/utils/viem/executeDelegatedMulticalls.js +0 -38
  181. package/dist/esm/abi/kyc/iDSRegistryService.js +0 -46
  182. package/dist/esm/abi/kyc/iDSToken.js +0 -47
  183. package/dist/esm/abi/kyc/iKYCCompressor.js +0 -172
  184. package/dist/esm/abi/kyc/iKYCFactory.js +0 -98
  185. package/dist/esm/abi/kyc/iKYCUnderlying.js +0 -377
  186. package/dist/esm/abi/kyc/iSecuritizeDegenNFT.js +0 -302
  187. package/dist/esm/abi/kyc/iSecuritizeKYCFactory.js +0 -295
  188. package/dist/esm/dev/CachedStateSubscriber.js +0 -54
  189. package/dist/esm/sdk/GearboxSDK.js +0 -689
  190. package/dist/esm/sdk/market/kyc/KYCRegistry.js +0 -253
  191. package/dist/esm/sdk/market/kyc/index.js +0 -3
  192. package/dist/esm/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +0 -220
  193. package/dist/esm/sdk/market/kyc/securitize/constants.js +0 -4
  194. package/dist/esm/sdk/market/kyc/securitize/index.js +0 -3
  195. package/dist/esm/sdk/market/kyc/securitize/types.js +0 -0
  196. package/dist/esm/sdk/market/kyc/types.js +0 -9
  197. package/dist/esm/sdk/utils/viem/executeDelegatedMulticalls.js +0 -14
  198. package/dist/types/abi/kyc/iDSRegistryService.d.ts +0 -71
  199. package/dist/types/abi/kyc/iDSToken.d.ts +0 -67
  200. package/dist/types/abi/kyc/iKYCCompressor.d.ts +0 -228
  201. package/dist/types/abi/kyc/iKYCFactory.d.ts +0 -139
  202. package/dist/types/abi/kyc/iKYCUnderlying.d.ts +0 -548
  203. package/dist/types/abi/kyc/iSecuritizeDegenNFT.d.ts +0 -404
  204. package/dist/types/abi/kyc/iSecuritizeKYCFactory.d.ts +0 -376
  205. package/dist/types/dev/CachedStateSubscriber.d.ts +0 -21
  206. package/dist/types/sdk/GearboxSDK.d.ts +0 -324
  207. package/dist/types/sdk/market/kyc/KYCRegistry.d.ts +0 -52
  208. package/dist/types/sdk/market/kyc/index.d.ts +0 -3
  209. package/dist/types/sdk/market/kyc/securitize/SecuritizeKYCFactory.d.ts +0 -428
  210. package/dist/types/sdk/market/kyc/securitize/constants.d.ts +0 -1
  211. package/dist/types/sdk/market/kyc/securitize/index.d.ts +0 -3
  212. package/dist/types/sdk/market/kyc/securitize/types.d.ts +0 -127
  213. package/dist/types/sdk/market/kyc/types.d.ts +0 -170
  214. package/dist/types/sdk/utils/viem/executeDelegatedMulticalls.d.ts +0 -28
@@ -52,7 +52,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
52
52
  #minDebtMultiplier;
53
53
  #allowMint;
54
54
  #leverageDelta;
55
- #poolService;
56
55
  constructor(service, options_ = {}) {
57
56
  super(service.sdk);
58
57
  const {
@@ -78,7 +77,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
78
77
  this.#poolDepositMultiplier = BigInt(poolDepositMultiplier);
79
78
  this.#minDebtMultiplier = BigInt(minDebtMultiplier);
80
79
  this.#leverageDelta = BigInt(leverageDelta);
81
- this.#poolService = new import_sdk.PoolService(service.sdk);
82
80
  this.#logger?.info(
83
81
  {
84
82
  borrower: (0, import_accounts.privateKeyToAccount)(this.borrowerKey).address,
@@ -116,10 +114,6 @@ class AccountOpener extends import_sdk.SDKConstruct {
116
114
  },
117
115
  "opening credit accounts"
118
116
  );
119
- await Promise.all([
120
- this.sdk.tokensMeta.loadTokenData(),
121
- this.sdk.marketRegister.loadZappers()
122
- ]);
123
117
  let deposits = [];
124
118
  if (depositIntoPools) {
125
119
  try {
@@ -471,34 +465,9 @@ class AccountOpener extends import_sdk.SDKConstruct {
471
465
  this.#logger?.debug(
472
466
  `depositor balance in underlying: ${this.sdk.tokensMeta.formatBN(pool.underlying, allowance, { symbol: true })}`
473
467
  );
474
- const tokensOut = this.#poolService.getDepositTokensOut(
475
- address,
476
- underlying
477
- );
478
- this.#logger?.debug(
479
- { tokensOut: tokensOut.map((t) => this.labelAddress(t)) },
480
- "deposit tokens out"
481
- );
482
- if (tokensOut.length === 0) {
483
- throw new Error(`no tokens out found for pool ${poolName}`);
484
- }
485
- const tokenOut = tokensOut[0];
486
- const metadata = this.#poolService.getDepositMetadata(
487
- address,
488
- underlying,
489
- tokenOut
490
- );
491
- this.logger?.debug(
492
- {
493
- underlying: this.labelAddress(underlying),
494
- tokenOut: this.labelAddress(tokenOut),
495
- ...metadata
496
- },
497
- "pool deposit metadata"
498
- );
499
468
  txHash = await this.#anvil.writeContract({
500
469
  account: depositor,
501
- address: metadata.approveTarget,
470
+ address: underlying,
502
471
  abi: import_iERC20.ierc20Abi,
503
472
  functionName: "approve",
504
473
  args: [address, allowance],
@@ -515,21 +484,12 @@ class AccountOpener extends import_sdk.SDKConstruct {
515
484
  this.#logger?.debug(
516
485
  `depositor approved underlying for pool ${poolName}: ${txHash}`
517
486
  );
518
- const depositCall = this.#poolService.addLiquidity({
519
- collateral: { token: underlying, balance: amount },
520
- pool: address,
521
- wallet: depositor.address,
522
- meta: metadata
523
- });
524
- if (!depositCall) {
525
- throw new Error(`no deposit call could be created for ${poolName}`);
526
- }
527
487
  txHash = await this.#anvil.writeContract({
528
488
  account: depositor,
529
- address: depositCall.target,
530
- abi: depositCall.abi,
531
- functionName: depositCall.functionName,
532
- args: depositCall.args,
489
+ address,
490
+ abi: import_generated.iPoolV310Abi,
491
+ functionName: "deposit",
492
+ args: [amount, depositor.address],
533
493
  chain: this.#anvil.chain
534
494
  });
535
495
  receipt = await this.#anvil.waitForTransactionReceipt({ hash: txHash });
@@ -87,8 +87,14 @@ const revolverTransportConfigSchema = import_v4.z.union([
87
87
  })
88
88
  ]);
89
89
  class NoAvailableTransportsError extends import_viem.BaseError {
90
- constructor(cause) {
91
- super("no available transports", { cause });
90
+ statuses;
91
+ constructor(statuses, cause) {
92
+ super("No available transports", {
93
+ cause,
94
+ metaMessages: statuses.length > 0 ? statuses.map((s) => `- ${s.id}: ${s.status}`) : ["No transports configured"],
95
+ name: "NoAvailableTransportsError"
96
+ });
97
+ this.statuses = statuses;
92
98
  }
93
99
  }
94
100
  class RevolverTransport {
@@ -146,7 +152,7 @@ class RevolverTransport {
146
152
  );
147
153
  }
148
154
  if (transports.length === 0) {
149
- throw new NoAvailableTransportsError();
155
+ throw new NoAvailableTransportsError([]);
150
156
  }
151
157
  this.#isSingle = transports.length === 1;
152
158
  const selectionStrategy = config.selectionStrategy ?? "simple";
@@ -197,7 +203,7 @@ class RevolverTransport {
197
203
  }
198
204
  } while (this.#selector.canRotate());
199
205
  this.#requests.delete(r);
200
- throw new NoAvailableTransportsError(error);
206
+ throw new NoAvailableTransportsError(this.#selector.statuses(), error);
201
207
  };
202
208
  get config() {
203
209
  return {
@@ -24,7 +24,6 @@ __export(dev_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(dev_exports);
26
26
  __reExport(dev_exports, require("./AccountOpener.js"), module.exports);
27
- __reExport(dev_exports, require("./CachedStateSubscriber.js"), module.exports);
28
27
  __reExport(dev_exports, require("./calcLiquidatableLTs.js"), module.exports);
29
28
  __reExport(dev_exports, require("./claimFromFaucet.js"), module.exports);
30
29
  __reExport(dev_exports, require("./create2.js"), module.exports);
@@ -49,7 +48,6 @@ __reExport(dev_exports, require("./types.js"), module.exports);
49
48
  isRangeError,
50
49
  logSplitterTransport,
51
50
  ...require("./AccountOpener.js"),
52
- ...require("./CachedStateSubscriber.js"),
53
51
  ...require("./calcLiquidatableLTs.js"),
54
52
  ...require("./claimFromFaucet.js"),
55
53
  ...require("./create2.js"),
@@ -43,7 +43,9 @@ const RANGE_ERROR_PATTERNS = [
43
43
  /eth_getLogs is limited to/i,
44
44
  /eth_getLogs requests with up to/i,
45
45
  /range is too large/i,
46
- /exceeded max allowed range/i
46
+ /exceeded max allowed range/i,
47
+ // Encountered on DRPC: "query exceeds max results 20000, retry with the range …"
48
+ /exceeds max results/i
47
49
  ];
48
50
  function isRangeError(error) {
49
51
  const msg = errorMessage(error);
@@ -51,10 +53,17 @@ function isRangeError(error) {
51
53
  }
52
54
  const GENERIC_BLOCKS_RE = /(\d+)\s*block/i;
53
55
  const ALCHEMY_RANGE_RE = /this block range should work: \[(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)\]/;
56
+ const DRPC_RANGE_RE = /retry with the range (\d+)-(\d+)/;
54
57
  function parsePageSizeHint(error) {
55
58
  const alchemy = tryAlchemyHint(error);
56
59
  if (alchemy != null) return alchemy;
57
60
  const msg = errorMessage(error);
61
+ const drpc = msg.match(DRPC_RANGE_RE);
62
+ if (drpc) {
63
+ const from = Number(drpc[1]);
64
+ const to = Number(drpc[2]);
65
+ return to - from + 1;
66
+ }
58
67
  const m = msg.match(GENERIC_BLOCKS_RE);
59
68
  return m ? Number(m[1]) : null;
60
69
  }
@@ -28,8 +28,8 @@ __export(create2_exports, {
28
28
  handleSalt: () => handleSalt
29
29
  });
30
30
  module.exports = __toCommonJS(create2_exports);
31
- var import_abitype = require("abitype");
32
31
  var import_viem = require("viem");
32
+ var import_utils = require("viem/utils");
33
33
  const PUBLIC_CREATE2_FACTORY = "0x4e59b44847b379578588920ca78fbf26c0b4956c";
34
34
  function handleSalt(salt) {
35
35
  if (salt.slice(0, 2) !== "0x" || salt.length !== 66) {
@@ -63,7 +63,7 @@ function createCreate2DeployRawTx(bytecode, salt) {
63
63
  type: "fallback"
64
64
  }
65
65
  ];
66
- const signature = (0, import_abitype.formatAbiItem)(deterministicDeployerAbi[0]);
66
+ const signature = (0, import_utils.formatAbiItem)(deterministicDeployerAbi[0]);
67
67
  const contractMethod = {
68
68
  name: "fallback",
69
69
  inputs: [],
@@ -69,11 +69,17 @@ async function getCallsTouchedUpdatablePriceFeeds({
69
69
  import_sdk.AP_PRICE_FEED_COMPRESSOR,
70
70
  310n
71
71
  );
72
- const sdk = await import_sdk.GearboxSDK.attach({
73
- client,
74
- marketConfigurators: [],
75
- gasLimit
76
- });
72
+ const gearboxClient = client;
73
+ const chain = gearboxClient.chain;
74
+ if (!chain) {
75
+ throw new Error("Chain not defined on client");
76
+ }
77
+ const sdk = new import_sdk.OnchainSDK(
78
+ chain.network,
79
+ { client: gearboxClient },
80
+ { gasLimit }
81
+ );
82
+ await sdk.attach({ marketConfigurators: [] });
77
83
  const touchedFeeds = parsedCalls.flatMap(
78
84
  (call) => getCallTouchedPriceFeeds(call)
79
85
  );
@@ -35,11 +35,17 @@ async function getPriceUpdateTx({
35
35
  import_addresses.Addresses.PRICE_FEED_STORE,
36
36
  client
37
37
  );
38
- const sdk = await import_sdk.GearboxSDK.attach({
39
- client,
40
- marketConfigurators: [],
41
- gasLimit
42
- });
38
+ const gearboxClient = client;
39
+ const chain = gearboxClient.chain;
40
+ if (!chain) {
41
+ throw new Error("Chain not defined on client");
42
+ }
43
+ const sdk = new import_sdk.OnchainSDK(
44
+ chain.network,
45
+ { client: gearboxClient },
46
+ { gasLimit }
47
+ );
48
+ await sdk.attach({ marketConfigurators: [] });
43
49
  const updateTxs = await sdk.priceFeeds.generateExternalPriceFeedsUpdateTxs(priceFeeds);
44
50
  if (useMulticall3) {
45
51
  const multicallCalls = updateTxs.txs.map((tx) => ({
@@ -101,12 +101,18 @@ async function getPrices({
101
101
  if (!client.chain) {
102
102
  throw new Error("Chain not defined");
103
103
  }
104
- const sdk = await import_sdk.GearboxSDK.attach({
105
- client,
106
- gasLimit,
107
- marketConfigurators: [],
108
- redstone: {},
109
- pyth: {}
104
+ const gearboxClient = client;
105
+ const chain = gearboxClient.chain;
106
+ if (!chain) {
107
+ throw new Error("Chain not defined on client");
108
+ }
109
+ const sdk = new import_sdk.OnchainSDK(
110
+ chain.network,
111
+ { client: gearboxClient },
112
+ { gasLimit }
113
+ );
114
+ await sdk.attach({
115
+ marketConfigurators: []
110
116
  });
111
117
  const chunks = [];
112
118
  for (let i = 0; i < priceFeeds.length; i += chunkSize) {
@@ -0,0 +1,232 @@
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 MultichainSDK_exports = {};
20
+ __export(MultichainSDK_exports, {
21
+ MultichainSDK: () => MultichainSDK
22
+ });
23
+ module.exports = __toCommonJS(MultichainSDK_exports);
24
+ var import_chains = require("./chain/chains.js");
25
+ var import_core = require("./core/index.js");
26
+ var import_updates = require("./market/pricefeeds/updates/index.js");
27
+ var import_OnchainSDK = require("./OnchainSDK.js");
28
+ class MultichainSDK {
29
+ #chains;
30
+ #redstoneCache;
31
+ #pythCache;
32
+ #logger;
33
+ constructor(options) {
34
+ this.#chains = /* @__PURE__ */ new Map();
35
+ this.#logger = options.logger;
36
+ for (const [network, chainConfig] of Object.entries(options.chains)) {
37
+ const { gasLimit, ...clientOptions } = chainConfig;
38
+ let plugins;
39
+ if (options.plugins) {
40
+ plugins = Object.fromEntries(
41
+ Object.entries(options.plugins).map(([name, factory]) => [
42
+ name,
43
+ factory()
44
+ ])
45
+ );
46
+ }
47
+ const sdkOptions = {
48
+ logger: options.logger?.child?.({ network }),
49
+ strictContractTypes: options.strictContractTypes,
50
+ gasLimit: gasLimit ?? options.gasLimit,
51
+ plugins
52
+ };
53
+ const sdk = new import_OnchainSDK.OnchainSDK(
54
+ network,
55
+ clientOptions,
56
+ sdkOptions
57
+ );
58
+ this.#chains.set(network, sdk);
59
+ }
60
+ }
61
+ /**
62
+ * Attach all configured chains in parallel.
63
+ *
64
+ * @param options - Shared and per-chain attach options.
65
+ */
66
+ async attach(options) {
67
+ if (options?.redstone) {
68
+ this.#redstoneCache = new import_updates.PriceUpdatesCache({
69
+ ttl: options.redstone.cacheTTL ?? 225e3,
70
+ historical: !!options.redstone.historicTimestamp
71
+ });
72
+ }
73
+ if (options?.pyth) {
74
+ this.#pythCache = new import_updates.PriceUpdatesCache({
75
+ ttl: options.pyth.cacheTTL ?? 225e3,
76
+ historical: !!options.pyth.historicTimestamp
77
+ });
78
+ }
79
+ await Promise.all(
80
+ [...this.#chains.entries()].map(([network, sdk]) => {
81
+ const perChainOpts = options?.perChain?.[network] ?? {};
82
+ return sdk.attach({
83
+ ...perChainOpts,
84
+ redstone: {
85
+ ...options?.redstone,
86
+ cache: this.#redstoneCache,
87
+ ...perChainOpts.redstone
88
+ },
89
+ pyth: {
90
+ ...options?.pyth,
91
+ cache: this.#pythCache,
92
+ ...perChainOpts.pyth
93
+ }
94
+ });
95
+ })
96
+ );
97
+ this.#logger?.info("Attached all chains");
98
+ }
99
+ /**
100
+ * Hydrate all configured chains from serialised state.
101
+ *
102
+ * @param state - Multichain serialised state.
103
+ * @param options - Shared and per-chain hydrate options.
104
+ * @throws {@link SdkStateVersionMismatchError} if version doesn't match.
105
+ * @throws {@link SdkMissingChainStateError} if a configured chain has no
106
+ * state and `allowMissingChains` is not set.
107
+ */
108
+ hydrate(state, options) {
109
+ if (state.version !== import_OnchainSDK.STATE_VERSION) {
110
+ throw new import_core.SdkStateVersionMismatchError(import_OnchainSDK.STATE_VERSION, state.version);
111
+ }
112
+ if (options?.redstone) {
113
+ this.#redstoneCache = new import_updates.PriceUpdatesCache({
114
+ ttl: options.redstone.cacheTTL ?? 225e3,
115
+ historical: !!options.redstone.historicTimestamp
116
+ });
117
+ }
118
+ if (options?.pyth) {
119
+ this.#pythCache = new import_updates.PriceUpdatesCache({
120
+ ttl: options.pyth.cacheTTL ?? 225e3,
121
+ historical: !!options.pyth.historicTimestamp
122
+ });
123
+ }
124
+ const stateByNetwork = new Map(state.chains.map((cs) => [cs.network, cs]));
125
+ for (const [network, sdk] of this.#chains) {
126
+ const chainState = stateByNetwork.get(network);
127
+ if (!chainState) {
128
+ if (options?.allowMissingChains) {
129
+ continue;
130
+ }
131
+ throw new import_core.SdkMissingChainStateError(network);
132
+ }
133
+ const perChainOpts = options?.perChain?.[network] ?? {};
134
+ sdk.hydrate(chainState, {
135
+ ...perChainOpts,
136
+ redstone: {
137
+ ...options?.redstone,
138
+ cache: this.#redstoneCache,
139
+ ...perChainOpts.redstone
140
+ },
141
+ pyth: {
142
+ ...options?.pyth,
143
+ cache: this.#pythCache,
144
+ ...perChainOpts.pyth
145
+ }
146
+ });
147
+ }
148
+ this.#logger?.info("Hydrated all chains");
149
+ }
150
+ /**
151
+ * Returns the {@link OnchainSDK} for a given network or chain ID.
152
+ *
153
+ * @param networkOrChainId - Network type string or numeric chain ID.
154
+ * @throws If the network/chain is not configured.
155
+ */
156
+ chain(networkOrChainId) {
157
+ let network;
158
+ if (typeof networkOrChainId === "number") {
159
+ network = (0, import_chains.getNetworkType)(networkOrChainId);
160
+ } else {
161
+ network = networkOrChainId;
162
+ }
163
+ const sdk = this.#chains.get(network);
164
+ if (!sdk) {
165
+ throw new Error(
166
+ `Chain ${String(networkOrChainId)} is not configured in this MultichainSDK`
167
+ );
168
+ }
169
+ return sdk;
170
+ }
171
+ /**
172
+ * Read-only map of all configured chains.
173
+ **/
174
+ get chains() {
175
+ return this.#chains;
176
+ }
177
+ /**
178
+ * Sync state for all chains in parallel.
179
+ *
180
+ * @param opts - Sync options.
181
+ * @throws {@link SdkSyncFailedError} if any chain fails.
182
+ */
183
+ async syncState(opts) {
184
+ const errors = {};
185
+ const results = await Promise.allSettled(
186
+ [...this.#chains.entries()].map(async ([_network, sdk]) => {
187
+ const block = await sdk.client.getBlock({ blockTag: "latest" });
188
+ const synced = await sdk.syncState({
189
+ blockNumber: block.number,
190
+ timestamp: block.timestamp,
191
+ ignoreUpdateablePrices: opts?.ignoreUpdateablePrices
192
+ });
193
+ if (!synced) {
194
+ return;
195
+ }
196
+ })
197
+ );
198
+ for (const [i, result] of results.entries()) {
199
+ if (result.status === "rejected") {
200
+ const network = [...this.#chains.keys()][i];
201
+ errors[network] = result.reason;
202
+ }
203
+ }
204
+ if (Object.keys(errors).length > 0) {
205
+ throw new import_core.SdkSyncFailedError(errors);
206
+ }
207
+ this.#logger?.info("Synced state for all chains");
208
+ }
209
+ /**
210
+ * Serialisable snapshot of all chains' state.
211
+ **/
212
+ get state() {
213
+ return {
214
+ version: import_OnchainSDK.STATE_VERSION,
215
+ chains: [...this.#chains.values()].map((sdk) => sdk.state)
216
+ };
217
+ }
218
+ /**
219
+ * Human-readable snapshot of all chains' state.
220
+ * @param raw - When `true`, include raw numeric values.
221
+ */
222
+ stateHuman(raw) {
223
+ return {
224
+ version: import_OnchainSDK.STATE_VERSION,
225
+ chains: [...this.#chains.values()].map((sdk) => sdk.stateHuman(raw))
226
+ };
227
+ }
228
+ }
229
+ // Annotate the CommonJS export names for ESM import in node:
230
+ 0 && (module.exports = {
231
+ MultichainSDK
232
+ });