@gearbox-protocol/sdk 13.2.0-next.1 → 13.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cjs/dev/AccountOpener.js +5 -45
  2. package/dist/cjs/dev/index.js +13 -0
  3. package/dist/cjs/dev/isTransientError.js +5 -1
  4. package/dist/cjs/dev/logSplitterTransport.js +154 -0
  5. package/dist/cjs/plugins/zappers/ZappersPlugin.js +144 -0
  6. package/dist/cjs/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +6 -110
  7. package/dist/cjs/plugins/zappers/index.js +26 -0
  8. package/dist/cjs/plugins/zappers/package.json +1 -0
  9. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  10. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  11. package/dist/cjs/sdk/base/ChainContractsRegister.js +1 -1
  12. package/dist/cjs/sdk/base/TokensMeta.js +32 -255
  13. package/dist/cjs/sdk/base/index.js +0 -2
  14. package/dist/cjs/sdk/chain/chains.js +1 -2
  15. package/dist/cjs/sdk/constants/index.js +2 -0
  16. package/dist/cjs/sdk/{base/token-types.js → constants/phantom-tokens.js} +3 -9
  17. package/dist/cjs/sdk/market/MarketRegister.js +2 -2
  18. package/dist/cjs/sdk/market/MarketSuite.js +0 -6
  19. package/dist/cjs/sdk/market/index.js +1 -3
  20. package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
  21. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -17
  22. package/dist/cjs/sdk/market/pool/index.js +0 -4
  23. package/dist/cjs/sdk/pools/AbstractPoolService.js +137 -0
  24. package/dist/cjs/{abi/iStateSerializer.js → sdk/pools/PoolServiceV310.js} +8 -14
  25. package/dist/cjs/sdk/pools/createPoolService.js +35 -0
  26. package/dist/cjs/sdk/pools/index.js +4 -2
  27. package/dist/cjs/sdk/utils/AddressMap.js +1 -1
  28. package/dist/cjs/sdk/utils/viem/sendRawTx.js +0 -16
  29. package/dist/esm/dev/AccountOpener.js +6 -47
  30. package/dist/esm/dev/index.js +10 -0
  31. package/dist/esm/dev/isTransientError.js +5 -1
  32. package/dist/esm/dev/logSplitterTransport.js +131 -0
  33. package/dist/esm/plugins/zappers/ZappersPlugin.js +126 -0
  34. package/dist/esm/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +2 -109
  35. package/dist/esm/plugins/zappers/index.js +3 -0
  36. package/dist/esm/plugins/zappers/package.json +1 -0
  37. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  38. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  39. package/dist/esm/sdk/base/ChainContractsRegister.js +1 -1
  40. package/dist/esm/sdk/base/TokensMeta.js +32 -261
  41. package/dist/esm/sdk/base/index.js +0 -1
  42. package/dist/esm/sdk/chain/chains.js +1 -2
  43. package/dist/esm/sdk/constants/index.js +1 -0
  44. package/dist/esm/sdk/{base/token-types.js → constants/phantom-tokens.js} +0 -4
  45. package/dist/esm/sdk/market/MarketRegister.js +2 -2
  46. package/dist/esm/sdk/market/MarketSuite.js +0 -6
  47. package/dist/esm/sdk/market/index.js +0 -1
  48. package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
  49. package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -17
  50. package/dist/esm/sdk/market/pool/index.js +0 -2
  51. package/dist/esm/sdk/pools/AbstractPoolService.js +113 -0
  52. package/dist/esm/sdk/pools/PoolServiceV310.js +6 -0
  53. package/dist/esm/sdk/pools/createPoolService.js +11 -0
  54. package/dist/esm/sdk/pools/index.js +2 -1
  55. package/dist/esm/sdk/utils/AddressMap.js +1 -1
  56. package/dist/esm/sdk/utils/viem/sendRawTx.js +1 -19
  57. package/dist/types/dev/index.d.ts +1 -0
  58. package/dist/types/dev/logSplitterTransport.d.ts +118 -0
  59. package/dist/types/plugins/zappers/ZappersPlugin.d.ts +18 -0
  60. package/dist/types/plugins/zappers/extraZappers.d.ts +6 -0
  61. package/dist/types/plugins/zappers/index.d.ts +3 -0
  62. package/dist/types/plugins/zappers/types.d.ts +12 -0
  63. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +27 -123
  64. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
  65. package/dist/types/sdk/accounts/types.d.ts +8 -108
  66. package/dist/types/sdk/base/TokensMeta.d.ts +18 -34
  67. package/dist/types/sdk/base/index.d.ts +0 -1
  68. package/dist/types/sdk/base/types.d.ts +1 -0
  69. package/dist/types/sdk/chain/chains.d.ts +1 -1
  70. package/dist/types/sdk/constants/index.d.ts +1 -0
  71. package/dist/types/sdk/constants/phantom-tokens.d.ts +2 -0
  72. package/dist/types/sdk/market/MarketRegister.d.ts +2 -2
  73. package/dist/types/sdk/market/MarketSuite.d.ts +0 -3
  74. package/dist/types/sdk/market/credit/CreditFacadeV310BaseContract.d.ts +1 -1
  75. package/dist/types/sdk/market/index.d.ts +0 -1
  76. package/dist/types/sdk/market/pool/PoolSuite.d.ts +0 -2
  77. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
  78. package/dist/types/sdk/market/pool/index.d.ts +0 -2
  79. package/dist/types/sdk/pools/AbstractPoolService.d.ts +9 -0
  80. package/dist/types/sdk/pools/PoolServiceV310.d.ts +4 -0
  81. package/dist/types/sdk/pools/createPoolService.d.ts +3 -0
  82. package/dist/types/sdk/pools/index.d.ts +2 -1
  83. package/dist/types/sdk/pools/types.d.ts +63 -84
  84. package/dist/types/sdk/utils/AddressMap.d.ts +1 -1
  85. package/dist/types/sdk/utils/viem/sendRawTx.d.ts +1 -5
  86. package/package.json +5 -3
  87. package/dist/cjs/abi/310/iSecuritizeDegenNFT.js +0 -263
  88. package/dist/cjs/abi/310/iSecuritizeKYCFactory.js +0 -278
  89. package/dist/cjs/sdk/market/pool/SecuritizeKYCFactory.js +0 -97
  90. package/dist/cjs/sdk/pools/PoolService.js +0 -391
  91. package/dist/esm/abi/310/iSecuritizeDegenNFT.js +0 -239
  92. package/dist/esm/abi/310/iSecuritizeKYCFactory.js +0 -254
  93. package/dist/esm/abi/iStateSerializer.js +0 -12
  94. package/dist/esm/sdk/market/pool/SecuritizeKYCFactory.js +0 -73
  95. package/dist/esm/sdk/pools/PoolService.js +0 -371
  96. package/dist/types/abi/310/iSecuritizeDegenNFT.d.ts +0 -324
  97. package/dist/types/abi/310/iSecuritizeKYCFactory.d.ts +0 -322
  98. package/dist/types/abi/iStateSerializer.d.ts +0 -11
  99. package/dist/types/sdk/base/token-types.d.ts +0 -33
  100. package/dist/types/sdk/market/ZapperRegister.d.ts +0 -17
  101. package/dist/types/sdk/market/pool/SecuritizeKYCFactory.d.ts +0 -345
  102. package/dist/types/sdk/market/types.d.ts +0 -10
  103. package/dist/types/sdk/pools/PoolService.d.ts +0 -14
  104. /package/dist/cjs/{sdk/market → plugins/zappers}/types.js +0 -0
  105. /package/dist/esm/{sdk/market → plugins/zappers}/types.js +0 -0
@@ -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 });
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
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
+ };
6
10
  var __copyProps = (to, from, except, desc) => {
7
11
  if (from && typeof from === "object" || typeof from === "function") {
8
12
  for (let key of __getOwnPropNames(from))
@@ -14,6 +18,11 @@ var __copyProps = (to, from, except, desc) => {
14
18
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
20
  var dev_exports = {};
21
+ __export(dev_exports, {
22
+ GetLogsTransportOptions: () => import_logSplitterTransport.LogSplitterTransportOptions,
23
+ isRangeError: () => import_logSplitterTransport.isRangeError,
24
+ logSplitterTransport: () => import_logSplitterTransport.logSplitterTransport
25
+ });
17
26
  module.exports = __toCommonJS(dev_exports);
18
27
  __reExport(dev_exports, require("./AccountOpener.js"), module.exports);
19
28
  __reExport(dev_exports, require("./CachedStateSubscriber.js"), module.exports);
@@ -26,6 +35,7 @@ __reExport(dev_exports, require("./EthCallSpy.js"), module.exports);
26
35
  __reExport(dev_exports, require("./isOutOfSyncError.js"), module.exports);
27
36
  __reExport(dev_exports, require("./isRateLimitError.js"), module.exports);
28
37
  __reExport(dev_exports, require("./isTransientError.js"), module.exports);
38
+ var import_logSplitterTransport = require("./logSplitterTransport.js");
29
39
  __reExport(dev_exports, require("./ltUtils.js"), module.exports);
30
40
  __reExport(dev_exports, require("./migrateFaucet.js"), module.exports);
31
41
  __reExport(dev_exports, require("./mint/index.js"), module.exports);
@@ -37,6 +47,9 @@ __reExport(dev_exports, require("./transports.js"), module.exports);
37
47
  __reExport(dev_exports, require("./types.js"), module.exports);
38
48
  // Annotate the CommonJS export names for ESM import in node:
39
49
  0 && (module.exports = {
50
+ GetLogsTransportOptions,
51
+ isRangeError,
52
+ logSplitterTransport,
40
53
  ...require("./AccountOpener.js"),
41
54
  ...require("./CachedStateSubscriber.js"),
42
55
  ...require("./calcLiquidatableLTs.js"),
@@ -57,7 +57,11 @@ const TRANSIENT_PATTERNS = [
57
57
  // EIP-1474 ResourceUnavailableRpcError (code -32002): node is syncing or the
58
58
  // requested resource is temporarily unavailable.
59
59
  // Matches both the RPC message and viem's shortMessage "Requested resource not available."
60
- /resource unavailable|requested resource not available/i
60
+ /resource unavailable|requested resource not available/i,
61
+ // sometimes happens on DRPC: "GRPC Context cancellation"
62
+ /context cancel/i,
63
+ // DRPC error: Can't route your request to suitable provider, if you specified certain providers revise the list
64
+ /suitable provider/i
61
65
  ];
62
66
  function isTransientError(e) {
63
67
  if (e instanceof import_viem.BaseError) {
@@ -0,0 +1,154 @@
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 logSplitterTransport_exports = {};
20
+ __export(logSplitterTransport_exports, {
21
+ fetchLogsWithPagination: () => fetchLogsWithPagination,
22
+ isFixedBlockRange: () => isFixedBlockRange,
23
+ isRangeError: () => isRangeError,
24
+ logSplitterTransport: () => logSplitterTransport,
25
+ parsePageSizeHint: () => parsePageSizeHint
26
+ });
27
+ module.exports = __toCommonJS(logSplitterTransport_exports);
28
+ var import_viem = require("viem");
29
+ function isFixedBlockRange(filter) {
30
+ if (filter.blockHash != null) return false;
31
+ return isHexBlockNumber(filter.fromBlock) && isHexBlockNumber(filter.toBlock);
32
+ }
33
+ function isHexBlockNumber(value) {
34
+ return typeof value === "string" && value.startsWith("0x");
35
+ }
36
+ const RANGE_ERROR_PATTERNS = [
37
+ /block range/i,
38
+ /too many results/i,
39
+ /response size/i,
40
+ /result window/i,
41
+ /exceeds allowed/i,
42
+ /cannot request logs over more than/i,
43
+ /eth_getLogs is limited to/i,
44
+ /eth_getLogs requests with up to/i,
45
+ /range is too large/i,
46
+ /exceeded max allowed range/i
47
+ ];
48
+ function isRangeError(error) {
49
+ const msg = errorMessage(error);
50
+ return RANGE_ERROR_PATTERNS.some((re) => re.test(msg));
51
+ }
52
+ const GENERIC_BLOCKS_RE = /(\d+)\s*block/i;
53
+ const ALCHEMY_RANGE_RE = /this block range should work: \[(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)\]/;
54
+ function parsePageSizeHint(error) {
55
+ const alchemy = tryAlchemyHint(error);
56
+ if (alchemy != null) return alchemy;
57
+ const msg = errorMessage(error);
58
+ const m = msg.match(GENERIC_BLOCKS_RE);
59
+ return m ? Number(m[1]) : null;
60
+ }
61
+ function tryAlchemyHint(error) {
62
+ if (!(error instanceof import_viem.HttpRequestError)) return void 0;
63
+ try {
64
+ const parsed = JSON.parse(error.details);
65
+ if (typeof parsed.message !== "string") return void 0;
66
+ const match = parsed.message.match(ALCHEMY_RANGE_RE);
67
+ if (!match) return void 0;
68
+ const from = (0, import_viem.hexToNumber)(match[1]);
69
+ const to = (0, import_viem.hexToNumber)(match[2]);
70
+ return to - from + 1;
71
+ } catch {
72
+ return void 0;
73
+ }
74
+ }
75
+ function errorMessage(error) {
76
+ if (error instanceof Error) {
77
+ const details = error.details;
78
+ return details ? `${error.message} ${details}` : error.message;
79
+ }
80
+ return String(error);
81
+ }
82
+ async function fetchLogsWithPagination(callRpc, from, to, options) {
83
+ if (from > to) {
84
+ throw new import_viem.InvalidParamsRpcError(
85
+ new Error(`Invalid parameters: from (${from}) > to (${to})`)
86
+ );
87
+ }
88
+ const { softLimit, hardLimit } = options ?? {};
89
+ let pageSize = hardLimit ?? to - from + 1;
90
+ const results = [];
91
+ let cursor = from;
92
+ while (cursor <= to) {
93
+ const chunkEnd = Math.min(to, cursor + pageSize - 1);
94
+ try {
95
+ const logs = await callRpc(cursor, chunkEnd);
96
+ results.push(...logs);
97
+ cursor = chunkEnd + 1;
98
+ } catch (error) {
99
+ if (!isRangeError(error)) {
100
+ throw error;
101
+ }
102
+ if (cursor === chunkEnd) {
103
+ throw error;
104
+ }
105
+ const hint = parsePageSizeHint(error);
106
+ if (hint) {
107
+ pageSize = hint;
108
+ } else {
109
+ const half = Math.max(1, Math.floor((chunkEnd - cursor + 1) / 2));
110
+ pageSize = softLimit ? Math.min(softLimit, half) : half;
111
+ }
112
+ }
113
+ }
114
+ return results;
115
+ }
116
+ function logSplitterTransport(transport, logOptions) {
117
+ return (opts) => {
118
+ const base = transport(opts);
119
+ const rpcRequest = base.request;
120
+ const request = (async (args) => {
121
+ const { method, params } = args;
122
+ if (method !== "eth_getLogs") {
123
+ return rpcRequest(args);
124
+ }
125
+ const filter = params?.[0] ?? {};
126
+ if (!isFixedBlockRange(filter)) {
127
+ return rpcRequest(args);
128
+ }
129
+ const from = (0, import_viem.hexToNumber)(filter.fromBlock);
130
+ const to = (0, import_viem.hexToNumber)(filter.toBlock);
131
+ const callRpc = async (f, t) => {
132
+ const paginatedFilter = {
133
+ ...filter,
134
+ fromBlock: (0, import_viem.numberToHex)(f),
135
+ toBlock: (0, import_viem.numberToHex)(t)
136
+ };
137
+ return rpcRequest({
138
+ method: "eth_getLogs",
139
+ params: [paginatedFilter]
140
+ });
141
+ };
142
+ return fetchLogsWithPagination(callRpc, from, to, logOptions);
143
+ });
144
+ return { ...base, request };
145
+ };
146
+ }
147
+ // Annotate the CommonJS export names for ESM import in node:
148
+ 0 && (module.exports = {
149
+ fetchLogsWithPagination,
150
+ isFixedBlockRange,
151
+ isRangeError,
152
+ logSplitterTransport,
153
+ parsePageSizeHint
154
+ });
@@ -0,0 +1,144 @@
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 ZappersPlugin_exports = {};
20
+ __export(ZappersPlugin_exports, {
21
+ ZappersPlugin: () => ZappersPlugin
22
+ });
23
+ module.exports = __toCommonJS(ZappersPlugin_exports);
24
+ var import_peripheryCompressor = require("../../abi/compressors/peripheryCompressor.js");
25
+ var import_sdk = require("../../sdk/index.js");
26
+ class ZappersPlugin extends import_sdk.BasePlugin {
27
+ #zappers;
28
+ #extraZappers;
29
+ constructor(extraZappers = [], loadOnAttach = false) {
30
+ super(loadOnAttach);
31
+ this.#extraZappers = this.#addExtraZappers(extraZappers);
32
+ }
33
+ async load(force) {
34
+ if (!force && this.loaded) {
35
+ return this.state;
36
+ }
37
+ const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
38
+ import_sdk.AP_PERIPHERY_COMPRESSOR,
39
+ import_sdk.VERSION_RANGE_310
40
+ );
41
+ this.sdk.logger?.debug(
42
+ `loading zappers with periphery compressor ${pcAddr}`
43
+ );
44
+ const markets = this.sdk.marketRegister.markets;
45
+ const resp = await this.client.multicall({
46
+ contracts: markets.map(
47
+ (m) => ({
48
+ abi: import_peripheryCompressor.peripheryCompressorAbi,
49
+ address: pcAddr,
50
+ functionName: "getZappers",
51
+ args: [m.configurator.address, m.pool.pool.address]
52
+ })
53
+ ),
54
+ allowFailure: true,
55
+ batchSize: 0,
56
+ blockNumber: this.sdk.currentBlock
57
+ });
58
+ this.#zappers = new import_sdk.AddressMap(void 0, "zappers");
59
+ for (let i = 0; i < resp.length; i++) {
60
+ const { status, result, error } = resp[i];
61
+ const marketConfigurator = markets[i].configurator.address;
62
+ const pool = markets[i].pool.pool.address;
63
+ if (status === "success") {
64
+ this.#zappers.upsert(
65
+ pool,
66
+ result.map((z) => ({ ...z, pool }))
67
+ );
68
+ } else {
69
+ this.sdk.logger?.error(
70
+ `failed to load zapper for market configurator ${this.labelAddress(
71
+ marketConfigurator
72
+ )} and pool ${this.labelAddress(pool)}: ${error}`
73
+ );
74
+ }
75
+ }
76
+ this.#loadZapperTokens();
77
+ return this.state;
78
+ }
79
+ #addExtraZappers(extraZappers) {
80
+ const zappers = new import_sdk.AddressMap();
81
+ for (const z of extraZappers) {
82
+ const existing = zappers?.get(z.pool);
83
+ if (existing) {
84
+ const hasZapper = existing.some(
85
+ (zz) => (0, import_sdk.hexEq)(zz.baseParams.addr, z.baseParams.addr)
86
+ );
87
+ if (!hasZapper) {
88
+ existing.push(z);
89
+ }
90
+ } else {
91
+ zappers?.upsert(z.pool, [z]);
92
+ }
93
+ }
94
+ return zappers;
95
+ }
96
+ get extraZappers() {
97
+ if (!this.#extraZappers) {
98
+ console.error("extra zappers not attached");
99
+ return new import_sdk.AddressMap();
100
+ }
101
+ return this.#extraZappers;
102
+ }
103
+ get zappers() {
104
+ if (!this.#zappers) {
105
+ throw new Error("zappers plugin not attached");
106
+ }
107
+ return this.#zappers;
108
+ }
109
+ get loaded() {
110
+ return !!this.#zappers;
111
+ }
112
+ stateHuman(_) {
113
+ return this.zappers.values().flatMap(
114
+ (l) => l.flatMap((z) => ({
115
+ address: z.baseParams.addr,
116
+ contractType: z.baseParams.contractType,
117
+ version: Number(z.baseParams.version),
118
+ tokenIn: this.labelAddress(z.tokenIn.addr),
119
+ tokenOut: this.labelAddress(z.tokenOut.addr)
120
+ }))
121
+ );
122
+ }
123
+ get state() {
124
+ return {
125
+ zappers: this.zappers.asRecord()
126
+ };
127
+ }
128
+ hydrate(state) {
129
+ this.#zappers = new import_sdk.AddressMap(Object.entries(state.zappers), "zappers");
130
+ this.#loadZapperTokens();
131
+ }
132
+ #loadZapperTokens() {
133
+ const zappersTokens = this.zappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
134
+ const extraZappersTokens = this.extraZappers.values().flatMap((l) => l.flatMap((z) => [z.tokenIn, z.tokenOut]));
135
+ for (const t of [...zappersTokens, ...extraZappersTokens]) {
136
+ this.sdk.tokensMeta.upsert(t.addr, t);
137
+ this.sdk.setAddressLabel(t.addr, t.symbol);
138
+ }
139
+ }
140
+ }
141
+ // Annotate the CommonJS export names for ESM import in node:
142
+ 0 && (module.exports = {
143
+ ZappersPlugin
144
+ });
@@ -16,115 +16,12 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var ZapperRegister_exports = {};
20
- __export(ZapperRegister_exports, {
21
- ZapperRegister: () => ZapperRegister
19
+ var extraZappers_exports = {};
20
+ __export(extraZappers_exports, {
21
+ extraZappers: () => extraZappers
22
22
  });
23
- module.exports = __toCommonJS(ZapperRegister_exports);
24
- var import_peripheryCompressor = require("../../abi/compressors/peripheryCompressor.js");
25
- var import_base = require("../base/index.js");
26
- var import_constants = require("../constants/index.js");
27
- var import_utils = require("../utils/index.js");
28
- class ZapperRegister extends import_base.SDKConstruct {
29
- /**
30
- * Mapping pool.address -> ZapperData[]
31
- * Needs to be loaded explicitly using loadZappers method
32
- */
33
- #zappers;
34
- /**
35
- * Load zappers for all pools using periphery compressor, adds hardcoded zappers
36
- */
37
- async loadZappers(force) {
38
- if (!force && this.#zappers) {
39
- return;
40
- }
41
- const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
42
- import_constants.AP_PERIPHERY_COMPRESSOR,
43
- import_constants.VERSION_RANGE_310
44
- );
45
- this.logger?.debug(`loading zappers with periphery compressor ${pcAddr}`);
46
- const markets = this.sdk.marketRegister.markets;
47
- const resp = await this.client.multicall({
48
- contracts: markets.map(
49
- (m) => ({
50
- abi: import_peripheryCompressor.peripheryCompressorAbi,
51
- address: pcAddr,
52
- functionName: "getZappers",
53
- args: [m.configurator.address, m.pool.pool.address]
54
- })
55
- ),
56
- allowFailure: true,
57
- batchSize: 0
58
- });
59
- this.#zappers = new import_utils.AddressMap(void 0, "zappers");
60
- for (let i = 0; i < resp.length; i++) {
61
- const { status, result, error } = resp[i];
62
- const marketConfigurator = markets[i].configurator.address;
63
- const pool = markets[i].pool.pool.address;
64
- if (status === "success") {
65
- for (const z of result) {
66
- this.#addZapper({ ...z, pool, type: "base" });
67
- }
68
- } else {
69
- this.logger?.error(
70
- `failed to load zapper for market configurator ${this.labelAddress(
71
- marketConfigurator
72
- )} and pool ${this.labelAddress(pool)}: ${error}`
73
- );
74
- }
75
- }
76
- for (const z of KYC_ZAPPERS[this.networkType] ?? []) {
77
- this.#addZapper({ ...z, type: "kyc" });
78
- }
79
- for (const z of MIGRATION_ZAPPERS[this.networkType] ?? []) {
80
- this.#addZapper({ ...z, type: "migration" });
81
- }
82
- }
83
- #addZapper(z) {
84
- if (BROKEN_ZAPPERS.has(z.baseParams.addr)) {
85
- return;
86
- }
87
- const existing = this.zappers.get(z.pool);
88
- if (existing) {
89
- const hasZapper = existing.some(
90
- (zz) => (0, import_utils.hexEq)(zz.baseParams.addr, z.baseParams.addr)
91
- );
92
- if (!hasZapper) {
93
- existing.push(z);
94
- }
95
- } else {
96
- this.zappers.upsert(z.pool, [z]);
97
- }
98
- const zappersTokens = [z.tokenIn, z.tokenOut];
99
- for (const t of zappersTokens) {
100
- this.sdk.tokensMeta.upsert(t.addr, t);
101
- this.sdk.setAddressLabel(t.addr, t.symbol);
102
- }
103
- }
104
- get zappers() {
105
- if (!this.#zappers) {
106
- throw new Error("zappers not loaded, call loadZappers first");
107
- }
108
- return this.#zappers;
109
- }
110
- poolZappers(pool) {
111
- return this.zappers.get(pool) ?? [];
112
- }
113
- /**
114
- * Can return multiple zappers if there are multiple zappers for the same tokenIn and tokenOut
115
- */
116
- getZapper(pool, tokenIn, tokenOut) {
117
- const zappers = this.zappers.get(pool)?.filter(
118
- (z) => (0, import_utils.hexEq)(z.tokenIn.addr, tokenIn) && (0, import_utils.hexEq)(z.tokenOut.addr, tokenOut)
119
- );
120
- return zappers;
121
- }
122
- }
123
- const BROKEN_ZAPPERS = new import_utils.AddressMap(
124
- [["0x90D66b03EC4D462e42e3c7741049FB46a4a03B69", true]],
125
- "brokenZappers"
126
- );
127
- const MIGRATION_ZAPPERS = {
23
+ module.exports = __toCommonJS(extraZappers_exports);
24
+ const extraZappers = {
128
25
  Mainnet: [
129
26
  {
130
27
  baseParams: {
@@ -233,8 +130,7 @@ const MIGRATION_ZAPPERS = {
233
130
  }
234
131
  ]
235
132
  };
236
- const KYC_ZAPPERS = {};
237
133
  // Annotate the CommonJS export names for ESM import in node:
238
134
  0 && (module.exports = {
239
- ZapperRegister
135
+ extraZappers
240
136
  });
@@ -0,0 +1,26 @@
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 __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var zappers_exports = {};
17
+ module.exports = __toCommonJS(zappers_exports);
18
+ __reExport(zappers_exports, require("./extraZappers.js"), module.exports);
19
+ __reExport(zappers_exports, require("./types.js"), module.exports);
20
+ __reExport(zappers_exports, require("./ZappersPlugin.js"), module.exports);
21
+ // Annotate the CommonJS export names for ESM import in node:
22
+ 0 && (module.exports = {
23
+ ...require("./extraZappers.js"),
24
+ ...require("./types.js"),
25
+ ...require("./ZappersPlugin.js")
26
+ });
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}