@across-protocol/sdk 4.3.110 → 4.3.111-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/addressAggregator/adapters/abstract.js +50 -64
- package/dist/cjs/addressAggregator/adapters/abstract.js.map +1 -1
- package/dist/cjs/addressAggregator/adapters/bybit.js +16 -29
- package/dist/cjs/addressAggregator/adapters/bybit.js.map +1 -1
- package/dist/cjs/addressAggregator/adapters/env.js +11 -15
- package/dist/cjs/addressAggregator/adapters/env.js.map +1 -1
- package/dist/cjs/addressAggregator/adapters/file.js +32 -45
- package/dist/cjs/addressAggregator/adapters/file.js.map +1 -1
- package/dist/cjs/addressAggregator/adapters/index.js +1 -1
- package/dist/cjs/addressAggregator/adapters/risklabs.js +22 -36
- package/dist/cjs/addressAggregator/adapters/risklabs.js.map +1 -1
- package/dist/cjs/addressAggregator/index.js +57 -87
- package/dist/cjs/addressAggregator/index.js.map +1 -1
- package/dist/cjs/apiClient/abstractClient.js +9 -8
- package/dist/cjs/apiClient/abstractClient.js.map +1 -1
- package/dist/cjs/apiClient/index.js +1 -1
- package/dist/cjs/apiClient/mockedClient.js +23 -29
- package/dist/cjs/apiClient/mockedClient.js.map +1 -1
- package/dist/cjs/apiClient/productionClient.js +65 -103
- package/dist/cjs/apiClient/productionClient.js.map +1 -1
- package/dist/cjs/arch/evm/BlockUtils.js +122 -208
- package/dist/cjs/arch/evm/BlockUtils.js.map +1 -1
- package/dist/cjs/arch/evm/MessageUtils.js +1 -1
- package/dist/cjs/arch/evm/MessageUtils.js.map +1 -1
- package/dist/cjs/arch/evm/SpokeUtils.js +134 -288
- package/dist/cjs/arch/evm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/evm/index.js +1 -1
- package/dist/cjs/arch/evm/utils/index.js +1 -1
- package/dist/cjs/arch/evm/utils/wait.js +38 -49
- package/dist/cjs/arch/evm/utils/wait.js.map +1 -1
- package/dist/cjs/arch/index.js +1 -1
- package/dist/cjs/arch/svm/BlockUtils.js +102 -158
- package/dist/cjs/arch/svm/BlockUtils.js.map +1 -1
- package/dist/cjs/arch/svm/MessageUtils.js +2 -2
- package/dist/cjs/arch/svm/MessageUtils.js.map +1 -1
- package/dist/cjs/arch/svm/SpokeUtils.js +708 -1147
- package/dist/cjs/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/svm/encoders.js +1 -1
- package/dist/cjs/arch/svm/encoders.js.map +1 -1
- package/dist/cjs/arch/svm/eventsClient.js +174 -236
- package/dist/cjs/arch/svm/eventsClient.js.map +1 -1
- package/dist/cjs/arch/svm/index.js +1 -1
- package/dist/cjs/arch/svm/provider.js +3 -3
- package/dist/cjs/arch/svm/provider.js.map +1 -1
- package/dist/cjs/arch/svm/utils.js +166 -355
- package/dist/cjs/arch/svm/utils.js.map +1 -1
- package/dist/cjs/caching/Arweave/ArweaveClient.js +168 -246
- package/dist/cjs/caching/Arweave/ArweaveClient.js.map +1 -1
- package/dist/cjs/caching/Arweave/index.js +1 -1
- package/dist/cjs/caching/IPFS/PinataIPFSClient.js +40 -49
- package/dist/cjs/caching/IPFS/PinataIPFSClient.js.map +1 -1
- package/dist/cjs/caching/IPFS/index.js +1 -1
- package/dist/cjs/caching/Memory/MemoryCacheClient.js +13 -18
- package/dist/cjs/caching/Memory/MemoryCacheClient.js.map +1 -1
- package/dist/cjs/caching/Memory/index.js +1 -1
- package/dist/cjs/caching/index.js +1 -1
- package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +302 -381
- package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
- package/dist/cjs/clients/AcrossConfigStoreClient/index.js +1 -1
- package/dist/cjs/clients/BaseAbstractClient.js +58 -83
- package/dist/cjs/clients/BaseAbstractClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js +709 -900
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/index.js +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/DataworkerUtils.js +95 -128
- package/dist/cjs/clients/BundleDataClient/utils/DataworkerUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/FillUtils.js +48 -53
- package/dist/cjs/clients/BundleDataClient/utils/FillUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/MerkleTreeUtils.js +10 -8
- package/dist/cjs/clients/BundleDataClient/utils/MerkleTreeUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js +67 -90
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/SuperstructUtils.js +46 -24
- package/dist/cjs/clients/BundleDataClient/utils/SuperstructUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/index.js +1 -1
- package/dist/cjs/clients/HubPoolClient.js +526 -708
- package/dist/cjs/clients/HubPoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js +133 -179
- package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js +124 -183
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js +357 -389
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClientManager.js +9 -8
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClientManager.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/index.js +3 -3
- package/dist/cjs/clients/SpokePoolClient/index.js.map +1 -1
- package/dist/cjs/clients/index.js +1 -1
- package/dist/cjs/clients/mocks/MockConfigStoreClient.js +58 -67
- package/dist/cjs/clients/mocks/MockConfigStoreClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockEvents.js +47 -52
- package/dist/cjs/clients/mocks/MockEvents.js.map +1 -1
- package/dist/cjs/clients/mocks/MockHubPoolClient.js +142 -185
- package/dist/cjs/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js +208 -192
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js +140 -143
- package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js +57 -73
- package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/index.js +1 -1
- package/dist/cjs/coingecko/Coingecko.js +285 -437
- package/dist/cjs/coingecko/Coingecko.js.map +1 -1
- package/dist/cjs/coingecko/index.js +1 -1
- package/dist/cjs/constants.js +23 -29
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/acrossConfigStore.js +27 -48
- package/dist/cjs/contracts/acrossConfigStore.js.map +1 -1
- package/dist/cjs/contracts/hubPool.js +36 -20
- package/dist/cjs/contracts/hubPool.js.map +1 -1
- package/dist/cjs/contracts/index.js +1 -1
- package/dist/cjs/contracts/utils.js +6 -8
- package/dist/cjs/contracts/utils.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/arbitrum.js +7 -16
- package/dist/cjs/gasPriceOracle/adapters/arbitrum.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/ethereum.js +26 -45
- package/dist/cjs/gasPriceOracle/adapters/ethereum.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/linea-viem.js +16 -28
- package/dist/cjs/gasPriceOracle/adapters/linea-viem.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/polygon.js +73 -112
- package/dist/cjs/gasPriceOracle/adapters/polygon.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/solana.js +20 -33
- package/dist/cjs/gasPriceOracle/adapters/solana.js.map +1 -1
- package/dist/cjs/gasPriceOracle/oracle.js +77 -103
- package/dist/cjs/gasPriceOracle/oracle.js.map +1 -1
- package/dist/cjs/gasPriceOracle/types.js +3 -3
- package/dist/cjs/gasPriceOracle/types.js.map +1 -1
- package/dist/cjs/gasPriceOracle/util.js +8 -8
- package/dist/cjs/gasPriceOracle/util.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/interfaces/index.js +1 -1
- package/dist/cjs/lpFeeCalculator/index.js +1 -1
- package/dist/cjs/lpFeeCalculator/lpFeeCalculator.js +33 -35
- package/dist/cjs/lpFeeCalculator/lpFeeCalculator.js.map +1 -1
- package/dist/cjs/lpFeeCalculator/rateModel.js +7 -9
- package/dist/cjs/lpFeeCalculator/rateModel.js.map +1 -1
- package/dist/cjs/merkleDistributor/MerkleDistributor.js +20 -18
- package/dist/cjs/merkleDistributor/MerkleDistributor.js.map +1 -1
- package/dist/cjs/merkleDistributor/index.js +1 -1
- package/dist/cjs/merkleDistributor/model/index.js +1 -1
- package/dist/cjs/pool/TransactionManager.js +45 -100
- package/dist/cjs/pool/TransactionManager.js.map +1 -1
- package/dist/cjs/pool/index.js +1 -1
- package/dist/cjs/pool/poolClient.js +464 -731
- package/dist/cjs/pool/poolClient.js.map +1 -1
- package/dist/cjs/pool/uma/across/index.js +1 -1
- package/dist/cjs/pool/uma/across/transactionManager.js +45 -100
- package/dist/cjs/pool/uma/across/transactionManager.js.map +1 -1
- package/dist/cjs/pool/uma/clients/erc20/client.js +18 -16
- package/dist/cjs/pool/uma/clients/erc20/client.js.map +1 -1
- package/dist/cjs/pool/uma/clients/erc20/index.js +1 -1
- package/dist/cjs/pool/uma/clients/index.js +1 -1
- package/dist/cjs/pool/uma/index.js +1 -1
- package/dist/cjs/pool/uma/oracle/index.js +1 -1
- package/dist/cjs/pool/uma/oracle/utils.js +4 -5
- package/dist/cjs/pool/uma/oracle/utils.js.map +1 -1
- package/dist/cjs/pool/uma/utils.js +11 -30
- package/dist/cjs/pool/uma/utils.js.map +1 -1
- package/dist/cjs/priceClient/adapters/acrossApi.js +22 -39
- package/dist/cjs/priceClient/adapters/acrossApi.js.map +1 -1
- package/dist/cjs/priceClient/adapters/baseAdapter.js +49 -73
- package/dist/cjs/priceClient/adapters/baseAdapter.js.map +1 -1
- package/dist/cjs/priceClient/adapters/coingecko.js +34 -61
- package/dist/cjs/priceClient/adapters/coingecko.js.map +1 -1
- package/dist/cjs/priceClient/adapters/default.js +16 -31
- package/dist/cjs/priceClient/adapters/default.js.map +1 -1
- package/dist/cjs/priceClient/adapters/defiLlama.js +40 -74
- package/dist/cjs/priceClient/adapters/defiLlama.js.map +1 -1
- package/dist/cjs/priceClient/adapters/index.js +1 -1
- package/dist/cjs/priceClient/index.js +1 -1
- package/dist/cjs/priceClient/priceClient.js +110 -159
- package/dist/cjs/priceClient/priceClient.js.map +1 -1
- package/dist/cjs/providers/alchemy.js +17 -19
- package/dist/cjs/providers/alchemy.js.map +1 -1
- package/dist/cjs/providers/cachedProvider.js +88 -129
- package/dist/cjs/providers/cachedProvider.js.map +1 -1
- package/dist/cjs/providers/drpc.js +9 -11
- package/dist/cjs/providers/drpc.js.map +1 -1
- package/dist/cjs/providers/index.js +1 -1
- package/dist/cjs/providers/infura.js +10 -12
- package/dist/cjs/providers/infura.js.map +1 -1
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js +7 -15
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js +6 -14
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/MockRetrySolanaRpcFactory.js +7 -15
- package/dist/cjs/providers/mocks/MockRetrySolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js +42 -66
- package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js.map +1 -1
- package/dist/cjs/providers/mocks/index.js +1 -1
- package/dist/cjs/providers/mocks/mockEthersProvider.js +29 -31
- package/dist/cjs/providers/mocks/mockEthersProvider.js.map +1 -1
- package/dist/cjs/providers/quicknode.js +19 -21
- package/dist/cjs/providers/quicknode.js.map +1 -1
- package/dist/cjs/providers/rateLimitedProvider.js +64 -79
- package/dist/cjs/providers/rateLimitedProvider.js.map +1 -1
- package/dist/cjs/providers/retryProvider.js +163 -246
- package/dist/cjs/providers/retryProvider.js.map +1 -1
- package/dist/cjs/providers/solana/baseRpcFactories.js +14 -18
- package/dist/cjs/providers/solana/baseRpcFactories.js.map +1 -1
- package/dist/cjs/providers/solana/cachedRpcFactory.js +70 -112
- package/dist/cjs/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/defaultRpcFactory.js +8 -15
- package/dist/cjs/providers/solana/defaultRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/index.js +1 -1
- package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js +135 -191
- package/dist/cjs/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/rateLimitedRpcFactory.js +67 -90
- package/dist/cjs/providers/solana/rateLimitedRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/retryRpcFactory.js +52 -79
- package/dist/cjs/providers/solana/retryRpcFactory.js.map +1 -1
- package/dist/cjs/providers/solana/utils.js +2 -2
- package/dist/cjs/providers/solana/utils.js.map +1 -1
- package/dist/cjs/providers/speedProvider.js +31 -53
- package/dist/cjs/providers/speedProvider.js.map +1 -1
- package/dist/cjs/providers/types.js +1 -1
- package/dist/cjs/providers/types.js.map +1 -1
- package/dist/cjs/providers/utils.js +26 -28
- package/dist/cjs/providers/utils.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js +108 -162
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/customGasToken.js +14 -26
- package/dist/cjs/relayFeeCalculator/chain-queries/customGasToken.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/factory.js +20 -29
- package/dist/cjs/relayFeeCalculator/chain-queries/factory.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/index.js +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js +88 -137
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/index.js +1 -1
- package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js +199 -297
- package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
- package/dist/cjs/typeguards/error.js +5 -7
- package/dist/cjs/typeguards/error.js.map +1 -1
- package/dist/cjs/typeguards/index.js +1 -1
- package/dist/cjs/utils/AddressUtils.js +117 -144
- package/dist/cjs/utils/AddressUtils.js.map +1 -1
- package/dist/cjs/utils/ArrayUtils.js +21 -78
- package/dist/cjs/utils/ArrayUtils.js.map +1 -1
- package/dist/cjs/utils/BigNumberUtils.js +9 -10
- package/dist/cjs/utils/BigNumberUtils.js.map +1 -1
- package/dist/cjs/utils/BlockExplorerUtils.js +26 -30
- package/dist/cjs/utils/BlockExplorerUtils.js.map +1 -1
- package/dist/cjs/utils/BlockFinder.js +2 -5
- package/dist/cjs/utils/BlockFinder.js.map +1 -1
- package/dist/cjs/utils/BlockUtils.js +24 -41
- package/dist/cjs/utils/BlockUtils.js.map +1 -1
- package/dist/cjs/utils/BundleUtils.js +21 -24
- package/dist/cjs/utils/BundleUtils.js.map +1 -1
- package/dist/cjs/utils/CCTPUtils.js +62 -126
- package/dist/cjs/utils/CCTPUtils.js.map +1 -1
- package/dist/cjs/utils/CachingUtils.js +20 -42
- package/dist/cjs/utils/CachingUtils.js.map +1 -1
- package/dist/cjs/utils/ContractUtils.js +5 -5
- package/dist/cjs/utils/ContractUtils.js.map +1 -1
- package/dist/cjs/utils/DepositUtils.js +122 -99
- package/dist/cjs/utils/DepositUtils.js.map +1 -1
- package/dist/cjs/utils/EventUtils.js +49 -70
- package/dist/cjs/utils/EventUtils.js.map +1 -1
- package/dist/cjs/utils/FormattingUtils.js +26 -32
- package/dist/cjs/utils/FormattingUtils.js.map +1 -1
- package/dist/cjs/utils/HyperLiquidUtils.js +10 -23
- package/dist/cjs/utils/HyperLiquidUtils.js.map +1 -1
- package/dist/cjs/utils/IPFSUtils.js +16 -34
- package/dist/cjs/utils/IPFSUtils.js.map +1 -1
- package/dist/cjs/utils/JSONUtils.js +6 -6
- package/dist/cjs/utils/JSONUtils.js.map +1 -1
- package/dist/cjs/utils/LogUtils.js +10 -12
- package/dist/cjs/utils/LogUtils.js.map +1 -1
- package/dist/cjs/utils/Multicall.js +56 -114
- package/dist/cjs/utils/Multicall.js.map +1 -1
- package/dist/cjs/utils/NetworkUtils.js +12 -21
- package/dist/cjs/utils/NetworkUtils.js.map +1 -1
- package/dist/cjs/utils/NumberUtils.js +1 -3
- package/dist/cjs/utils/NumberUtils.js.map +1 -1
- package/dist/cjs/utils/ObjectUtils.js +27 -41
- package/dist/cjs/utils/ObjectUtils.js.map +1 -1
- package/dist/cjs/utils/Profiler.js +80 -83
- package/dist/cjs/utils/Profiler.js.map +1 -1
- package/dist/cjs/utils/ReviverUtils.js +5 -9
- package/dist/cjs/utils/ReviverUtils.js.map +1 -1
- package/dist/cjs/utils/SpokeUtils.js +84 -84
- package/dist/cjs/utils/SpokeUtils.js.map +1 -1
- package/dist/cjs/utils/TokenUtils.js +41 -64
- package/dist/cjs/utils/TokenUtils.js.map +1 -1
- package/dist/cjs/utils/TypeGuards.js +1 -1
- package/dist/cjs/utils/TypeGuards.js.map +1 -1
- package/dist/cjs/utils/ValidatorUtils.js +7 -7
- package/dist/cjs/utils/ValidatorUtils.js.map +1 -1
- package/dist/cjs/utils/abi/contracts/index.js +1 -1
- package/dist/cjs/utils/abi/index.js +12 -22
- package/dist/cjs/utils/abi/index.js.map +1 -1
- package/dist/cjs/utils/abi/typechain/factories/Multicall3__factory.js +9 -12
- package/dist/cjs/utils/abi/typechain/factories/Multicall3__factory.js.map +1 -1
- package/dist/cjs/utils/abi/typechain/index.js +1 -1
- package/dist/cjs/utils/common.js +40 -53
- package/dist/cjs/utils/common.js.map +1 -1
- package/dist/cjs/utils/index.js +1 -1
- package/dist/esm/addressAggregator/adapters/abstract.js +48 -64
- package/dist/esm/addressAggregator/adapters/abstract.js.map +1 -1
- package/dist/esm/addressAggregator/adapters/bybit.js +15 -29
- package/dist/esm/addressAggregator/adapters/bybit.js.map +1 -1
- package/dist/esm/addressAggregator/adapters/env.js +9 -14
- package/dist/esm/addressAggregator/adapters/env.js.map +1 -1
- package/dist/esm/addressAggregator/adapters/file.js +29 -43
- package/dist/esm/addressAggregator/adapters/file.js.map +1 -1
- package/dist/esm/addressAggregator/adapters/risklabs.js +20 -35
- package/dist/esm/addressAggregator/adapters/risklabs.js.map +1 -1
- package/dist/esm/addressAggregator/index.js +52 -83
- package/dist/esm/addressAggregator/index.js.map +1 -1
- package/dist/esm/addressAggregator/types.js +1 -1
- package/dist/esm/addressAggregator/types.js.map +1 -1
- package/dist/esm/apiClient/abstractClient.js +15 -9
- package/dist/esm/apiClient/abstractClient.js.map +1 -1
- package/dist/esm/apiClient/mockedClient.js +21 -26
- package/dist/esm/apiClient/mockedClient.js.map +1 -1
- package/dist/esm/apiClient/productionClient.js +61 -101
- package/dist/esm/apiClient/productionClient.js.map +1 -1
- package/dist/esm/arch/evm/BlockUtils.js +139 -217
- package/dist/esm/arch/evm/BlockUtils.js.map +1 -1
- package/dist/esm/arch/evm/SpokeUtils.js +146 -289
- package/dist/esm/arch/evm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/evm/utils/wait.js +34 -46
- package/dist/esm/arch/evm/utils/wait.js.map +1 -1
- package/dist/esm/arch/svm/BlockUtils.js +118 -166
- package/dist/esm/arch/svm/BlockUtils.js.map +1 -1
- package/dist/esm/arch/svm/SpokeUtils.js +738 -1150
- package/dist/esm/arch/svm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/svm/constants.js +1 -1
- package/dist/esm/arch/svm/constants.js.map +1 -1
- package/dist/esm/arch/svm/eventsClient.js +172 -232
- package/dist/esm/arch/svm/eventsClient.js.map +1 -1
- package/dist/esm/arch/svm/provider.js +1 -1
- package/dist/esm/arch/svm/provider.js.map +1 -1
- package/dist/esm/arch/svm/utils.js +155 -345
- package/dist/esm/arch/svm/utils.js.map +1 -1
- package/dist/esm/caching/Arweave/ArweaveClient.js +182 -256
- package/dist/esm/caching/Arweave/ArweaveClient.js.map +1 -1
- package/dist/esm/caching/IPFS/PinataIPFSClient.js +47 -48
- package/dist/esm/caching/IPFS/PinataIPFSClient.js.map +1 -1
- package/dist/esm/caching/Memory/MemoryCacheClient.js +13 -19
- package/dist/esm/caching/Memory/MemoryCacheClient.js.map +1 -1
- package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +333 -408
- package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
- package/dist/esm/clients/BaseAbstractClient.js +66 -92
- package/dist/esm/clients/BaseAbstractClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js +927 -1054
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/DataworkerUtils.js +102 -131
- package/dist/esm/clients/BundleDataClient/utils/DataworkerUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/FillUtils.js +57 -59
- package/dist/esm/clients/BundleDataClient/utils/FillUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/MerkleTreeUtils.js +7 -5
- package/dist/esm/clients/BundleDataClient/utils/MerkleTreeUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js +75 -94
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/SuperstructUtils.js +45 -23
- package/dist/esm/clients/BundleDataClient/utils/SuperstructUtils.js.map +1 -1
- package/dist/esm/clients/HubPoolClient.js +581 -740
- package/dist/esm/clients/HubPoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js +133 -178
- package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js +126 -183
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js +372 -399
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SpokePoolClientManager.js +9 -9
- package/dist/esm/clients/SpokePoolClient/SpokePoolClientManager.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/index.js +2 -2
- package/dist/esm/clients/SpokePoolClient/index.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/types.js +2 -2
- package/dist/esm/clients/SpokePoolClient/types.js.map +1 -1
- package/dist/esm/clients/mocks/MockConfigStoreClient.js +53 -64
- package/dist/esm/clients/mocks/MockConfigStoreClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockEvents.js +42 -49
- package/dist/esm/clients/mocks/MockEvents.js.map +1 -1
- package/dist/esm/clients/mocks/MockHubPoolClient.js +138 -182
- package/dist/esm/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockSpokePoolClient.js +202 -188
- package/dist/esm/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js +127 -132
- package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js +53 -69
- package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js.map +1 -1
- package/dist/esm/coingecko/Coingecko.js +298 -443
- package/dist/esm/coingecko/Coingecko.js.map +1 -1
- package/dist/esm/constants.js +40 -46
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/acrossConfigStore.js +24 -46
- package/dist/esm/contracts/acrossConfigStore.js.map +1 -1
- package/dist/esm/contracts/hubPool.js +34 -18
- package/dist/esm/contracts/hubPool.js.map +1 -1
- package/dist/esm/contracts/utils.js +3 -5
- package/dist/esm/contracts/utils.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/arbitrum.js +6 -14
- package/dist/esm/gasPriceOracle/adapters/arbitrum.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/ethereum.js +22 -42
- package/dist/esm/gasPriceOracle/adapters/ethereum.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/linea-viem.js +13 -25
- package/dist/esm/gasPriceOracle/adapters/linea-viem.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/polygon.js +72 -108
- package/dist/esm/gasPriceOracle/adapters/polygon.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/solana.js +22 -31
- package/dist/esm/gasPriceOracle/adapters/solana.js.map +1 -1
- package/dist/esm/gasPriceOracle/oracle.js +70 -95
- package/dist/esm/gasPriceOracle/oracle.js.map +1 -1
- package/dist/esm/gasPriceOracle/types.js +2 -2
- package/dist/esm/gasPriceOracle/types.js.map +1 -1
- package/dist/esm/gasPriceOracle/util.js +4 -4
- package/dist/esm/gasPriceOracle/util.js.map +1 -1
- package/dist/esm/lpFeeCalculator/lpFeeCalculator.js +30 -33
- package/dist/esm/lpFeeCalculator/lpFeeCalculator.js.map +1 -1
- package/dist/esm/lpFeeCalculator/rateModel.js +7 -9
- package/dist/esm/lpFeeCalculator/rateModel.js.map +1 -1
- package/dist/esm/merkleDistributor/MerkleDistributor.js +18 -17
- package/dist/esm/merkleDistributor/MerkleDistributor.js.map +1 -1
- package/dist/esm/pool/TransactionManager.js +45 -100
- package/dist/esm/pool/TransactionManager.js.map +1 -1
- package/dist/esm/pool/poolClient.js +479 -740
- package/dist/esm/pool/poolClient.js.map +1 -1
- package/dist/esm/pool/uma/across/constants.js +2 -2
- package/dist/esm/pool/uma/across/constants.js.map +1 -1
- package/dist/esm/pool/uma/across/transactionManager.js +45 -100
- package/dist/esm/pool/uma/across/transactionManager.js.map +1 -1
- package/dist/esm/pool/uma/clients/erc20/client.js +15 -13
- package/dist/esm/pool/uma/clients/erc20/client.js.map +1 -1
- package/dist/esm/pool/uma/oracle/utils.js +2 -3
- package/dist/esm/pool/uma/oracle/utils.js.map +1 -1
- package/dist/esm/pool/uma/utils.js +9 -28
- package/dist/esm/pool/uma/utils.js.map +1 -1
- package/dist/esm/priceClient/adapters/acrossApi.js +21 -40
- package/dist/esm/priceClient/adapters/acrossApi.js.map +1 -1
- package/dist/esm/priceClient/adapters/baseAdapter.js +46 -72
- package/dist/esm/priceClient/adapters/baseAdapter.js.map +1 -1
- package/dist/esm/priceClient/adapters/coingecko.js +33 -61
- package/dist/esm/priceClient/adapters/coingecko.js.map +1 -1
- package/dist/esm/priceClient/adapters/default.js +15 -31
- package/dist/esm/priceClient/adapters/default.js.map +1 -1
- package/dist/esm/priceClient/adapters/defiLlama.js +38 -73
- package/dist/esm/priceClient/adapters/defiLlama.js.map +1 -1
- package/dist/esm/priceClient/priceClient.js +109 -158
- package/dist/esm/priceClient/priceClient.js.map +1 -1
- package/dist/esm/providers/alchemy.js +16 -18
- package/dist/esm/providers/alchemy.js.map +1 -1
- package/dist/esm/providers/cachedProvider.js +99 -134
- package/dist/esm/providers/cachedProvider.js.map +1 -1
- package/dist/esm/providers/constants.js +3 -3
- package/dist/esm/providers/constants.js.map +1 -1
- package/dist/esm/providers/drpc.js +8 -10
- package/dist/esm/providers/drpc.js.map +1 -1
- package/dist/esm/providers/infura.js +9 -11
- package/dist/esm/providers/infura.js.map +1 -1
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js +6 -15
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js +5 -14
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/MockRetrySolanaRpcFactory.js +6 -15
- package/dist/esm/providers/mocks/MockRetrySolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/MockSolanaRpcFactory.js +41 -66
- package/dist/esm/providers/mocks/MockSolanaRpcFactory.js.map +1 -1
- package/dist/esm/providers/mocks/mockEthersProvider.js +27 -30
- package/dist/esm/providers/mocks/mockEthersProvider.js.map +1 -1
- package/dist/esm/providers/quicknode.js +18 -20
- package/dist/esm/providers/quicknode.js.map +1 -1
- package/dist/esm/providers/rateLimitedProvider.js +68 -80
- package/dist/esm/providers/rateLimitedProvider.js.map +1 -1
- package/dist/esm/providers/retryProvider.js +186 -259
- package/dist/esm/providers/retryProvider.js.map +1 -1
- package/dist/esm/providers/solana/baseRpcFactories.js +13 -19
- package/dist/esm/providers/solana/baseRpcFactories.js.map +1 -1
- package/dist/esm/providers/solana/cachedRpcFactory.js +75 -112
- package/dist/esm/providers/solana/cachedRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/defaultRpcFactory.js +6 -14
- package/dist/esm/providers/solana/defaultRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/quorumFallbackRpcFactory.js +149 -202
- package/dist/esm/providers/solana/quorumFallbackRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/rateLimitedRpcFactory.js +70 -90
- package/dist/esm/providers/solana/rateLimitedRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/retryRpcFactory.js +50 -74
- package/dist/esm/providers/solana/retryRpcFactory.js.map +1 -1
- package/dist/esm/providers/solana/utils.js +1 -1
- package/dist/esm/providers/solana/utils.js.map +1 -1
- package/dist/esm/providers/speedProvider.js +28 -51
- package/dist/esm/providers/speedProvider.js.map +1 -1
- package/dist/esm/providers/types.js +2 -2
- package/dist/esm/providers/types.js.map +1 -1
- package/dist/esm/providers/utils.js +17 -20
- package/dist/esm/providers/utils.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js +98 -152
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/customGasToken.js +13 -26
- package/dist/esm/relayFeeCalculator/chain-queries/customGasToken.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/factory.js +9 -19
- package/dist/esm/relayFeeCalculator/chain-queries/factory.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js +83 -128
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js.map +1 -1
- package/dist/esm/relayFeeCalculator/relayFeeCalculator.js +211 -299
- package/dist/esm/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
- package/dist/esm/typeguards/error.js +3 -5
- package/dist/esm/typeguards/error.js.map +1 -1
- package/dist/esm/utils/AddressUtils.js +115 -147
- package/dist/esm/utils/AddressUtils.js.map +1 -1
- package/dist/esm/utils/ArrayUtils.js +21 -78
- package/dist/esm/utils/ArrayUtils.js.map +1 -1
- package/dist/esm/utils/BigNumberUtils.js +11 -12
- package/dist/esm/utils/BigNumberUtils.js.map +1 -1
- package/dist/esm/utils/BlockExplorerUtils.js +19 -23
- package/dist/esm/utils/BlockExplorerUtils.js.map +1 -1
- package/dist/esm/utils/BlockFinder.js +2 -6
- package/dist/esm/utils/BlockFinder.js.map +1 -1
- package/dist/esm/utils/BlockUtils.js +31 -40
- package/dist/esm/utils/BlockUtils.js.map +1 -1
- package/dist/esm/utils/BundleUtils.js +21 -24
- package/dist/esm/utils/BundleUtils.js.map +1 -1
- package/dist/esm/utils/CCTPUtils.js +62 -123
- package/dist/esm/utils/CCTPUtils.js.map +1 -1
- package/dist/esm/utils/CachingUtils.js +17 -38
- package/dist/esm/utils/CachingUtils.js.map +1 -1
- package/dist/esm/utils/ContractUtils.js +3 -3
- package/dist/esm/utils/ContractUtils.js.map +1 -1
- package/dist/esm/utils/DepositUtils.js +121 -98
- package/dist/esm/utils/DepositUtils.js.map +1 -1
- package/dist/esm/utils/EventUtils.js +52 -69
- package/dist/esm/utils/EventUtils.js.map +1 -1
- package/dist/esm/utils/FormattingUtils.js +20 -26
- package/dist/esm/utils/FormattingUtils.js.map +1 -1
- package/dist/esm/utils/HyperLiquidUtils.js +8 -22
- package/dist/esm/utils/HyperLiquidUtils.js.map +1 -1
- package/dist/esm/utils/IPFSUtils.js +16 -35
- package/dist/esm/utils/IPFSUtils.js.map +1 -1
- package/dist/esm/utils/JSONUtils.js +4 -4
- package/dist/esm/utils/JSONUtils.js.map +1 -1
- package/dist/esm/utils/LogUtils.js +8 -12
- package/dist/esm/utils/LogUtils.js.map +1 -1
- package/dist/esm/utils/Multicall.js +50 -109
- package/dist/esm/utils/Multicall.js.map +1 -1
- package/dist/esm/utils/NetworkUtils.js +12 -21
- package/dist/esm/utils/NetworkUtils.js.map +1 -1
- package/dist/esm/utils/NumberUtils.js +1 -3
- package/dist/esm/utils/NumberUtils.js.map +1 -1
- package/dist/esm/utils/ObjectUtils.js +27 -41
- package/dist/esm/utils/ObjectUtils.js.map +1 -1
- package/dist/esm/utils/Profiler.js +77 -82
- package/dist/esm/utils/Profiler.js.map +1 -1
- package/dist/esm/utils/ReviverUtils.js +3 -7
- package/dist/esm/utils/ReviverUtils.js.map +1 -1
- package/dist/esm/utils/SpokeUtils.js +83 -78
- package/dist/esm/utils/SpokeUtils.js.map +1 -1
- package/dist/esm/utils/TokenUtils.js +33 -57
- package/dist/esm/utils/TokenUtils.js.map +1 -1
- package/dist/esm/utils/ValidatorUtils.js +4 -4
- package/dist/esm/utils/ValidatorUtils.js.map +1 -1
- package/dist/esm/utils/abi/index.js +10 -20
- package/dist/esm/utils/abi/index.js.map +1 -1
- package/dist/esm/utils/abi/typechain/factories/Multicall3__factory.js +8 -12
- package/dist/esm/utils/abi/typechain/factories/Multicall3__factory.js.map +1 -1
- package/dist/esm/utils/common.js +38 -52
- package/dist/esm/utils/common.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
1
|
import _ from "lodash";
|
|
3
2
|
import assert from "assert";
|
|
4
3
|
import { providers } from "ethers";
|
|
@@ -11,23 +10,23 @@ import { isSlowFill, isValidEvmAddress, isDefined, chainIsEvm, toAddressType } f
|
|
|
11
10
|
* @return The chain to send the refund to and the token to use for the refund.
|
|
12
11
|
*/
|
|
13
12
|
export function getRefundInformationFromFill(relayData, hubPoolClient, bundleEndBlockForMainnet) {
|
|
14
|
-
|
|
13
|
+
const chainToSendRefundTo = _getRepaymentChainId(relayData, hubPoolClient, bundleEndBlockForMainnet);
|
|
15
14
|
if (chainToSendRefundTo === relayData.originChainId) {
|
|
16
15
|
return {
|
|
17
|
-
chainToSendRefundTo
|
|
16
|
+
chainToSendRefundTo,
|
|
18
17
|
repaymentToken: relayData.inputToken,
|
|
19
18
|
};
|
|
20
19
|
}
|
|
21
20
|
// Now figure out the equivalent L2 token for the repayment token. If the inputToken doesn't have a
|
|
22
21
|
// PoolRebalanceRoute, then the repayment chain would have been the originChainId after the getRepaymentChainId()
|
|
23
22
|
// call and we would have returned already, so the following call should always return a valid L1 token.
|
|
24
|
-
|
|
23
|
+
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(relayData.inputToken, relayData.originChainId, bundleEndBlockForMainnet);
|
|
25
24
|
assert(isDefined(l1TokenCounterpart), "getRefundInformationFromFill: l1TokenCounterpart is undefined");
|
|
26
|
-
|
|
25
|
+
const repaymentToken = hubPoolClient.getL2TokenForL1TokenAtBlock(l1TokenCounterpart, chainToSendRefundTo, bundleEndBlockForMainnet);
|
|
27
26
|
assert(isDefined(repaymentToken), "getRefundInformationFromFill: repaymentToken is undefined");
|
|
28
27
|
return {
|
|
29
|
-
chainToSendRefundTo
|
|
30
|
-
repaymentToken
|
|
28
|
+
chainToSendRefundTo,
|
|
29
|
+
repaymentToken,
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
32
|
/**
|
|
@@ -40,56 +39,55 @@ export function getRefundInformationFromFill(relayData, hubPoolClient, bundleEnd
|
|
|
40
39
|
* and applied repayment address, or undefined if the applied repayment address is not valid for the
|
|
41
40
|
* applied repayment chain.
|
|
42
41
|
*/
|
|
43
|
-
export function verifyFillRepayment(_fill, destinationChainProvider, matchedDeposit, hubPoolClient, bundleEndBlockForMainnet) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
// If we can switch the repayment chain to the destination chain, then do so. We should only switch if the
|
|
67
|
-
// destination chain has a valid repayment token that is equivalent to the deposited input token. This would
|
|
68
|
-
// also be the same mapping as the repayment token on the repayment chain.
|
|
69
|
-
if (!matchedDeposit.fromLiteChain &&
|
|
70
|
-
hubPoolClient.areTokensEquivalent(fill.inputToken, fill.originChainId, fill.outputToken, fill.destinationChainId)) {
|
|
71
|
-
repaymentChainId = fill.destinationChainId;
|
|
72
|
-
}
|
|
73
|
-
// If we can't switch the chain, then we need to verify that the msg.sender is a valid address on the repayment chain.
|
|
74
|
-
// Because we already checked that the `destinationRelayer` was a valid EVM address above, we only need to check
|
|
75
|
-
// that the repayment chain is an EVM chain.
|
|
76
|
-
else {
|
|
77
|
-
if (!chainIsEvm(repaymentChainId)) {
|
|
78
|
-
return [2 /*return*/, undefined];
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
fill.relayer = toAddressType(destinationRelayer, fill.destinationChainId);
|
|
82
|
-
assert(fill.relayer.isValidOn(fill.destinationChainId), "Cannot re-assign fill to msg.sender: ".concat(destinationRelayer));
|
|
83
|
-
return [3 /*break*/, 3];
|
|
84
|
-
case 2: return [2 /*return*/, undefined];
|
|
85
|
-
case 3:
|
|
86
|
-
// Repayment address is now valid and repayment chain is either origin chain for lite chain or the destination
|
|
87
|
-
// chain for cases where the repayment address was invalid. Fill should be valid now.
|
|
88
|
-
fill.repaymentChainId = repaymentChainId;
|
|
89
|
-
return [2 /*return*/, fill];
|
|
42
|
+
export async function verifyFillRepayment(_fill, destinationChainProvider, matchedDeposit, hubPoolClient, bundleEndBlockForMainnet) {
|
|
43
|
+
const fill = _.cloneDeep(_fill);
|
|
44
|
+
// Slow fills don't result in repayments so they're always valid.
|
|
45
|
+
if (isSlowFill(fill)) {
|
|
46
|
+
return fill;
|
|
47
|
+
}
|
|
48
|
+
let repaymentChainId = _getRepaymentChainId({
|
|
49
|
+
...fill,
|
|
50
|
+
fromLiteChain: matchedDeposit.fromLiteChain,
|
|
51
|
+
}, hubPoolClient, bundleEndBlockForMainnet);
|
|
52
|
+
// Repayments will always go to the fill.relayer address so check if its a valid EVM address. If its not, attempt
|
|
53
|
+
// to change it to the msg.sender of the FilledRelay.
|
|
54
|
+
if (_repaymentAddressNeedsToBeOverwritten(fill)) {
|
|
55
|
+
// TODO: Handle case where fill was sent on non-EVM chain, in which case the following call would fail
|
|
56
|
+
// or return something unexpected. We'd want to return undefined here.
|
|
57
|
+
if (chainIsEvm(fill.destinationChainId)) {
|
|
58
|
+
assert(destinationChainProvider instanceof providers.Provider, `BundleDataClient#verifyFillRepayment: unexpected destination chain provider for chain ID ${fill.destinationChainId}`);
|
|
59
|
+
const fillTransaction = await destinationChainProvider.getTransaction(fill.txnRef);
|
|
60
|
+
const destinationRelayer = fillTransaction?.from;
|
|
61
|
+
// Repayment chain is still an EVM chain, but the msg.sender is a bytes32 address, so the fill is invalid.
|
|
62
|
+
if (!isDefined(destinationRelayer) || !isValidEvmAddress(destinationRelayer)) {
|
|
63
|
+
return undefined;
|
|
90
64
|
}
|
|
91
|
-
|
|
92
|
-
|
|
65
|
+
// If we can switch the repayment chain to the destination chain, then do so. We should only switch if the
|
|
66
|
+
// destination chain has a valid repayment token that is equivalent to the deposited input token. This would
|
|
67
|
+
// also be the same mapping as the repayment token on the repayment chain.
|
|
68
|
+
if (!matchedDeposit.fromLiteChain &&
|
|
69
|
+
hubPoolClient.areTokensEquivalent(fill.inputToken, fill.originChainId, fill.outputToken, fill.destinationChainId)) {
|
|
70
|
+
repaymentChainId = fill.destinationChainId;
|
|
71
|
+
}
|
|
72
|
+
// If we can't switch the chain, then we need to verify that the msg.sender is a valid address on the repayment chain.
|
|
73
|
+
// Because we already checked that the `destinationRelayer` was a valid EVM address above, we only need to check
|
|
74
|
+
// that the repayment chain is an EVM chain.
|
|
75
|
+
else {
|
|
76
|
+
if (!chainIsEvm(repaymentChainId)) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
fill.relayer = toAddressType(destinationRelayer, fill.destinationChainId);
|
|
81
|
+
assert(fill.relayer.isValidOn(fill.destinationChainId), `Cannot re-assign fill to msg.sender: ${destinationRelayer}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Repayment address is now valid and repayment chain is either origin chain for lite chain or the destination
|
|
88
|
+
// chain for cases where the repayment address was invalid. Fill should be valid now.
|
|
89
|
+
fill.repaymentChainId = repaymentChainId;
|
|
90
|
+
return fill;
|
|
93
91
|
}
|
|
94
92
|
function _getRepaymentChainId(relayData, hubPoolClient, bundleEndBlockForMainnet) {
|
|
95
93
|
if (relayData.fromLiteChain) {
|
|
@@ -102,8 +100,8 @@ function _getRepaymentChainId(relayData, hubPoolClient, bundleEndBlockForMainnet
|
|
|
102
100
|
return relayData.destinationChainId;
|
|
103
101
|
}
|
|
104
102
|
// Repayment chain is valid if the input token and repayment chain are mapped to the same PoolRebalanceRoute and the repayment chain is not disabled in protocol.
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
const repaymentTokenIsValid = _repaymentChainTokenIsValid(relayData, hubPoolClient, bundleEndBlockForMainnet);
|
|
104
|
+
const repaymentChainIsValid = !hubPoolClient.configStoreClient
|
|
107
105
|
.getDisabledChainsForBlock(bundleEndBlockForMainnet)
|
|
108
106
|
.includes(relayData.repaymentChainId);
|
|
109
107
|
if (repaymentTokenIsValid && repaymentChainIsValid) {
|
|
@@ -116,7 +114,7 @@ function _repaymentChainTokenIsValid(relayData, hubPoolClient, bundleEndBlockFor
|
|
|
116
114
|
if (!hubPoolClient.l2TokenHasPoolRebalanceRoute(relayData.inputToken, relayData.originChainId, bundleEndBlockForMainnet)) {
|
|
117
115
|
return false;
|
|
118
116
|
}
|
|
119
|
-
|
|
117
|
+
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(relayData.inputToken, relayData.originChainId, bundleEndBlockForMainnet);
|
|
120
118
|
if (!l1TokenCounterpart) {
|
|
121
119
|
return false;
|
|
122
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FillUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/FillUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FillUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/FillUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { __assign } from "tslib";
|
|
2
1
|
import { MerkleTree } from "@across-protocol/contracts";
|
|
3
2
|
import { getParamType } from "../../../utils/ContractUtils";
|
|
4
3
|
import { utils } from "ethers";
|
|
5
4
|
export function buildPoolRebalanceLeafTree(poolRebalanceLeaves) {
|
|
6
|
-
for (
|
|
5
|
+
for (let i = 0; i < poolRebalanceLeaves.length; i++) {
|
|
7
6
|
// The 4 provided parallel arrays must be of equal length. Running Balances can optionally be 2x the length
|
|
8
7
|
if (poolRebalanceLeaves[i].l1Tokens.length !== poolRebalanceLeaves[i].bundleLpFees.length ||
|
|
9
8
|
poolRebalanceLeaves[i].netSendAmounts.length !== poolRebalanceLeaves[i].bundleLpFees.length) {
|
|
@@ -14,9 +13,12 @@ export function buildPoolRebalanceLeafTree(poolRebalanceLeaves) {
|
|
|
14
13
|
throw new Error("Running balances length unexpected");
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
const paramType = getParamType("MerkleLibTest", "verifyPoolRebalance", "rebalance");
|
|
17
|
+
const hashFn = (input) => {
|
|
18
|
+
const ethersLeaf = {
|
|
19
|
+
...input,
|
|
20
|
+
l1Tokens: input.l1Tokens.map((l1Token) => l1Token.toEvmAddress()),
|
|
21
|
+
};
|
|
20
22
|
return utils.keccak256(utils.defaultAbiCoder.encode([paramType], [ethersLeaf]));
|
|
21
23
|
};
|
|
22
24
|
return new MerkleTree(poolRebalanceLeaves, hashFn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MerkleTreeUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/MerkleTreeUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MerkleTreeUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/MerkleTreeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,MAAM,UAAU,0BAA0B,CAAC,mBAAwC;IACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,2GAA2G;QAC3G,IACE,mBAAmB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;YACrF,mBAAmB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAC3F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IACE,mBAAmB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAChG,mBAAmB,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAC5F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,CAAC,KAAwB,EAAE,EAAE;QAC1C,MAAM,UAAU,GAAG;YACjB,GAAG,KAAK;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;SAClE,CAAC;QACF,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,OAAO,IAAI,UAAU,CAAoB,mBAAmB,EAAE,MAAM,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter, __generator } from "tslib";
|
|
2
1
|
import { isSVMSpokePoolClient } from "../../SpokePoolClient";
|
|
3
2
|
import { bnZero, chainIsEvm, chainIsSvm, compareAddresses, EvmAddress, isDefined } from "../../../utils";
|
|
4
3
|
import { getLatestFinalizedSlotWithBlock } from "../../../arch/svm";
|
|
@@ -7,61 +6,53 @@ import assert from "assert";
|
|
|
7
6
|
// when evaluating pending root bundle. The block end numbers must be less than the latest blocks for each chain ID
|
|
8
7
|
// (because we can't evaluate events in the future), and greater than the expected start blocks, which are the
|
|
9
8
|
// greater of 0 and the latest bundle end block for an executed root bundle proposal + 1.
|
|
10
|
-
export function getWidestPossibleExpectedBlockRange(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
optimistic
|
|
58
|
-
? clients.hubPoolClient.getOptimisticBundleStartBlockNumber(chainIds, latestMainnetBlock, chainId)
|
|
59
|
-
: clients.hubPoolClient.getNextBundleStartBlockNumber(chainIds, latestMainnetBlock, chainId),
|
|
60
|
-
latestPossibleBundleEndBlockNumbers[index],
|
|
61
|
-
];
|
|
62
|
-
})];
|
|
63
|
-
}
|
|
64
|
-
});
|
|
9
|
+
export async function getWidestPossibleExpectedBlockRange(chainIds, spokeClients, endBlockBuffers, clients, latestMainnetBlock, enabledChains, optimistic = false) {
|
|
10
|
+
// We impose a buffer on the head of the chain to increase the probability that the received blocks are final.
|
|
11
|
+
// Reducing the latest block that we query also gives partially filled deposits slightly more buffer for relayers
|
|
12
|
+
// to fully fill the deposit and reduces the chance that the data worker includes a slow fill payment that gets
|
|
13
|
+
// filled during the challenge period.
|
|
14
|
+
const resolveEndBlock = (chainId, idx) => Math.max(spokeClients[chainId].latestHeightSearched - endBlockBuffers[idx], 0);
|
|
15
|
+
// Across bundles are bounded by slots on Solana. The UMIP requires that the bundle end slot is backed by a block.
|
|
16
|
+
const resolveSVMEndBlock = (chainId, idx) => {
|
|
17
|
+
const spokePoolClient = spokeClients[chainId];
|
|
18
|
+
assert(isSVMSpokePoolClient(spokePoolClient));
|
|
19
|
+
const maxSlot = resolveEndBlock(chainId, idx); // Respect any configured buffer for Solana.
|
|
20
|
+
return getLatestFinalizedSlotWithBlock(spokePoolClient.svmEventsClient.getRpc(), spokePoolClient.logger, BigInt(maxSlot));
|
|
21
|
+
};
|
|
22
|
+
const latestPossibleBundleEndBlockNumbers = await Promise.all(chainIds.map((chainId, idx) => {
|
|
23
|
+
if (!enabledChains.includes(chainId) || !isDefined(spokeClients[chainId])) {
|
|
24
|
+
return -1; // Chain is disabled; end block is redundant and will be overridden later.
|
|
25
|
+
}
|
|
26
|
+
if (chainIsEvm(chainId)) {
|
|
27
|
+
return Promise.resolve(resolveEndBlock(chainId, idx));
|
|
28
|
+
}
|
|
29
|
+
if (chainIsSvm(chainId)) {
|
|
30
|
+
return resolveSVMEndBlock(chainId, idx);
|
|
31
|
+
}
|
|
32
|
+
assert(false, `Unsupported chainId: ${chainId}`);
|
|
33
|
+
}));
|
|
34
|
+
return chainIds.map((chainId, index) => {
|
|
35
|
+
const lastEndBlockForChain = clients.hubPoolClient.getLatestBundleEndBlockForChain(chainIds, latestMainnetBlock, chainId);
|
|
36
|
+
// If chain is disabled, re-use the latest bundle end block for the chain as both the start
|
|
37
|
+
// and end block.
|
|
38
|
+
if (!enabledChains.includes(chainId)) {
|
|
39
|
+
return [lastEndBlockForChain, lastEndBlockForChain];
|
|
40
|
+
}
|
|
41
|
+
// If the latest block hasn't advanced enough from the previous proposed end block, then re-use it. It will
|
|
42
|
+
// be regarded as disabled by the Dataworker clients. Otherwise, add 1 to the previous proposed end block.
|
|
43
|
+
if (lastEndBlockForChain >= latestPossibleBundleEndBlockNumbers[index]) {
|
|
44
|
+
// @dev: Without this check, then `getNextBundleStartBlockNumber` could return `latestBlock+1` even when the
|
|
45
|
+
// latest block for the chain hasn't advanced, resulting in an invalid range being produced.
|
|
46
|
+
return [lastEndBlockForChain, lastEndBlockForChain];
|
|
47
|
+
}
|
|
48
|
+
// Chain has advanced far enough including the buffer, return range from previous proposed end block + 1 to
|
|
49
|
+
// latest block for chain minus buffer.
|
|
50
|
+
return [
|
|
51
|
+
optimistic
|
|
52
|
+
? clients.hubPoolClient.getOptimisticBundleStartBlockNumber(chainIds, latestMainnetBlock, chainId)
|
|
53
|
+
: clients.hubPoolClient.getNextBundleStartBlockNumber(chainIds, latestMainnetBlock, chainId),
|
|
54
|
+
latestPossibleBundleEndBlockNumbers[index],
|
|
55
|
+
];
|
|
65
56
|
});
|
|
66
57
|
}
|
|
67
58
|
export function isChainDisabledAtBlock(chainId, mainnetBlock, configStoreClient) {
|
|
@@ -81,7 +72,7 @@ export function computeDesiredTransferAmountToSpoke(runningBalance, spokePoolTar
|
|
|
81
72
|
}
|
|
82
73
|
// We are left with the case where the spoke pool is beyond the threshold.
|
|
83
74
|
// A transfer needs to be initiated to bring it down to the target.
|
|
84
|
-
|
|
75
|
+
const transferSize = runningBalance.abs().sub(spokePoolTargetBalance.target);
|
|
85
76
|
// If the transferSize is < 0, this indicates that the target is still above the running balance.
|
|
86
77
|
// This can only happen if the threshold is less than the target. This is likely due to a misconfiguration.
|
|
87
78
|
// In this case, we transfer nothing until the target is exceeded.
|
|
@@ -99,7 +90,7 @@ export function getNetSendAmountForL1Token(spokePoolTargetBalance, runningBalanc
|
|
|
99
90
|
return computeDesiredTransferAmountToSpoke(runningBalance, spokePoolTargetBalance);
|
|
100
91
|
}
|
|
101
92
|
export function getRunningBalanceForL1Token(spokePoolTargetBalance, runningBalance) {
|
|
102
|
-
|
|
93
|
+
const desiredTransferAmount = computeDesiredTransferAmountToSpoke(runningBalance, spokePoolTargetBalance);
|
|
103
94
|
return runningBalance.sub(desiredTransferAmount);
|
|
104
95
|
}
|
|
105
96
|
export function updateRunningBalance(runningBalances, l2ChainId, l1Token, updateAmount) {
|
|
@@ -107,7 +98,7 @@ export function updateRunningBalance(runningBalances, l2ChainId, l1Token, update
|
|
|
107
98
|
if (!runningBalances[l2ChainId]) {
|
|
108
99
|
runningBalances[l2ChainId] = {};
|
|
109
100
|
}
|
|
110
|
-
|
|
101
|
+
const runningBalance = runningBalances[l2ChainId][l1Token];
|
|
111
102
|
if (runningBalance) {
|
|
112
103
|
runningBalances[l2ChainId][l1Token] = runningBalance.add(updateAmount);
|
|
113
104
|
}
|
|
@@ -116,9 +107,9 @@ export function updateRunningBalance(runningBalances, l2ChainId, l1Token, update
|
|
|
116
107
|
}
|
|
117
108
|
}
|
|
118
109
|
export function addLastRunningBalance(latestMainnetBlock, runningBalances, hubPoolClient) {
|
|
119
|
-
Object.keys(runningBalances).forEach(
|
|
120
|
-
Object.keys(runningBalances[Number(repaymentChainId)]).forEach(
|
|
121
|
-
|
|
110
|
+
Object.keys(runningBalances).forEach((repaymentChainId) => {
|
|
111
|
+
Object.keys(runningBalances[Number(repaymentChainId)]).forEach((l1TokenAddress) => {
|
|
112
|
+
const { runningBalance } = hubPoolClient.getRunningBalanceBeforeBlockForChain(latestMainnetBlock, Number(repaymentChainId), EvmAddress.from(l1TokenAddress));
|
|
122
113
|
if (!runningBalance.eq(bnZero)) {
|
|
123
114
|
updateRunningBalance(runningBalances, Number(repaymentChainId), l1TokenAddress, runningBalance);
|
|
124
115
|
}
|
|
@@ -126,26 +117,26 @@ export function addLastRunningBalance(latestMainnetBlock, runningBalances, hubPo
|
|
|
126
117
|
});
|
|
127
118
|
}
|
|
128
119
|
export function updateRunningBalanceForDeposit(runningBalances, hubPoolClient, deposit, updateAmount, mainnetBundleEndBlock) {
|
|
129
|
-
|
|
120
|
+
const l1TokenCounterpart = hubPoolClient.getL1TokenForL2TokenAtBlock(deposit.inputToken, deposit.originChainId, mainnetBundleEndBlock);
|
|
130
121
|
assert(isDefined(l1TokenCounterpart), "updateRunningBalanceForDeposit: l1TokenCounterpart is undefined");
|
|
131
122
|
updateRunningBalance(runningBalances, deposit.originChainId, l1TokenCounterpart.toEvmAddress(), updateAmount);
|
|
132
123
|
}
|
|
133
124
|
export function constructPoolRebalanceLeaves(latestMainnetBlock, runningBalances, realizedLpFees, chainsWithRefundsOnly, configStoreClient, maxL1TokenCount) {
|
|
134
125
|
// Add a leaf for each chain ID with no L1 tokens or running balances
|
|
135
|
-
assert(chainsWithRefundsOnly.every(
|
|
136
|
-
chainsWithRefundsOnly.every(
|
|
126
|
+
assert(chainsWithRefundsOnly.every((chainId) => runningBalances[chainId] === undefined) &&
|
|
127
|
+
chainsWithRefundsOnly.every((chainId) => realizedLpFees[chainId] === undefined), "Refund-only chains should not have running balances or realized LP fees.");
|
|
137
128
|
// Create one leaf per L2 chain ID. First we'll create a leaf with all L1 tokens for each chain ID, and then
|
|
138
129
|
// we'll split up any leaves with too many L1 tokens.
|
|
139
|
-
|
|
130
|
+
const leaves = [];
|
|
140
131
|
Object.keys(runningBalances)
|
|
141
|
-
.map(
|
|
132
|
+
.map((chainId) => Number(chainId))
|
|
142
133
|
.concat(chainsWithRefundsOnly)
|
|
143
134
|
// Leaves should be sorted by ascending chain ID
|
|
144
|
-
.sort(
|
|
145
|
-
.map(
|
|
135
|
+
.sort((chainIdA, chainIdB) => chainIdA - chainIdB)
|
|
136
|
+
.map((chainId) => {
|
|
146
137
|
if (chainsWithRefundsOnly.includes(chainId)) {
|
|
147
138
|
leaves.push({
|
|
148
|
-
chainId
|
|
139
|
+
chainId,
|
|
149
140
|
bundleLpFees: [],
|
|
150
141
|
netSendAmounts: [],
|
|
151
142
|
runningBalances: [],
|
|
@@ -156,32 +147,25 @@ export function constructPoolRebalanceLeaves(latestMainnetBlock, runningBalances
|
|
|
156
147
|
return;
|
|
157
148
|
}
|
|
158
149
|
// Sort addresses.
|
|
159
|
-
|
|
150
|
+
const sortedL1Tokens = Object.keys(runningBalances[chainId]).sort((addressA, addressB) => {
|
|
160
151
|
return compareAddresses(addressA, addressB);
|
|
161
152
|
});
|
|
162
153
|
// This begins at 0 and increments for each leaf for this { chainId, L1Token } combination.
|
|
163
|
-
|
|
154
|
+
let groupIndexForChainId = 0;
|
|
164
155
|
// Split addresses into multiple leaves if there are more L1 tokens than allowed per leaf.
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
return configStoreClient.getSpokeTargetBalancesForBlock(l1Token, chainId, latestMainnetBlock);
|
|
170
|
-
});
|
|
156
|
+
const maxL1TokensPerLeaf = maxL1TokenCount || configStoreClient.getMaxRefundCountForRelayerRefundLeafForBlock(latestMainnetBlock);
|
|
157
|
+
for (let i = 0; i < sortedL1Tokens.length; i += maxL1TokensPerLeaf) {
|
|
158
|
+
const l1TokensToIncludeInThisLeaf = sortedL1Tokens.slice(i, i + maxL1TokensPerLeaf);
|
|
159
|
+
const spokeTargetBalances = l1TokensToIncludeInThisLeaf.map((l1Token) => configStoreClient.getSpokeTargetBalancesForBlock(l1Token, chainId, latestMainnetBlock));
|
|
171
160
|
// Build leaves using running balances and realized lp fees data for l1Token + chain, or default to
|
|
172
161
|
// zero if undefined.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
var _a;
|
|
181
|
-
return ((_a = runningBalances[chainId]) === null || _a === void 0 ? void 0 : _a[l1Token])
|
|
182
|
-
? getRunningBalanceForL1Token(spokeTargetBalances[index], runningBalances[chainId][l1Token])
|
|
183
|
-
: bnZero;
|
|
184
|
-
});
|
|
162
|
+
const leafBundleLpFees = l1TokensToIncludeInThisLeaf.map((l1Token) => realizedLpFees[chainId]?.[l1Token] ?? bnZero);
|
|
163
|
+
const leafNetSendAmounts = l1TokensToIncludeInThisLeaf.map((l1Token, index) => runningBalances[chainId] && runningBalances[chainId][l1Token]
|
|
164
|
+
? getNetSendAmountForL1Token(spokeTargetBalances[index], runningBalances[chainId][l1Token])
|
|
165
|
+
: bnZero);
|
|
166
|
+
const leafRunningBalances = l1TokensToIncludeInThisLeaf.map((l1Token, index) => runningBalances[chainId]?.[l1Token]
|
|
167
|
+
? getRunningBalanceForL1Token(spokeTargetBalances[index], runningBalances[chainId][l1Token])
|
|
168
|
+
: bnZero);
|
|
185
169
|
leaves.push({
|
|
186
170
|
chainId: chainId,
|
|
187
171
|
bundleLpFees: leafBundleLpFees,
|
|
@@ -189,11 +173,8 @@ export function constructPoolRebalanceLeaves(latestMainnetBlock, runningBalances
|
|
|
189
173
|
runningBalances: leafRunningBalances,
|
|
190
174
|
groupIndex: groupIndexForChainId++,
|
|
191
175
|
leafId: leaves.length,
|
|
192
|
-
l1Tokens: l1TokensToIncludeInThisLeaf.map(
|
|
176
|
+
l1Tokens: l1TokensToIncludeInThisLeaf.map((l1TokenAddr) => EvmAddress.from(l1TokenAddr)),
|
|
193
177
|
});
|
|
194
|
-
};
|
|
195
|
-
for (var i = 0; i < sortedL1Tokens.length; i += maxL1TokensPerLeaf) {
|
|
196
|
-
_loop_1(i);
|
|
197
178
|
}
|
|
198
179
|
});
|
|
199
180
|
return leaves;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PoolRebalanceUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PoolRebalanceUtils.js","sourceRoot":"","sources":["../../../../../src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts"],"names":[],"mappings":"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"}
|