@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.
- package/dist/cjs/dev/AccountOpener.js +5 -45
- package/dist/cjs/dev/RevolverTransport.js +10 -4
- package/dist/cjs/dev/index.js +0 -2
- package/dist/cjs/dev/logSplitterTransport.js +10 -1
- package/dist/cjs/permissionless/utils/create2.js +2 -2
- package/dist/cjs/permissionless/utils/price-update/get-price-feeds.js +11 -5
- package/dist/cjs/permissionless/utils/price-update/get-price-update-tx.js +11 -5
- package/dist/cjs/permissionless/utils/price-update/get-prices.js +12 -6
- package/dist/cjs/sdk/MultichainSDK.js +232 -0
- package/dist/cjs/sdk/OnchainSDK.js +478 -0
- package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +16 -324
- package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +1 -7
- package/dist/cjs/sdk/base/TokensMeta.js +42 -22
- package/dist/cjs/sdk/base/token-types.js +0 -9
- package/dist/cjs/sdk/chain/chains.js +1 -2
- package/dist/cjs/sdk/constants/address-provider.js +0 -3
- package/dist/cjs/sdk/core/errors.js +77 -0
- package/dist/cjs/sdk/core/index.js +2 -0
- package/dist/cjs/sdk/index.js +4 -2
- package/dist/cjs/sdk/market/MarketRegister.js +116 -70
- package/dist/cjs/sdk/market/MarketSuite.js +0 -3
- package/dist/cjs/sdk/market/index.js +0 -2
- package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
- package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -11
- package/dist/cjs/sdk/market/pool/index.js +0 -2
- package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +10 -3
- package/dist/cjs/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.js +20 -23
- package/dist/cjs/sdk/market/pricefeeds/updates/PythUpdater.js +7 -4
- package/dist/cjs/sdk/market/pricefeeds/updates/RedstoneUpdater.js +4 -4
- package/dist/cjs/sdk/market/pricefeeds/updates/fetchPythPayloads.js +1 -1
- package/dist/cjs/sdk/market/pricefeeds/updates/index.js +3 -0
- package/dist/cjs/sdk/options.js +24 -52
- package/dist/cjs/sdk/plugins/BasePlugin.js +11 -4
- package/dist/cjs/sdk/pools/PoolService.js +12 -104
- package/dist/cjs/sdk/utils/formatter.js +99 -20
- package/dist/cjs/sdk/utils/viem/index.js +3 -3
- package/dist/cjs/sdk/utils/viem/watchBlocksAsync.js +76 -0
- package/dist/esm/dev/AccountOpener.js +6 -47
- package/dist/esm/dev/RevolverTransport.js +10 -4
- package/dist/esm/dev/index.js +0 -1
- package/dist/esm/dev/logSplitterTransport.js +10 -1
- package/dist/esm/permissionless/utils/create2.js +1 -1
- package/dist/esm/permissionless/utils/price-update/get-price-feeds.js +12 -6
- package/dist/esm/permissionless/utils/price-update/get-price-update-tx.js +13 -7
- package/dist/esm/permissionless/utils/price-update/get-prices.js +13 -7
- package/dist/esm/sdk/MultichainSDK.js +217 -0
- package/dist/esm/sdk/OnchainSDK.js +472 -0
- package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +17 -328
- package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +1 -7
- package/dist/esm/sdk/base/TokensMeta.js +44 -22
- package/dist/esm/sdk/base/token-types.js +0 -6
- package/dist/esm/sdk/chain/chains.js +1 -2
- package/dist/esm/sdk/constants/address-provider.js +0 -2
- package/dist/esm/sdk/core/errors.js +48 -0
- package/dist/esm/sdk/core/index.js +1 -0
- package/dist/esm/sdk/index.js +2 -1
- package/dist/esm/sdk/market/MarketRegister.js +118 -74
- package/dist/esm/sdk/market/MarketSuite.js +0 -3
- package/dist/esm/sdk/market/index.js +0 -1
- package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
- package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -11
- package/dist/esm/sdk/market/pool/index.js +0 -1
- package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +10 -3
- package/dist/esm/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.js +20 -13
- package/dist/esm/sdk/market/pricefeeds/updates/PythUpdater.js +7 -4
- package/dist/esm/sdk/market/pricefeeds/updates/RedstoneUpdater.js +4 -4
- package/dist/esm/sdk/market/pricefeeds/updates/fetchPythPayloads.js +1 -1
- package/dist/esm/sdk/market/pricefeeds/updates/index.js +2 -0
- package/dist/esm/sdk/options.js +22 -51
- package/dist/esm/sdk/plugins/BasePlugin.js +11 -4
- package/dist/esm/sdk/pools/PoolService.js +13 -109
- package/dist/esm/sdk/utils/formatter.js +99 -10
- package/dist/esm/sdk/utils/viem/index.js +1 -1
- package/dist/esm/sdk/utils/viem/watchBlocksAsync.js +52 -0
- package/dist/types/dev/RevolverTransport.d.ts +2 -1
- package/dist/types/dev/calcLiquidatableLTs.d.ts +2 -2
- package/dist/types/dev/claimFromFaucet.d.ts +2 -2
- package/dist/types/dev/create2.d.ts +3 -4
- package/dist/types/dev/index.d.ts +0 -1
- package/dist/types/dev/logSplitterTransport.d.ts +3 -1
- package/dist/types/dev/migrateFaucet.d.ts +2 -2
- package/dist/types/dev/mint/AbstractMinter.d.ts +2 -2
- package/dist/types/dev/mint/FallbackMinter.d.ts +2 -2
- package/dist/types/dev/mint/factory.d.ts +2 -2
- package/dist/types/dev/replaceStorage.d.ts +1 -1
- package/dist/types/permissionless/utils/price-update/get-updatable-feeds.d.ts +2 -2
- package/dist/types/plugins/accounts/AccountsPlugin.d.ts +2 -2
- package/dist/types/plugins/accounts-counter/AccountsCounterPlugin.d.ts +2 -2
- package/dist/types/plugins/adapters/AdaptersPlugin.d.ts +2 -2
- package/dist/types/plugins/apy/ApyPlugin.d.ts +2 -2
- package/dist/types/plugins/bots/BotsPlugin.d.ts +2 -2
- package/dist/types/plugins/bots/PartialLiquidationBotV310Contract.d.ts +2 -2
- package/dist/types/plugins/degen-distributors/DegenDistributorsPlugin.d.ts +2 -2
- package/dist/types/plugins/delayed-withdrawal/DelayedWithdrawalPlugin.d.ts +2 -2
- package/dist/types/sdk/MultichainSDK.d.ts +144 -0
- package/dist/types/sdk/OnchainSDK.d.ts +257 -0
- package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +4 -54
- package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
- package/dist/types/sdk/accounts/createCreditAccountService.d.ts +2 -2
- package/dist/types/sdk/accounts/types.d.ts +15 -95
- package/dist/types/sdk/base/SDKConstruct.d.ts +4 -4
- package/dist/types/sdk/base/TokensMeta.d.ts +3 -14
- package/dist/types/sdk/base/token-types.d.ts +4 -44
- package/dist/types/sdk/base/types.d.ts +2 -116
- package/dist/types/sdk/chain/chains.d.ts +1 -5
- package/dist/types/sdk/constants/address-provider.d.ts +0 -1
- package/dist/types/sdk/core/createAddressProvider.d.ts +3 -3
- package/dist/types/sdk/core/errors.d.ts +51 -0
- package/dist/types/sdk/core/index.d.ts +1 -0
- package/dist/types/sdk/index.d.ts +2 -1
- package/dist/types/sdk/market/MarketRegister.d.ts +11 -8
- package/dist/types/sdk/market/MarketSuite.d.ts +2 -4
- package/dist/types/sdk/market/adapters/createAdapter.d.ts +2 -2
- package/dist/types/sdk/market/credit/CreditConfiguratorV310Contract.d.ts +3 -3
- package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +2 -2
- package/dist/types/sdk/market/credit/CreditSuite.d.ts +2 -2
- package/dist/types/sdk/market/credit/createCreditConfigurator.d.ts +2 -2
- package/dist/types/sdk/market/credit/createCreditFacade.d.ts +2 -2
- package/dist/types/sdk/market/credit/createCreditManager.d.ts +2 -2
- package/dist/types/sdk/market/credit/types.d.ts +1 -1
- package/dist/types/sdk/market/index.d.ts +0 -1
- package/dist/types/sdk/market/loss-policy/AliasLossPolicyV310Contract.d.ts +3 -3
- package/dist/types/sdk/market/loss-policy/createLossPolicy.d.ts +2 -2
- package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +5 -6
- package/dist/types/sdk/market/oracle/PriceOracleV310Contract.d.ts +2 -2
- package/dist/types/sdk/market/oracle/createPriceOracle.d.ts +2 -2
- package/dist/types/sdk/market/oracle/types.d.ts +10 -3
- package/dist/types/sdk/market/pool/PoolSuite.d.ts +2 -4
- package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
- package/dist/types/sdk/market/pool/createInterestRateModel.d.ts +2 -2
- package/dist/types/sdk/market/pool/createPool.d.ts +2 -2
- package/dist/types/sdk/market/pool/createPoolQuotaKeeper.d.ts +2 -2
- package/dist/types/sdk/market/pool/createRateKeeper.d.ts +2 -2
- package/dist/types/sdk/market/pool/index.d.ts +0 -1
- package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +8 -3
- package/dist/types/sdk/market/pricefeeds/updates/PythAccumulatorUpdateData.d.ts +12 -13
- package/dist/types/sdk/market/pricefeeds/updates/PythUpdater.d.ts +8 -3
- package/dist/types/sdk/market/pricefeeds/updates/RedstoneUpdater.d.ts +8 -3
- package/dist/types/sdk/market/pricefeeds/updates/index.d.ts +1 -0
- package/dist/types/sdk/market/pricefeeds/updates/types.d.ts +4 -0
- package/dist/types/sdk/market/types.d.ts +1 -1
- package/dist/types/sdk/options.d.ts +15 -16
- package/dist/types/sdk/plugins/BasePlugin.d.ts +12 -6
- package/dist/types/sdk/plugins/errors.d.ts +2 -2
- package/dist/types/sdk/plugins/types.d.ts +16 -6
- package/dist/types/sdk/pools/PoolService.d.ts +8 -8
- package/dist/types/sdk/pools/types.d.ts +2 -3
- package/dist/types/sdk/router/AbstractRouterContract.d.ts +3 -3
- package/dist/types/sdk/router/RouterV310Contract.d.ts +2 -2
- package/dist/types/sdk/router/createRouter.d.ts +2 -2
- package/dist/types/sdk/router/helpers.d.ts +1 -1
- package/dist/types/sdk/types/state-human.d.ts +10 -2
- package/dist/types/sdk/types/state.d.ts +14 -8
- package/dist/types/sdk/utils/filterDust.d.ts +2 -2
- package/dist/types/sdk/utils/formatter.d.ts +1 -1
- package/dist/types/sdk/utils/isDust.d.ts +2 -2
- package/dist/types/sdk/utils/toAddress.d.ts +1 -1
- package/dist/types/sdk/utils/viem/getLogsPaginated.d.ts +1 -2
- package/dist/types/sdk/utils/viem/getLogsSafe.d.ts +1 -1
- package/dist/types/sdk/utils/viem/index.d.ts +1 -1
- package/dist/types/sdk/utils/viem/simulateWithPriceUpdates.d.ts +1 -2
- package/dist/types/sdk/utils/viem/watchBlocksAsync.d.ts +74 -0
- package/package.json +3 -6
- package/dist/cjs/abi/kyc/iDSRegistryService.js +0 -70
- package/dist/cjs/abi/kyc/iDSToken.js +0 -71
- package/dist/cjs/abi/kyc/iKYCCompressor.js +0 -196
- package/dist/cjs/abi/kyc/iKYCFactory.js +0 -122
- package/dist/cjs/abi/kyc/iKYCUnderlying.js +0 -401
- package/dist/cjs/abi/kyc/iSecuritizeDegenNFT.js +0 -326
- package/dist/cjs/abi/kyc/iSecuritizeKYCFactory.js +0 -319
- package/dist/cjs/dev/CachedStateSubscriber.js +0 -78
- package/dist/cjs/sdk/GearboxSDK.js +0 -696
- package/dist/cjs/sdk/market/kyc/KYCRegistry.js +0 -269
- package/dist/cjs/sdk/market/kyc/index.js +0 -26
- package/dist/cjs/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +0 -244
- package/dist/cjs/sdk/market/kyc/securitize/constants.js +0 -28
- package/dist/cjs/sdk/market/kyc/securitize/index.js +0 -26
- package/dist/cjs/sdk/market/kyc/securitize/types.js +0 -16
- package/dist/cjs/sdk/market/kyc/types.js +0 -34
- package/dist/cjs/sdk/utils/viem/executeDelegatedMulticalls.js +0 -38
- package/dist/esm/abi/kyc/iDSRegistryService.js +0 -46
- package/dist/esm/abi/kyc/iDSToken.js +0 -47
- package/dist/esm/abi/kyc/iKYCCompressor.js +0 -172
- package/dist/esm/abi/kyc/iKYCFactory.js +0 -98
- package/dist/esm/abi/kyc/iKYCUnderlying.js +0 -377
- package/dist/esm/abi/kyc/iSecuritizeDegenNFT.js +0 -302
- package/dist/esm/abi/kyc/iSecuritizeKYCFactory.js +0 -295
- package/dist/esm/dev/CachedStateSubscriber.js +0 -54
- package/dist/esm/sdk/GearboxSDK.js +0 -689
- package/dist/esm/sdk/market/kyc/KYCRegistry.js +0 -253
- package/dist/esm/sdk/market/kyc/index.js +0 -3
- package/dist/esm/sdk/market/kyc/securitize/SecuritizeKYCFactory.js +0 -220
- package/dist/esm/sdk/market/kyc/securitize/constants.js +0 -4
- package/dist/esm/sdk/market/kyc/securitize/index.js +0 -3
- package/dist/esm/sdk/market/kyc/securitize/types.js +0 -0
- package/dist/esm/sdk/market/kyc/types.js +0 -9
- package/dist/esm/sdk/utils/viem/executeDelegatedMulticalls.js +0 -14
- package/dist/types/abi/kyc/iDSRegistryService.d.ts +0 -71
- package/dist/types/abi/kyc/iDSToken.d.ts +0 -67
- package/dist/types/abi/kyc/iKYCCompressor.d.ts +0 -228
- package/dist/types/abi/kyc/iKYCFactory.d.ts +0 -139
- package/dist/types/abi/kyc/iKYCUnderlying.d.ts +0 -548
- package/dist/types/abi/kyc/iSecuritizeDegenNFT.d.ts +0 -404
- package/dist/types/abi/kyc/iSecuritizeKYCFactory.d.ts +0 -376
- package/dist/types/dev/CachedStateSubscriber.d.ts +0 -21
- package/dist/types/sdk/GearboxSDK.d.ts +0 -324
- package/dist/types/sdk/market/kyc/KYCRegistry.d.ts +0 -52
- package/dist/types/sdk/market/kyc/index.d.ts +0 -3
- package/dist/types/sdk/market/kyc/securitize/SecuritizeKYCFactory.d.ts +0 -428
- package/dist/types/sdk/market/kyc/securitize/constants.d.ts +0 -1
- package/dist/types/sdk/market/kyc/securitize/index.d.ts +0 -3
- package/dist/types/sdk/market/kyc/securitize/types.d.ts +0 -127
- package/dist/types/sdk/market/kyc/types.d.ts +0 -170
- package/dist/types/sdk/utils/viem/executeDelegatedMulticalls.d.ts +0 -28
|
@@ -70,8 +70,14 @@ const revolverTransportConfigSchema = z.union([
|
|
|
70
70
|
})
|
|
71
71
|
]);
|
|
72
72
|
class NoAvailableTransportsError extends BaseError {
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
statuses;
|
|
74
|
+
constructor(statuses, cause) {
|
|
75
|
+
super("No available transports", {
|
|
76
|
+
cause,
|
|
77
|
+
metaMessages: statuses.length > 0 ? statuses.map((s) => `- ${s.id}: ${s.status}`) : ["No transports configured"],
|
|
78
|
+
name: "NoAvailableTransportsError"
|
|
79
|
+
});
|
|
80
|
+
this.statuses = statuses;
|
|
75
81
|
}
|
|
76
82
|
}
|
|
77
83
|
class RevolverTransport {
|
|
@@ -129,7 +135,7 @@ class RevolverTransport {
|
|
|
129
135
|
);
|
|
130
136
|
}
|
|
131
137
|
if (transports.length === 0) {
|
|
132
|
-
throw new NoAvailableTransportsError();
|
|
138
|
+
throw new NoAvailableTransportsError([]);
|
|
133
139
|
}
|
|
134
140
|
this.#isSingle = transports.length === 1;
|
|
135
141
|
const selectionStrategy = config.selectionStrategy ?? "simple";
|
|
@@ -180,7 +186,7 @@ class RevolverTransport {
|
|
|
180
186
|
}
|
|
181
187
|
} while (this.#selector.canRotate());
|
|
182
188
|
this.#requests.delete(r);
|
|
183
|
-
throw new NoAvailableTransportsError(error);
|
|
189
|
+
throw new NoAvailableTransportsError(this.#selector.statuses(), error);
|
|
184
190
|
};
|
|
185
191
|
get config() {
|
|
186
192
|
return {
|
package/dist/esm/dev/index.js
CHANGED
|
@@ -21,7 +21,9 @@ const RANGE_ERROR_PATTERNS = [
|
|
|
21
21
|
/eth_getLogs is limited to/i,
|
|
22
22
|
/eth_getLogs requests with up to/i,
|
|
23
23
|
/range is too large/i,
|
|
24
|
-
/exceeded max allowed range/i
|
|
24
|
+
/exceeded max allowed range/i,
|
|
25
|
+
// Encountered on DRPC: "query exceeds max results 20000, retry with the range …"
|
|
26
|
+
/exceeds max results/i
|
|
25
27
|
];
|
|
26
28
|
function isRangeError(error) {
|
|
27
29
|
const msg = errorMessage(error);
|
|
@@ -29,10 +31,17 @@ function isRangeError(error) {
|
|
|
29
31
|
}
|
|
30
32
|
const GENERIC_BLOCKS_RE = /(\d+)\s*block/i;
|
|
31
33
|
const ALCHEMY_RANGE_RE = /this block range should work: \[(0x[0-9a-fA-F]+),\s*(0x[0-9a-fA-F]+)\]/;
|
|
34
|
+
const DRPC_RANGE_RE = /retry with the range (\d+)-(\d+)/;
|
|
32
35
|
function parsePageSizeHint(error) {
|
|
33
36
|
const alchemy = tryAlchemyHint(error);
|
|
34
37
|
if (alchemy != null) return alchemy;
|
|
35
38
|
const msg = errorMessage(error);
|
|
39
|
+
const drpc = msg.match(DRPC_RANGE_RE);
|
|
40
|
+
if (drpc) {
|
|
41
|
+
const from = Number(drpc[1]);
|
|
42
|
+
const to = Number(drpc[2]);
|
|
43
|
+
return to - from + 1;
|
|
44
|
+
}
|
|
36
45
|
const m = msg.match(GENERIC_BLOCKS_RE);
|
|
37
46
|
return m ? Number(m[1]) : null;
|
|
38
47
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { formatAbiItem } from "abitype";
|
|
2
1
|
import {
|
|
3
2
|
getCreate2Address,
|
|
4
3
|
stringToHex
|
|
5
4
|
} from "viem";
|
|
5
|
+
import { formatAbiItem } from "viem/utils";
|
|
6
6
|
const PUBLIC_CREATE2_FACTORY = "0x4e59b44847b379578588920ca78fbf26c0b4956c";
|
|
7
7
|
function handleSalt(salt) {
|
|
8
8
|
if (salt.slice(0, 2) !== "0x" || salt.length !== 66) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AP_PRICE_FEED_COMPRESSOR,
|
|
3
|
-
|
|
3
|
+
OnchainSDK
|
|
4
4
|
} from "../../../sdk/index.js";
|
|
5
5
|
import { AddressProviderContract } from "../../bindings/index.js";
|
|
6
6
|
import { Addresses } from "../../deployment/addresses.js";
|
|
@@ -47,11 +47,17 @@ async function getCallsTouchedUpdatablePriceFeeds({
|
|
|
47
47
|
AP_PRICE_FEED_COMPRESSOR,
|
|
48
48
|
310n
|
|
49
49
|
);
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
50
|
+
const gearboxClient = client;
|
|
51
|
+
const chain = gearboxClient.chain;
|
|
52
|
+
if (!chain) {
|
|
53
|
+
throw new Error("Chain not defined on client");
|
|
54
|
+
}
|
|
55
|
+
const sdk = new OnchainSDK(
|
|
56
|
+
chain.network,
|
|
57
|
+
{ client: gearboxClient },
|
|
58
|
+
{ gasLimit }
|
|
59
|
+
);
|
|
60
|
+
await sdk.attach({ marketConfigurators: [] });
|
|
55
61
|
const touchedFeeds = parsedCalls.flatMap(
|
|
56
62
|
(call) => getCallTouchedPriceFeeds(call)
|
|
57
63
|
);
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
} from "viem";
|
|
4
4
|
import {
|
|
5
5
|
createRawTx,
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
getRawPriceUpdates,
|
|
7
|
+
OnchainSDK
|
|
8
8
|
} from "../../../sdk/index.js";
|
|
9
9
|
import { PriceFeedStoreContract } from "../../bindings/index.js";
|
|
10
10
|
import { Addresses } from "../../deployment/addresses.js";
|
|
@@ -18,11 +18,17 @@ async function getPriceUpdateTx({
|
|
|
18
18
|
Addresses.PRICE_FEED_STORE,
|
|
19
19
|
client
|
|
20
20
|
);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
21
|
+
const gearboxClient = client;
|
|
22
|
+
const chain = gearboxClient.chain;
|
|
23
|
+
if (!chain) {
|
|
24
|
+
throw new Error("Chain not defined on client");
|
|
25
|
+
}
|
|
26
|
+
const sdk = new OnchainSDK(
|
|
27
|
+
chain.network,
|
|
28
|
+
{ client: gearboxClient },
|
|
29
|
+
{ gasLimit }
|
|
30
|
+
);
|
|
31
|
+
await sdk.attach({ marketConfigurators: [] });
|
|
26
32
|
const updateTxs = await sdk.priceFeeds.generateExternalPriceFeedsUpdateTxs(priceFeeds);
|
|
27
33
|
if (useMulticall3) {
|
|
28
34
|
const multicallCalls = updateTxs.txs.map((tx) => ({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
multicall3Abi
|
|
3
3
|
} from "viem";
|
|
4
|
-
import {
|
|
4
|
+
import { OnchainSDK, simulateMulticall } from "../../../sdk/index.js";
|
|
5
5
|
const latestRoundDataAbi = [
|
|
6
6
|
{
|
|
7
7
|
inputs: [],
|
|
@@ -80,12 +80,18 @@ async function getPrices({
|
|
|
80
80
|
if (!client.chain) {
|
|
81
81
|
throw new Error("Chain not defined");
|
|
82
82
|
}
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
const gearboxClient = client;
|
|
84
|
+
const chain = gearboxClient.chain;
|
|
85
|
+
if (!chain) {
|
|
86
|
+
throw new Error("Chain not defined on client");
|
|
87
|
+
}
|
|
88
|
+
const sdk = new OnchainSDK(
|
|
89
|
+
chain.network,
|
|
90
|
+
{ client: gearboxClient },
|
|
91
|
+
{ gasLimit }
|
|
92
|
+
);
|
|
93
|
+
await sdk.attach({
|
|
94
|
+
marketConfigurators: []
|
|
89
95
|
});
|
|
90
96
|
const chunks = [];
|
|
91
97
|
for (let i = 0; i < priceFeeds.length; i += chunkSize) {
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { getNetworkType } from "./chain/chains.js";
|
|
2
|
+
import {
|
|
3
|
+
SdkMissingChainStateError,
|
|
4
|
+
SdkStateVersionMismatchError,
|
|
5
|
+
SdkSyncFailedError
|
|
6
|
+
} from "./core/index.js";
|
|
7
|
+
import {
|
|
8
|
+
PriceUpdatesCache
|
|
9
|
+
} from "./market/pricefeeds/updates/index.js";
|
|
10
|
+
import {
|
|
11
|
+
OnchainSDK,
|
|
12
|
+
STATE_VERSION
|
|
13
|
+
} from "./OnchainSDK.js";
|
|
14
|
+
class MultichainSDK {
|
|
15
|
+
#chains;
|
|
16
|
+
#redstoneCache;
|
|
17
|
+
#pythCache;
|
|
18
|
+
#logger;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.#chains = /* @__PURE__ */ new Map();
|
|
21
|
+
this.#logger = options.logger;
|
|
22
|
+
for (const [network, chainConfig] of Object.entries(options.chains)) {
|
|
23
|
+
const { gasLimit, ...clientOptions } = chainConfig;
|
|
24
|
+
let plugins;
|
|
25
|
+
if (options.plugins) {
|
|
26
|
+
plugins = Object.fromEntries(
|
|
27
|
+
Object.entries(options.plugins).map(([name, factory]) => [
|
|
28
|
+
name,
|
|
29
|
+
factory()
|
|
30
|
+
])
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
const sdkOptions = {
|
|
34
|
+
logger: options.logger?.child?.({ network }),
|
|
35
|
+
strictContractTypes: options.strictContractTypes,
|
|
36
|
+
gasLimit: gasLimit ?? options.gasLimit,
|
|
37
|
+
plugins
|
|
38
|
+
};
|
|
39
|
+
const sdk = new OnchainSDK(
|
|
40
|
+
network,
|
|
41
|
+
clientOptions,
|
|
42
|
+
sdkOptions
|
|
43
|
+
);
|
|
44
|
+
this.#chains.set(network, sdk);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Attach all configured chains in parallel.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Shared and per-chain attach options.
|
|
51
|
+
*/
|
|
52
|
+
async attach(options) {
|
|
53
|
+
if (options?.redstone) {
|
|
54
|
+
this.#redstoneCache = new PriceUpdatesCache({
|
|
55
|
+
ttl: options.redstone.cacheTTL ?? 225e3,
|
|
56
|
+
historical: !!options.redstone.historicTimestamp
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (options?.pyth) {
|
|
60
|
+
this.#pythCache = new PriceUpdatesCache({
|
|
61
|
+
ttl: options.pyth.cacheTTL ?? 225e3,
|
|
62
|
+
historical: !!options.pyth.historicTimestamp
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
await Promise.all(
|
|
66
|
+
[...this.#chains.entries()].map(([network, sdk]) => {
|
|
67
|
+
const perChainOpts = options?.perChain?.[network] ?? {};
|
|
68
|
+
return sdk.attach({
|
|
69
|
+
...perChainOpts,
|
|
70
|
+
redstone: {
|
|
71
|
+
...options?.redstone,
|
|
72
|
+
cache: this.#redstoneCache,
|
|
73
|
+
...perChainOpts.redstone
|
|
74
|
+
},
|
|
75
|
+
pyth: {
|
|
76
|
+
...options?.pyth,
|
|
77
|
+
cache: this.#pythCache,
|
|
78
|
+
...perChainOpts.pyth
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
this.#logger?.info("Attached all chains");
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Hydrate all configured chains from serialised state.
|
|
87
|
+
*
|
|
88
|
+
* @param state - Multichain serialised state.
|
|
89
|
+
* @param options - Shared and per-chain hydrate options.
|
|
90
|
+
* @throws {@link SdkStateVersionMismatchError} if version doesn't match.
|
|
91
|
+
* @throws {@link SdkMissingChainStateError} if a configured chain has no
|
|
92
|
+
* state and `allowMissingChains` is not set.
|
|
93
|
+
*/
|
|
94
|
+
hydrate(state, options) {
|
|
95
|
+
if (state.version !== STATE_VERSION) {
|
|
96
|
+
throw new SdkStateVersionMismatchError(STATE_VERSION, state.version);
|
|
97
|
+
}
|
|
98
|
+
if (options?.redstone) {
|
|
99
|
+
this.#redstoneCache = new PriceUpdatesCache({
|
|
100
|
+
ttl: options.redstone.cacheTTL ?? 225e3,
|
|
101
|
+
historical: !!options.redstone.historicTimestamp
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (options?.pyth) {
|
|
105
|
+
this.#pythCache = new PriceUpdatesCache({
|
|
106
|
+
ttl: options.pyth.cacheTTL ?? 225e3,
|
|
107
|
+
historical: !!options.pyth.historicTimestamp
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const stateByNetwork = new Map(state.chains.map((cs) => [cs.network, cs]));
|
|
111
|
+
for (const [network, sdk] of this.#chains) {
|
|
112
|
+
const chainState = stateByNetwork.get(network);
|
|
113
|
+
if (!chainState) {
|
|
114
|
+
if (options?.allowMissingChains) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
throw new SdkMissingChainStateError(network);
|
|
118
|
+
}
|
|
119
|
+
const perChainOpts = options?.perChain?.[network] ?? {};
|
|
120
|
+
sdk.hydrate(chainState, {
|
|
121
|
+
...perChainOpts,
|
|
122
|
+
redstone: {
|
|
123
|
+
...options?.redstone,
|
|
124
|
+
cache: this.#redstoneCache,
|
|
125
|
+
...perChainOpts.redstone
|
|
126
|
+
},
|
|
127
|
+
pyth: {
|
|
128
|
+
...options?.pyth,
|
|
129
|
+
cache: this.#pythCache,
|
|
130
|
+
...perChainOpts.pyth
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
this.#logger?.info("Hydrated all chains");
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Returns the {@link OnchainSDK} for a given network or chain ID.
|
|
138
|
+
*
|
|
139
|
+
* @param networkOrChainId - Network type string or numeric chain ID.
|
|
140
|
+
* @throws If the network/chain is not configured.
|
|
141
|
+
*/
|
|
142
|
+
chain(networkOrChainId) {
|
|
143
|
+
let network;
|
|
144
|
+
if (typeof networkOrChainId === "number") {
|
|
145
|
+
network = getNetworkType(networkOrChainId);
|
|
146
|
+
} else {
|
|
147
|
+
network = networkOrChainId;
|
|
148
|
+
}
|
|
149
|
+
const sdk = this.#chains.get(network);
|
|
150
|
+
if (!sdk) {
|
|
151
|
+
throw new Error(
|
|
152
|
+
`Chain ${String(networkOrChainId)} is not configured in this MultichainSDK`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
return sdk;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Read-only map of all configured chains.
|
|
159
|
+
**/
|
|
160
|
+
get chains() {
|
|
161
|
+
return this.#chains;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Sync state for all chains in parallel.
|
|
165
|
+
*
|
|
166
|
+
* @param opts - Sync options.
|
|
167
|
+
* @throws {@link SdkSyncFailedError} if any chain fails.
|
|
168
|
+
*/
|
|
169
|
+
async syncState(opts) {
|
|
170
|
+
const errors = {};
|
|
171
|
+
const results = await Promise.allSettled(
|
|
172
|
+
[...this.#chains.entries()].map(async ([_network, sdk]) => {
|
|
173
|
+
const block = await sdk.client.getBlock({ blockTag: "latest" });
|
|
174
|
+
const synced = await sdk.syncState({
|
|
175
|
+
blockNumber: block.number,
|
|
176
|
+
timestamp: block.timestamp,
|
|
177
|
+
ignoreUpdateablePrices: opts?.ignoreUpdateablePrices
|
|
178
|
+
});
|
|
179
|
+
if (!synced) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
);
|
|
184
|
+
for (const [i, result] of results.entries()) {
|
|
185
|
+
if (result.status === "rejected") {
|
|
186
|
+
const network = [...this.#chains.keys()][i];
|
|
187
|
+
errors[network] = result.reason;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (Object.keys(errors).length > 0) {
|
|
191
|
+
throw new SdkSyncFailedError(errors);
|
|
192
|
+
}
|
|
193
|
+
this.#logger?.info("Synced state for all chains");
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Serialisable snapshot of all chains' state.
|
|
197
|
+
**/
|
|
198
|
+
get state() {
|
|
199
|
+
return {
|
|
200
|
+
version: STATE_VERSION,
|
|
201
|
+
chains: [...this.#chains.values()].map((sdk) => sdk.state)
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Human-readable snapshot of all chains' state.
|
|
206
|
+
* @param raw - When `true`, include raw numeric values.
|
|
207
|
+
*/
|
|
208
|
+
stateHuman(raw) {
|
|
209
|
+
return {
|
|
210
|
+
version: STATE_VERSION,
|
|
211
|
+
chains: [...this.#chains.values()].map((sdk) => sdk.stateHuman(raw))
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
export {
|
|
216
|
+
MultichainSDK
|
|
217
|
+
};
|