@across-protocol/sdk 4.1.63-beta.3 → 4.1.64-alpha.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.
- package/dist/cjs/arch/evm/SpokeUtils.d.ts +1 -1
- package/dist/cjs/arch/evm/SpokeUtils.js +5 -6
- package/dist/cjs/arch/evm/SpokeUtils.js.map +1 -1
- package/dist/cjs/arch/evm/index.d.ts +0 -1
- package/dist/cjs/arch/evm/index.js +0 -1
- package/dist/cjs/arch/evm/index.js.map +1 -1
- package/dist/cjs/arch/svm/index.d.ts +1 -5
- package/dist/cjs/arch/svm/index.js +2 -6
- package/dist/cjs/arch/svm/index.js.map +1 -1
- package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
- package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +7 -7
- package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
- package/dist/cjs/clients/BaseAbstractClient.d.ts +5 -6
- package/dist/cjs/clients/BaseAbstractClient.js +19 -30
- package/dist/cjs/clients/BaseAbstractClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js +11 -15
- package/dist/cjs/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/cjs/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
- package/dist/cjs/clients/HubPoolClient.d.ts +3 -4
- package/dist/cjs/clients/HubPoolClient.js +17 -18
- package/dist/cjs/clients/HubPoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
- package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js +20 -23
- package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.d.ts +5 -5
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js +57 -54
- package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/SpokePoolClient/index.d.ts +0 -3
- package/dist/cjs/clients/SpokePoolClient/index.js +1 -8
- package/dist/cjs/clients/SpokePoolClient/index.js.map +1 -1
- package/dist/cjs/clients/index.d.ts +1 -1
- package/dist/cjs/clients/index.js +1 -2
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/mocks/MockConfigStoreClient.d.ts +1 -1
- package/dist/cjs/clients/mocks/MockConfigStoreClient.js +2 -2
- package/dist/cjs/clients/mocks/MockConfigStoreClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockHubPoolClient.js +2 -2
- package/dist/cjs/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js +4 -7
- package/dist/cjs/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/cjs/clients/mocks/index.d.ts +0 -2
- package/dist/cjs/clients/mocks/index.js +0 -2
- package/dist/cjs/clients/mocks/index.js.map +1 -1
- package/dist/cjs/constants.d.ts +0 -1
- package/dist/cjs/constants.js +1 -2
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
- package/dist/cjs/gasPriceOracle/adapters/arbitrum.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/ethereum.d.ts +4 -4
- package/dist/cjs/gasPriceOracle/adapters/ethereum.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/linea-viem.js +2 -3
- package/dist/cjs/gasPriceOracle/adapters/linea-viem.js.map +1 -1
- package/dist/cjs/gasPriceOracle/adapters/polygon.d.ts +3 -3
- package/dist/cjs/gasPriceOracle/index.d.ts +1 -1
- package/dist/cjs/gasPriceOracle/oracle.d.ts +3 -4
- package/dist/cjs/gasPriceOracle/oracle.js +9 -16
- package/dist/cjs/gasPriceOracle/oracle.js.map +1 -1
- package/dist/cjs/gasPriceOracle/types.d.ts +1 -6
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/SpokePool.d.ts +0 -13
- package/dist/cjs/interfaces/SpokePool.js.map +1 -1
- package/dist/cjs/providers/index.d.ts +1 -1
- package/dist/cjs/providers/index.js +2 -1
- package/dist/cjs/providers/index.js.map +1 -1
- package/dist/cjs/providers/{mocks/mockEthersProvider.js → mockProvider.js} +2 -2
- package/dist/cjs/providers/mockProvider.js.map +1 -0
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js +8 -10
- package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
- package/dist/cjs/relayFeeCalculator/chain-queries/factory.js +2 -8
- package/dist/cjs/relayFeeCalculator/chain-queries/factory.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/index.d.ts +0 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/index.js +0 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/index.js.map +1 -1
- package/dist/cjs/relayFeeCalculator/relayFeeCalculator.d.ts +0 -2
- package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js +4 -10
- package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
- package/dist/cjs/svm/eventsClient.d.ts +15 -0
- package/dist/cjs/svm/eventsClient.js +157 -0
- package/dist/cjs/svm/eventsClient.js.map +1 -0
- package/dist/cjs/svm/index.d.ts +3 -0
- package/dist/cjs/svm/index.js +8 -0
- package/dist/cjs/svm/index.js.map +1 -0
- package/dist/cjs/{arch/svm → svm}/types.d.ts +4 -9
- package/dist/cjs/svm/types.js.map +1 -0
- package/dist/cjs/svm/utils/events.d.ts +8 -0
- package/dist/cjs/svm/utils/events.js +47 -0
- package/dist/cjs/svm/utils/events.js.map +1 -0
- package/dist/cjs/svm/utils/helpers.d.ts +2 -0
- package/dist/cjs/svm/utils/helpers.js +19 -0
- package/dist/cjs/svm/utils/helpers.js.map +1 -0
- package/dist/cjs/svm/utils/index.d.ts +1 -0
- package/dist/cjs/svm/utils/index.js +5 -0
- package/dist/cjs/svm/utils/index.js.map +1 -0
- package/dist/cjs/utils/AddressUtils.d.ts +3 -9
- package/dist/cjs/utils/AddressUtils.js +6 -36
- package/dist/cjs/utils/AddressUtils.js.map +1 -1
- package/dist/cjs/utils/ArrayUtils.d.ts +0 -1
- package/dist/cjs/utils/ArrayUtils.js +1 -6
- package/dist/cjs/utils/ArrayUtils.js.map +1 -1
- package/dist/cjs/utils/BlockUtils.d.ts +27 -2
- package/dist/cjs/utils/BlockUtils.js +208 -2
- package/dist/cjs/utils/BlockUtils.js.map +1 -1
- package/dist/cjs/utils/EventUtils.d.ts +4 -4
- package/dist/cjs/utils/EventUtils.js +4 -7
- package/dist/cjs/utils/EventUtils.js.map +1 -1
- package/dist/cjs/utils/JSONUtils.js +0 -3
- package/dist/cjs/utils/JSONUtils.js.map +1 -1
- package/dist/cjs/utils/SpokeUtils.js +0 -5
- package/dist/cjs/utils/SpokeUtils.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +0 -1
- package/dist/cjs/utils/index.js +0 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/esm/arch/evm/SpokeUtils.d.ts +1 -1
- package/dist/esm/arch/evm/SpokeUtils.js +5 -6
- package/dist/esm/arch/evm/SpokeUtils.js.map +1 -1
- package/dist/esm/arch/evm/index.d.ts +0 -1
- package/dist/esm/arch/evm/index.js +0 -1
- package/dist/esm/arch/evm/index.js.map +1 -1
- package/dist/esm/arch/svm/index.d.ts +1 -5
- package/dist/esm/arch/svm/index.js +1 -5
- package/dist/esm/arch/svm/index.js.map +1 -1
- package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
- package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +7 -7
- package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
- package/dist/esm/clients/BaseAbstractClient.d.ts +5 -6
- package/dist/esm/clients/BaseAbstractClient.js +19 -30
- package/dist/esm/clients/BaseAbstractClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js +14 -17
- package/dist/esm/clients/BundleDataClient/BundleDataClient.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
- package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
- package/dist/esm/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
- package/dist/esm/clients/HubPoolClient.d.ts +3 -4
- package/dist/esm/clients/HubPoolClient.js +18 -19
- package/dist/esm/clients/HubPoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
- package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js +20 -23
- package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.d.ts +7 -7
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js +59 -57
- package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
- package/dist/esm/clients/SpokePoolClient/index.d.ts +0 -8
- package/dist/esm/clients/SpokePoolClient/index.js +0 -10
- package/dist/esm/clients/SpokePoolClient/index.js.map +1 -1
- package/dist/esm/clients/index.d.ts +1 -1
- package/dist/esm/clients/index.js +1 -1
- package/dist/esm/clients/index.js.map +1 -1
- package/dist/esm/clients/mocks/MockConfigStoreClient.d.ts +1 -1
- package/dist/esm/clients/mocks/MockConfigStoreClient.js +2 -2
- package/dist/esm/clients/mocks/MockConfigStoreClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockHubPoolClient.js +2 -2
- package/dist/esm/clients/mocks/MockHubPoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/MockSpokePoolClient.js +5 -8
- package/dist/esm/clients/mocks/MockSpokePoolClient.js.map +1 -1
- package/dist/esm/clients/mocks/index.d.ts +0 -2
- package/dist/esm/clients/mocks/index.js +0 -2
- package/dist/esm/clients/mocks/index.js.map +1 -1
- package/dist/esm/constants.d.ts +0 -1
- package/dist/esm/constants.js +0 -1
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
- package/dist/esm/gasPriceOracle/adapters/arbitrum.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/ethereum.d.ts +4 -4
- package/dist/esm/gasPriceOracle/adapters/ethereum.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/linea-viem.js +2 -3
- package/dist/esm/gasPriceOracle/adapters/linea-viem.js.map +1 -1
- package/dist/esm/gasPriceOracle/adapters/polygon.d.ts +4 -4
- package/dist/esm/gasPriceOracle/adapters/polygon.js +1 -1
- package/dist/esm/gasPriceOracle/index.d.ts +1 -1
- package/dist/esm/gasPriceOracle/oracle.d.ts +3 -4
- package/dist/esm/gasPriceOracle/oracle.js +9 -18
- package/dist/esm/gasPriceOracle/oracle.js.map +1 -1
- package/dist/esm/gasPriceOracle/types.d.ts +1 -6
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interfaces/SpokePool.d.ts +0 -13
- package/dist/esm/interfaces/SpokePool.js.map +1 -1
- package/dist/esm/providers/index.d.ts +1 -1
- package/dist/esm/providers/index.js +2 -1
- package/dist/esm/providers/index.js.map +1 -1
- package/dist/esm/providers/{mocks/mockEthersProvider.js → mockProvider.js} +2 -2
- package/dist/esm/providers/mockProvider.js.map +1 -0
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js +8 -10
- package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
- package/dist/esm/relayFeeCalculator/chain-queries/factory.js +5 -11
- package/dist/esm/relayFeeCalculator/chain-queries/factory.js.map +1 -1
- package/dist/esm/relayFeeCalculator/chain-queries/index.d.ts +0 -1
- package/dist/esm/relayFeeCalculator/chain-queries/index.js +0 -1
- package/dist/esm/relayFeeCalculator/chain-queries/index.js.map +1 -1
- package/dist/esm/relayFeeCalculator/relayFeeCalculator.d.ts +1 -12
- package/dist/esm/relayFeeCalculator/relayFeeCalculator.js +5 -10
- package/dist/esm/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
- package/dist/esm/svm/eventsClient.d.ts +51 -0
- package/dist/esm/svm/eventsClient.js +195 -0
- package/dist/esm/svm/eventsClient.js.map +1 -0
- package/dist/esm/svm/index.d.ts +3 -0
- package/dist/esm/svm/index.js +5 -0
- package/dist/esm/svm/index.js.map +1 -0
- package/dist/esm/{arch/svm → svm}/types.d.ts +4 -9
- package/dist/esm/svm/types.js.map +1 -0
- package/dist/esm/svm/utils/events.d.ts +17 -0
- package/dist/esm/svm/utils/events.js +55 -0
- package/dist/esm/svm/utils/events.js.map +1 -0
- package/dist/esm/svm/utils/helpers.d.ts +5 -0
- package/dist/esm/svm/utils/helpers.js +18 -0
- package/dist/esm/svm/utils/helpers.js.map +1 -0
- package/dist/esm/svm/utils/index.d.ts +1 -0
- package/dist/esm/svm/utils/index.js +2 -0
- package/dist/esm/svm/utils/index.js.map +1 -0
- package/dist/esm/utils/AddressUtils.d.ts +3 -9
- package/dist/esm/utils/AddressUtils.js +6 -41
- package/dist/esm/utils/AddressUtils.js.map +1 -1
- package/dist/esm/utils/ArrayUtils.d.ts +0 -6
- package/dist/esm/utils/ArrayUtils.js +0 -9
- package/dist/esm/utils/ArrayUtils.js.map +1 -1
- package/dist/esm/utils/BlockUtils.d.ts +36 -2
- package/dist/esm/utils/BlockUtils.js +243 -2
- package/dist/esm/utils/BlockUtils.js.map +1 -1
- package/dist/esm/utils/EventUtils.d.ts +4 -4
- package/dist/esm/utils/EventUtils.js +4 -7
- package/dist/esm/utils/EventUtils.js.map +1 -1
- package/dist/esm/utils/JSONUtils.js +0 -3
- package/dist/esm/utils/JSONUtils.js.map +1 -1
- package/dist/esm/utils/SpokeUtils.js +0 -5
- package/dist/esm/utils/SpokeUtils.js.map +1 -1
- package/dist/esm/utils/index.d.ts +0 -1
- package/dist/esm/utils/index.js +0 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/types/arch/evm/SpokeUtils.d.ts +1 -1
- package/dist/types/arch/evm/SpokeUtils.d.ts.map +1 -1
- package/dist/types/arch/evm/index.d.ts +0 -1
- package/dist/types/arch/evm/index.d.ts.map +1 -1
- package/dist/types/arch/svm/index.d.ts +1 -5
- package/dist/types/arch/svm/index.d.ts.map +1 -1
- package/dist/types/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
- package/dist/types/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts.map +1 -1
- package/dist/types/clients/BaseAbstractClient.d.ts +5 -6
- package/dist/types/clients/BaseAbstractClient.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/BundleDataClient.d.ts.map +1 -1
- package/dist/types/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
- package/dist/types/clients/HubPoolClient.d.ts +3 -4
- package/dist/types/clients/HubPoolClient.d.ts.map +1 -1
- package/dist/types/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
- package/dist/types/clients/SpokePoolClient/EVMSpokePoolClient.d.ts.map +1 -1
- package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts +7 -7
- package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts.map +1 -1
- package/dist/types/clients/SpokePoolClient/index.d.ts +0 -8
- package/dist/types/clients/SpokePoolClient/index.d.ts.map +1 -1
- package/dist/types/clients/index.d.ts +1 -1
- package/dist/types/clients/index.d.ts.map +1 -1
- package/dist/types/clients/mocks/MockConfigStoreClient.d.ts +1 -1
- package/dist/types/clients/mocks/MockConfigStoreClient.d.ts.map +1 -1
- package/dist/types/clients/mocks/MockSpokePoolClient.d.ts.map +1 -1
- package/dist/types/clients/mocks/index.d.ts +0 -2
- package/dist/types/clients/mocks/index.d.ts.map +1 -1
- package/dist/types/constants.d.ts +0 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
- package/dist/types/gasPriceOracle/adapters/arbitrum.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/adapters/ethereum.d.ts +4 -4
- package/dist/types/gasPriceOracle/adapters/ethereum.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/adapters/linea-viem.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/adapters/polygon.d.ts +4 -4
- package/dist/types/gasPriceOracle/adapters/polygon.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/index.d.ts +1 -1
- package/dist/types/gasPriceOracle/index.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/oracle.d.ts +3 -4
- package/dist/types/gasPriceOracle/oracle.d.ts.map +1 -1
- package/dist/types/gasPriceOracle/types.d.ts +1 -6
- package/dist/types/gasPriceOracle/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/interfaces/SpokePool.d.ts +0 -13
- package/dist/types/interfaces/SpokePool.d.ts.map +1 -1
- package/dist/types/providers/index.d.ts +1 -1
- package/dist/types/providers/index.d.ts.map +1 -1
- package/dist/types/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +1 -1
- package/dist/types/providers/mockProvider.d.ts.map +1 -0
- package/dist/types/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
- package/dist/types/relayFeeCalculator/chain-queries/baseQuery.d.ts.map +1 -1
- package/dist/types/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
- package/dist/types/relayFeeCalculator/chain-queries/factory.d.ts.map +1 -1
- package/dist/types/relayFeeCalculator/chain-queries/index.d.ts +0 -1
- package/dist/types/relayFeeCalculator/chain-queries/index.d.ts.map +1 -1
- package/dist/types/relayFeeCalculator/relayFeeCalculator.d.ts +1 -12
- package/dist/types/relayFeeCalculator/relayFeeCalculator.d.ts.map +1 -1
- package/dist/types/svm/eventsClient.d.ts +52 -0
- package/dist/types/svm/eventsClient.d.ts.map +1 -0
- package/dist/types/svm/index.d.ts +4 -0
- package/dist/types/svm/index.d.ts.map +1 -0
- package/dist/types/{arch/svm → svm}/types.d.ts +4 -9
- package/dist/types/svm/types.d.ts.map +1 -0
- package/dist/types/svm/utils/events.d.ts +18 -0
- package/dist/types/svm/utils/events.d.ts.map +1 -0
- package/dist/types/svm/utils/helpers.d.ts +6 -0
- package/dist/types/svm/utils/helpers.d.ts.map +1 -0
- package/dist/types/svm/utils/index.d.ts +2 -0
- package/dist/types/svm/utils/index.d.ts.map +1 -0
- package/dist/types/utils/AddressUtils.d.ts +3 -9
- package/dist/types/utils/AddressUtils.d.ts.map +1 -1
- package/dist/types/utils/ArrayUtils.d.ts +0 -6
- package/dist/types/utils/ArrayUtils.d.ts.map +1 -1
- package/dist/types/utils/BlockUtils.d.ts +36 -2
- package/dist/types/utils/BlockUtils.d.ts.map +1 -1
- package/dist/types/utils/EventUtils.d.ts +4 -4
- package/dist/types/utils/EventUtils.d.ts.map +1 -1
- package/dist/types/utils/JSONUtils.d.ts.map +1 -1
- package/dist/types/utils/SpokeUtils.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/types/utils/index.d.ts.map +1 -1
- package/package.json +1 -3
- package/src/arch/evm/SpokeUtils.ts +5 -5
- package/src/arch/evm/index.ts +0 -1
- package/src/arch/svm/index.ts +1 -5
- package/src/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.ts +7 -7
- package/src/clients/BaseAbstractClient.ts +13 -20
- package/src/clients/BundleDataClient/BundleDataClient.ts +19 -28
- package/src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts +1 -1
- package/src/clients/HubPoolClient.ts +19 -19
- package/src/clients/SpokePoolClient/EVMSpokePoolClient.ts +21 -23
- package/src/clients/SpokePoolClient/SpokePoolClient.ts +59 -50
- package/src/clients/SpokePoolClient/index.ts +0 -11
- package/src/clients/index.ts +1 -1
- package/src/clients/mocks/MockConfigStoreClient.ts +2 -2
- package/src/clients/mocks/MockHubPoolClient.ts +2 -2
- package/src/clients/mocks/MockSpokePoolClient.ts +4 -9
- package/src/clients/mocks/index.ts +0 -2
- package/src/constants.ts +0 -1
- package/src/gasPriceOracle/adapters/arbitrum.ts +2 -5
- package/src/gasPriceOracle/adapters/ethereum.ts +4 -7
- package/src/gasPriceOracle/adapters/linea-viem.ts +1 -3
- package/src/gasPriceOracle/adapters/polygon.ts +6 -6
- package/src/gasPriceOracle/index.ts +1 -1
- package/src/gasPriceOracle/oracle.ts +4 -20
- package/src/gasPriceOracle/types.ts +1 -7
- package/src/index.ts +1 -0
- package/src/interfaces/SpokePool.ts +0 -14
- package/src/providers/index.ts +1 -1
- package/src/providers/{mocks/mockEthersProvider.ts → mockProvider.ts} +1 -1
- package/src/relayFeeCalculator/chain-queries/baseQuery.ts +9 -11
- package/src/relayFeeCalculator/chain-queries/factory.ts +8 -24
- package/src/relayFeeCalculator/chain-queries/index.ts +0 -1
- package/src/relayFeeCalculator/relayFeeCalculator.ts +4 -16
- package/src/svm/eventsClient.ts +199 -0
- package/src/svm/index.ts +3 -0
- package/src/{arch/svm → svm}/types.ts +4 -21
- package/src/svm/utils/events.ts +58 -0
- package/src/svm/utils/helpers.ts +9 -0
- package/src/svm/utils/index.ts +1 -0
- package/src/utils/AddressUtils.ts +6 -49
- package/src/utils/ArrayUtils.ts +0 -12
- package/src/utils/BlockUtils.ts +215 -5
- package/src/utils/EventUtils.ts +11 -11
- package/src/utils/JSONUtils.ts +0 -2
- package/src/utils/SpokeUtils.ts +3 -7
- package/src/utils/index.ts +0 -1
- package/dist/cjs/arch/evm/BlockUtils.d.ts +0 -15
- package/dist/cjs/arch/evm/BlockUtils.js +0 -218
- package/dist/cjs/arch/evm/BlockUtils.js.map +0 -1
- package/dist/cjs/arch/svm/SpokeUtils.d.ts +0 -21
- package/dist/cjs/arch/svm/SpokeUtils.js +0 -454
- package/dist/cjs/arch/svm/SpokeUtils.js.map +0 -1
- package/dist/cjs/arch/svm/constants.d.ts +0 -2
- package/dist/cjs/arch/svm/constants.js +0 -7
- package/dist/cjs/arch/svm/constants.js.map +0 -1
- package/dist/cjs/arch/svm/eventsClient.d.ts +0 -26
- package/dist/cjs/arch/svm/eventsClient.js +0 -253
- package/dist/cjs/arch/svm/eventsClient.js.map +0 -1
- package/dist/cjs/arch/svm/types.js.map +0 -1
- package/dist/cjs/arch/svm/utils.d.ts +0 -18
- package/dist/cjs/arch/svm/utils.js +0 -212
- package/dist/cjs/arch/svm/utils.js.map +0 -1
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -23
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js +0 -172
- package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js.map +0 -1
- package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -33
- package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js +0 -184
- package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js.map +0 -1
- package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -30
- package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js +0 -90
- package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js.map +0 -1
- package/dist/cjs/gasPriceOracle/adapters/solana.d.ts +0 -4
- package/dist/cjs/gasPriceOracle/adapters/solana.js +0 -43
- package/dist/cjs/gasPriceOracle/adapters/solana.js.map +0 -1
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -5
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js +0 -21
- package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js.map +0 -1
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -5
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js +0 -20
- package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +0 -1
- package/dist/cjs/providers/mocks/MockSolanaRpcFactory.d.ts +0 -13
- package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js +0 -76
- package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js.map +0 -1
- package/dist/cjs/providers/mocks/index.d.ts +0 -4
- package/dist/cjs/providers/mocks/index.js +0 -8
- package/dist/cjs/providers/mocks/index.js.map +0 -1
- package/dist/cjs/providers/mocks/mockEthersProvider.js.map +0 -1
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -37
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js +0 -171
- package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js.map +0 -1
- package/dist/cjs/utils/BlockFinder.d.ts +0 -22
- package/dist/cjs/utils/BlockFinder.js +0 -10
- package/dist/cjs/utils/BlockFinder.js.map +0 -1
- package/dist/esm/arch/evm/BlockUtils.d.ts +0 -24
- package/dist/esm/arch/evm/BlockUtils.js +0 -250
- package/dist/esm/arch/evm/BlockUtils.js.map +0 -1
- package/dist/esm/arch/svm/SpokeUtils.d.ts +0 -129
- package/dist/esm/arch/svm/SpokeUtils.js +0 -576
- package/dist/esm/arch/svm/SpokeUtils.js.map +0 -1
- package/dist/esm/arch/svm/constants.d.ts +0 -2
- package/dist/esm/arch/svm/constants.js +0 -3
- package/dist/esm/arch/svm/constants.js.map +0 -1
- package/dist/esm/arch/svm/eventsClient.d.ts +0 -87
- package/dist/esm/arch/svm/eventsClient.js +0 -316
- package/dist/esm/arch/svm/eventsClient.js.map +0 -1
- package/dist/esm/arch/svm/types.js.map +0 -1
- package/dist/esm/arch/svm/utils.d.ts +0 -63
- package/dist/esm/arch/svm/utils.js +0 -258
- package/dist/esm/arch/svm/utils.js.map +0 -1
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -66
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js +0 -225
- package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js.map +0 -1
- package/dist/esm/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -33
- package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js +0 -183
- package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js.map +0 -1
- package/dist/esm/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -30
- package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js +0 -89
- package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js.map +0 -1
- package/dist/esm/gasPriceOracle/adapters/solana.d.ts +0 -8
- package/dist/esm/gasPriceOracle/adapters/solana.js +0 -43
- package/dist/esm/gasPriceOracle/adapters/solana.js.map +0 -1
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -5
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js +0 -19
- package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js.map +0 -1
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -5
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js +0 -18
- package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +0 -1
- package/dist/esm/providers/mocks/MockSolanaRpcFactory.d.ts +0 -13
- package/dist/esm/providers/mocks/MockSolanaRpcFactory.js +0 -74
- package/dist/esm/providers/mocks/MockSolanaRpcFactory.js.map +0 -1
- package/dist/esm/providers/mocks/index.d.ts +0 -4
- package/dist/esm/providers/mocks/index.js +0 -5
- package/dist/esm/providers/mocks/index.js.map +0 -1
- package/dist/esm/providers/mocks/mockEthersProvider.js.map +0 -1
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -84
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js +0 -216
- package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js.map +0 -1
- package/dist/esm/utils/BlockFinder.d.ts +0 -22
- package/dist/esm/utils/BlockFinder.js +0 -7
- package/dist/esm/utils/BlockFinder.js.map +0 -1
- package/dist/types/arch/evm/BlockUtils.d.ts +0 -25
- package/dist/types/arch/evm/BlockUtils.d.ts.map +0 -1
- package/dist/types/arch/svm/SpokeUtils.d.ts +0 -130
- package/dist/types/arch/svm/SpokeUtils.d.ts.map +0 -1
- package/dist/types/arch/svm/constants.d.ts +0 -3
- package/dist/types/arch/svm/constants.d.ts.map +0 -1
- package/dist/types/arch/svm/eventsClient.d.ts +0 -88
- package/dist/types/arch/svm/eventsClient.d.ts.map +0 -1
- package/dist/types/arch/svm/types.d.ts.map +0 -1
- package/dist/types/arch/svm/utils.d.ts +0 -64
- package/dist/types/arch/svm/utils.d.ts.map +0 -1
- package/dist/types/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -67
- package/dist/types/clients/SpokePoolClient/SVMSpokePoolClient.d.ts.map +0 -1
- package/dist/types/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -34
- package/dist/types/clients/mocks/MockSvmCpiEventsClient.d.ts.map +0 -1
- package/dist/types/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -31
- package/dist/types/clients/mocks/MockSvmSpokePoolClient.d.ts.map +0 -1
- package/dist/types/gasPriceOracle/adapters/solana.d.ts +0 -9
- package/dist/types/gasPriceOracle/adapters/solana.d.ts.map +0 -1
- package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -6
- package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts.map +0 -1
- package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -6
- package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts.map +0 -1
- package/dist/types/providers/mocks/MockSolanaRpcFactory.d.ts +0 -14
- package/dist/types/providers/mocks/MockSolanaRpcFactory.d.ts.map +0 -1
- package/dist/types/providers/mocks/index.d.ts +0 -5
- package/dist/types/providers/mocks/index.d.ts.map +0 -1
- package/dist/types/providers/mocks/mockEthersProvider.d.ts.map +0 -1
- package/dist/types/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -85
- package/dist/types/relayFeeCalculator/chain-queries/svmQuery.d.ts.map +0 -1
- package/dist/types/utils/BlockFinder.d.ts +0 -23
- package/dist/types/utils/BlockFinder.d.ts.map +0 -1
- package/src/arch/evm/BlockUtils.ts +0 -209
- package/src/arch/svm/SpokeUtils.ts +0 -596
- package/src/arch/svm/constants.ts +0 -2
- package/src/arch/svm/eventsClient.ts +0 -342
- package/src/arch/svm/utils.ts +0 -233
- package/src/clients/SpokePoolClient/SVMSpokePoolClient.ts +0 -268
- package/src/clients/mocks/MockSvmCpiEventsClient.ts +0 -226
- package/src/clients/mocks/MockSvmSpokePoolClient.ts +0 -119
- package/src/gasPriceOracle/adapters/solana.ts +0 -45
- package/src/providers/mocks/MockCachedSolanaRpcFactory.ts +0 -15
- package/src/providers/mocks/MockRateLimitedSolanaRpcFactory.ts +0 -14
- package/src/providers/mocks/MockSolanaRpcFactory.ts +0 -55
- package/src/providers/mocks/index.ts +0 -4
- package/src/relayFeeCalculator/chain-queries/svmQuery.ts +0 -225
- package/src/utils/BlockFinder.ts +0 -26
- /package/dist/cjs/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +0 -0
- /package/dist/cjs/{arch/svm → svm}/types.js +0 -0
- /package/dist/esm/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +0 -0
- /package/dist/esm/{arch/svm → svm}/types.js +0 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { providers, utils } from "ethers";
|
|
2
2
|
import bs58 from "bs58";
|
|
3
|
-
import { Address as V2Address } from "@solana/kit";
|
|
4
3
|
import { BigNumber, chainIsEvm } from "./";
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -78,9 +77,9 @@ export function isValidEvmAddress(address: string): boolean {
|
|
|
78
77
|
* @returns a child `Address` type most fitting for the chain ID.
|
|
79
78
|
* @todo: Change this to `toAddress` once we remove the other `toAddress` function.
|
|
80
79
|
*/
|
|
81
|
-
export function toAddressType(address: string): Address | EvmAddress | SvmAddress {
|
|
80
|
+
export function toAddressType(address: string, chainId: number): Address | EvmAddress | SvmAddress {
|
|
82
81
|
try {
|
|
83
|
-
if (
|
|
82
|
+
if (chainIsEvm(chainId)) {
|
|
84
83
|
return EvmAddress.from(address);
|
|
85
84
|
}
|
|
86
85
|
return SvmAddress.from(address);
|
|
@@ -147,11 +146,6 @@ export class Address {
|
|
|
147
146
|
return this.toBytes32();
|
|
148
147
|
}
|
|
149
148
|
|
|
150
|
-
// Converts the address to a Buffer type.
|
|
151
|
-
toBuffer(): Buffer {
|
|
152
|
-
return Buffer.from(this.rawAddress);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
149
|
// Implements `Hexable` for `Address`. Needed for encoding purposes. This class is treated by default as a bytes32 primitive type, but can change for subclasses.
|
|
156
150
|
toHexString(): string {
|
|
157
151
|
return this.toBytes32();
|
|
@@ -191,16 +185,6 @@ export class Address {
|
|
|
191
185
|
return utils.stripZeros(this.rawAddress).length === 0;
|
|
192
186
|
}
|
|
193
187
|
|
|
194
|
-
// Forces `rawAddress` to become an SvmAddress type. This will only throw if `rawAddress.length > 32`.
|
|
195
|
-
forceSvmAddress(): SvmAddress {
|
|
196
|
-
return SvmAddress.from(this.toBase58());
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Forces `rawAddress` to become an EvmAddress type. This will throw if `rawAddress.length > 20`.
|
|
200
|
-
forceEvmAddress(): EvmAddress {
|
|
201
|
-
return EvmAddress.from(this.toEvmAddress());
|
|
202
|
-
}
|
|
203
|
-
|
|
204
188
|
// Checks if the other address is equivalent to this address.
|
|
205
189
|
eq(other: Address): boolean {
|
|
206
190
|
return this.toString() === other.toString();
|
|
@@ -239,20 +223,8 @@ export class EvmAddress extends Address {
|
|
|
239
223
|
}
|
|
240
224
|
|
|
241
225
|
// Constructs a new EvmAddress type.
|
|
242
|
-
static from(
|
|
243
|
-
|
|
244
|
-
return new this(utils.arrayify(address));
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const decodedAddress = bs58.decode(address);
|
|
248
|
-
const padding = decodedAddress.subarray(0, 12);
|
|
249
|
-
const evmAddress = decodedAddress.subarray(12);
|
|
250
|
-
|
|
251
|
-
if (padding.length !== 12 || utils.stripZeros(padding).length !== 0 || evmAddress.length !== 20) {
|
|
252
|
-
throw new Error(`Not a valid base58-encoded EVM address: ${address}`);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
return new this(evmAddress);
|
|
226
|
+
static from(hexString: string): EvmAddress {
|
|
227
|
+
return new this(utils.arrayify(hexString));
|
|
256
228
|
}
|
|
257
229
|
}
|
|
258
230
|
|
|
@@ -269,27 +241,12 @@ export class SvmAddress extends Address {
|
|
|
269
241
|
return this.toBase58();
|
|
270
242
|
}
|
|
271
243
|
|
|
272
|
-
// Small utility to convert an SvmAddress to a Solana Kit branded type.
|
|
273
|
-
toV2Address(): V2Address<string> {
|
|
274
|
-
return this.toBase58() as V2Address<string>;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Forces an SvmAddress to an EVM address string by truncating the leading 12 bytes.
|
|
278
244
|
override toEvmAddress(): string {
|
|
279
245
|
return toAddress(`0x${this.toBytes32().slice(-40)}`);
|
|
280
246
|
}
|
|
281
247
|
|
|
282
248
|
// Constructs a new SvmAddress type.
|
|
283
|
-
static from(
|
|
284
|
-
|
|
285
|
-
return new this(bs58.decode(address));
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
const decodedAddress = utils.arrayify(address);
|
|
289
|
-
if (decodedAddress.length !== 32) {
|
|
290
|
-
throw new Error(`Not a valid base16-encoded SVM address: ${address}`);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return new this(decodedAddress);
|
|
249
|
+
static from(bs58Address: string): SvmAddress {
|
|
250
|
+
return new this(bs58.decode(bs58Address));
|
|
294
251
|
}
|
|
295
252
|
}
|
package/src/utils/ArrayUtils.ts
CHANGED
|
@@ -168,15 +168,3 @@ export function includesAsync<T>(
|
|
|
168
168
|
export function isArrayOf<T>(array: unknown, predicate: (value: unknown) => value is T): array is T[] {
|
|
169
169
|
return Array.isArray(array) && array.every(predicate);
|
|
170
170
|
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Checks if a value is a Uint8Array.
|
|
174
|
-
* @param value The value to check.
|
|
175
|
-
* @returns True if the value is a Uint8Array, false otherwise.
|
|
176
|
-
*/
|
|
177
|
-
export function isUint8Array(value: unknown): value is Uint8Array {
|
|
178
|
-
return (
|
|
179
|
-
Array.isArray(value) &&
|
|
180
|
-
value.every((item) => typeof item === "number" && Number.isInteger(item) && item >= 0 && item < 256)
|
|
181
|
-
);
|
|
182
|
-
}
|
package/src/utils/BlockUtils.ts
CHANGED
|
@@ -1,9 +1,219 @@
|
|
|
1
|
+
import assert from "assert";
|
|
2
|
+
import type { Block, Provider } from "@ethersproject/abstract-provider";
|
|
3
|
+
import { clamp, sortedIndexBy } from "lodash";
|
|
4
|
+
import { chainIsOPStack, getNetworkName } from "./NetworkUtils";
|
|
1
5
|
import { isDefined } from "./TypeGuards";
|
|
2
6
|
import { getCurrentTime } from "./TimeUtils";
|
|
3
7
|
import { CachingMechanismInterface } from "../interfaces";
|
|
4
8
|
import { shouldCache } from "./CachingUtils";
|
|
5
|
-
import {
|
|
6
|
-
|
|
9
|
+
import { CHAIN_IDs, DEFAULT_CACHING_SAFE_LAG } from "../constants";
|
|
10
|
+
|
|
11
|
+
type Opts = {
|
|
12
|
+
highBlock?: number;
|
|
13
|
+
highBlockOffset?: number;
|
|
14
|
+
blockRange?: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
type BlockTimeAverage = {
|
|
18
|
+
average: number;
|
|
19
|
+
blockRange: number;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Archive requests typically commence at 128 blocks past the head of the chain.
|
|
24
|
+
// Round down to 120 blocks to avoid slipping into archive territory.
|
|
25
|
+
const defaultBlockRange = 120;
|
|
26
|
+
|
|
27
|
+
// Default offset to the high block number. This is subtracted from the block number of the high block
|
|
28
|
+
// when it is queried from the network, rather than having been specified by the caller. This is useful
|
|
29
|
+
// since the supplied Provider instance may be backed by multiple RPC providers, which can lead to some
|
|
30
|
+
// providers running slower than others and taking time to synchronise on the latest block.
|
|
31
|
+
const defaultHighBlockOffset = 10;
|
|
32
|
+
|
|
33
|
+
// Retain computations for 15 minutes.
|
|
34
|
+
const cacheTTL = 60 * 15;
|
|
35
|
+
const now = getCurrentTime(); // Seed the cache with initial values.
|
|
36
|
+
const blockTimes: { [chainId: number]: BlockTimeAverage } = {
|
|
37
|
+
[CHAIN_IDs.INK]: { average: 1, timestamp: now, blockRange: 1 },
|
|
38
|
+
[CHAIN_IDs.LINEA]: { average: 3, timestamp: now, blockRange: 1 },
|
|
39
|
+
[CHAIN_IDs.MAINNET]: { average: 12.5, timestamp: now, blockRange: 1 },
|
|
40
|
+
[CHAIN_IDs.OPTIMISM]: { average: 2, timestamp: now, blockRange: 1 },
|
|
41
|
+
[CHAIN_IDs.UNICHAIN]: { average: 1, timestamp: now, blockRange: 1 },
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @description Compute the average block time over a block range.
|
|
46
|
+
* @returns Average number of seconds per block.
|
|
47
|
+
*/
|
|
48
|
+
export async function averageBlockTime(
|
|
49
|
+
provider: Provider,
|
|
50
|
+
{ highBlock, highBlockOffset, blockRange }: Opts = {}
|
|
51
|
+
): Promise<Pick<BlockTimeAverage, "average" | "blockRange">> {
|
|
52
|
+
// Does not block for StaticJsonRpcProvider.
|
|
53
|
+
const { chainId } = await provider.getNetwork();
|
|
54
|
+
|
|
55
|
+
// OP stack chains inherit Optimism block times, but can be overridden.
|
|
56
|
+
const cache = blockTimes[chainId] ?? (chainIsOPStack(chainId) ? blockTimes[CHAIN_IDs.OPTIMISM] : undefined);
|
|
57
|
+
|
|
58
|
+
const now = getCurrentTime();
|
|
59
|
+
if (isDefined(cache) && now < cache.timestamp + cacheTTL) {
|
|
60
|
+
return { average: cache.average, blockRange: cache.blockRange };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// If the caller was not specific about highBlock, resolve it via the RPC provider. Subtract an offset
|
|
64
|
+
// to account for various RPC provider sync issues that might occur when querting the latest block.
|
|
65
|
+
if (!isDefined(highBlock)) {
|
|
66
|
+
highBlock = await provider.getBlockNumber();
|
|
67
|
+
highBlock -= highBlockOffset ?? defaultHighBlockOffset;
|
|
68
|
+
}
|
|
69
|
+
blockRange ??= defaultBlockRange;
|
|
70
|
+
|
|
71
|
+
const earliestBlockNumber = highBlock - blockRange;
|
|
72
|
+
const [firstBlock, lastBlock] = await Promise.all([
|
|
73
|
+
provider.getBlock(earliestBlockNumber),
|
|
74
|
+
provider.getBlock(highBlock),
|
|
75
|
+
]);
|
|
76
|
+
[firstBlock, lastBlock].forEach((block: Block | undefined) => {
|
|
77
|
+
if (!isDefined(block?.timestamp)) {
|
|
78
|
+
const network = getNetworkName(chainId);
|
|
79
|
+
const blockNumber = block === firstBlock ? earliestBlockNumber : highBlock;
|
|
80
|
+
throw new Error(`BlockFinder: Failed to fetch block ${blockNumber} on ${network}`);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const average = (lastBlock.timestamp - firstBlock.timestamp) / blockRange;
|
|
85
|
+
blockTimes[chainId] = { timestamp: now, average, blockRange };
|
|
86
|
+
|
|
87
|
+
return { average, blockRange };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async function estimateBlocksElapsed(seconds: number, cushionPercentage = 0.0, provider: Provider): Promise<number> {
|
|
91
|
+
const cushionMultiplier = cushionPercentage + 1.0;
|
|
92
|
+
const { average } = await averageBlockTime(provider);
|
|
93
|
+
return Math.floor((seconds * cushionMultiplier) / average);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type BlockFinderHints = {
|
|
97
|
+
lowBlock?: number;
|
|
98
|
+
highBlock?: number;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export class BlockFinder {
|
|
102
|
+
constructor(
|
|
103
|
+
private readonly provider: Provider,
|
|
104
|
+
private readonly blocks: Block[] = []
|
|
105
|
+
) {}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @notice Gets the latest block whose timestamp is <= the provided timestamp.
|
|
109
|
+
* @param number Timestamp timestamp to search.
|
|
110
|
+
* @param hints Optional low and high block to bound the search space.
|
|
111
|
+
*/
|
|
112
|
+
public async getBlockForTimestamp(timestamp: number | string, hints: BlockFinderHints = {}): Promise<Block> {
|
|
113
|
+
timestamp = Number(timestamp);
|
|
114
|
+
assert(timestamp !== undefined && timestamp !== null, "timestamp must be provided");
|
|
115
|
+
// If the last block we have stored is too early, grab the latest block.
|
|
116
|
+
if (this.blocks.length === 0 || this.blocks[this.blocks.length - 1].timestamp < timestamp) {
|
|
117
|
+
const block = await this.getLatestBlock();
|
|
118
|
+
if (timestamp >= block.timestamp) return block;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Prime the BlockFinder cache with any supplied hints.
|
|
122
|
+
// If the hint is accurate, then this will bypass the subsequent estimation.
|
|
123
|
+
await Promise.all(
|
|
124
|
+
Object.values(hints)
|
|
125
|
+
.filter((blockNumber) => isDefined(blockNumber))
|
|
126
|
+
.map((blockNumber) => this.getBlock(blockNumber))
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// Check the first block. If it's greater than our timestamp, we need to find an earlier block.
|
|
130
|
+
if (this.blocks[0].timestamp > timestamp) {
|
|
131
|
+
const initialBlock = this.blocks[0];
|
|
132
|
+
// We use a 2x cushion to reduce the number of iterations in the following loop and increase the chance
|
|
133
|
+
// that the first block we find sets a floor for the target timestamp. The loop converges on the correct block
|
|
134
|
+
// slower than the following incremental search performed by `findBlock`, so we want to minimize the number of
|
|
135
|
+
// loop iterations in favor of searching more blocks over the `findBlock` search.
|
|
136
|
+
const cushion = 1;
|
|
137
|
+
const incrementDistance = Math.max(
|
|
138
|
+
// Ensure the increment block distance is _at least_ a single block to prevent an infinite loop.
|
|
139
|
+
await estimateBlocksElapsed(initialBlock.timestamp - timestamp, cushion, this.provider),
|
|
140
|
+
1
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
// Search backwards by a constant increment until we find a block before the timestamp or hit block 0.
|
|
144
|
+
for (let multiplier = 1; ; multiplier++) {
|
|
145
|
+
const distance = multiplier * incrementDistance;
|
|
146
|
+
const blockNumber = Math.max(0, initialBlock.number - distance);
|
|
147
|
+
const block = await this.getBlock(blockNumber);
|
|
148
|
+
if (block.timestamp <= timestamp) break; // Found an earlier block.
|
|
149
|
+
assert(blockNumber > 0, "timestamp is before block 0"); // Block 0 was not earlier than this timestamp. The row.
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Find the index where the block would be inserted and use that as the end block (since it is >= the timestamp).
|
|
154
|
+
const index = sortedIndexBy(this.blocks, { timestamp } as Block, "timestamp");
|
|
155
|
+
return this.findBlock(this.blocks[index - 1], this.blocks[index], timestamp);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Grabs the most recent block and caches it.
|
|
159
|
+
private async getLatestBlock() {
|
|
160
|
+
const block = await this.provider.getBlock("latest");
|
|
161
|
+
const index = sortedIndexBy(this.blocks, block, "number");
|
|
162
|
+
if (this.blocks[index]?.number !== block.number) this.blocks.splice(index, 0, block);
|
|
163
|
+
return this.blocks[index];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Grabs the block for a particular number and caches it.
|
|
167
|
+
private async getBlock(number: number) {
|
|
168
|
+
let index = sortedIndexBy(this.blocks, { number } as Block, "number");
|
|
169
|
+
if (this.blocks[index]?.number === number) return this.blocks[index]; // Return early if block already exists.
|
|
170
|
+
const block = await this.provider.getBlock(number);
|
|
171
|
+
|
|
172
|
+
// Recompute the index after the async call since the state of this.blocks could have changed!
|
|
173
|
+
index = sortedIndexBy(this.blocks, { number } as Block, "number");
|
|
174
|
+
|
|
175
|
+
// Rerun this check to avoid duplicate insertion.
|
|
176
|
+
if (this.blocks[index]?.number === number) return this.blocks[index];
|
|
177
|
+
this.blocks.splice(index, 0, block); // A simple insert at index.
|
|
178
|
+
return block;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Return the latest block, between startBlock and endBlock, whose timestamp is <= timestamp.
|
|
182
|
+
// Effectively, this is an interpolation search algorithm to minimize block requests.
|
|
183
|
+
// Note: startBlock and endBlock _must_ be different blocks.
|
|
184
|
+
private async findBlock(_startBlock: Block, _endBlock: Block, timestamp: number): Promise<Block> {
|
|
185
|
+
const [startBlock, endBlock] = [_startBlock, _endBlock];
|
|
186
|
+
// In the case of equality, the endBlock is expected to be passed as the one whose timestamp === the requested
|
|
187
|
+
// timestamp.
|
|
188
|
+
if (endBlock.timestamp === timestamp) return endBlock;
|
|
189
|
+
|
|
190
|
+
// If there's no equality, but the blocks are adjacent, return the startBlock, since we want the returned block's
|
|
191
|
+
// timestamp to be <= the requested timestamp.
|
|
192
|
+
if (endBlock.number === startBlock.number + 1) return startBlock;
|
|
193
|
+
|
|
194
|
+
assert(endBlock.number !== startBlock.number, "startBlock cannot equal endBlock");
|
|
195
|
+
assert(
|
|
196
|
+
timestamp < endBlock.timestamp && timestamp > startBlock.timestamp,
|
|
197
|
+
"timestamp not in between start and end blocks"
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
// Interpolating the timestamp we're searching for to block numbers.
|
|
201
|
+
const totalTimeDifference = endBlock.timestamp - startBlock.timestamp;
|
|
202
|
+
const totalBlockDistance = endBlock.number - startBlock.number;
|
|
203
|
+
const blockPercentile = (timestamp - startBlock.timestamp) / totalTimeDifference;
|
|
204
|
+
const estimatedBlock = startBlock.number + Math.round(blockPercentile * totalBlockDistance);
|
|
205
|
+
|
|
206
|
+
// Clamp ensures the estimated block is strictly greater than the start block and strictly less than the end block.
|
|
207
|
+
const newBlock = await this.getBlock(clamp(estimatedBlock, startBlock.number + 1, endBlock.number - 1));
|
|
208
|
+
|
|
209
|
+
// Depending on whether the new block is below or above the timestamp, narrow the search space accordingly.
|
|
210
|
+
if (newBlock.timestamp < timestamp) {
|
|
211
|
+
return this.findBlock(newBlock, endBlock, timestamp);
|
|
212
|
+
} else {
|
|
213
|
+
return this.findBlock(startBlock, newBlock, timestamp);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
7
217
|
|
|
8
218
|
/**
|
|
9
219
|
* @notice Get the block number for a given timestamp fresh from on-chain data if not found in redis cache.
|
|
@@ -14,16 +224,16 @@ import { DEFAULT_CACHING_SAFE_LAG } from "../constants";
|
|
|
14
224
|
* or loading from cache. This is useful for testing primarily.
|
|
15
225
|
* @returns Block number for the requested timestamp.
|
|
16
226
|
*/
|
|
17
|
-
export async function getCachedBlockForTimestamp
|
|
227
|
+
export async function getCachedBlockForTimestamp(
|
|
18
228
|
chainId: number,
|
|
19
229
|
timestamp: number,
|
|
20
|
-
blockFinder: BlockFinder
|
|
230
|
+
blockFinder: BlockFinder,
|
|
21
231
|
cache?: CachingMechanismInterface,
|
|
22
232
|
hints?: BlockFinderHints
|
|
23
233
|
): Promise<number> {
|
|
24
234
|
// Resolve a convenience function to directly compute what we're
|
|
25
235
|
// looking for.
|
|
26
|
-
const resolver = async () => (await blockFinder.getBlockForTimestamp(timestamp, hints
|
|
236
|
+
const resolver = async () => (await blockFinder.getBlockForTimestamp(timestamp, hints)).number;
|
|
27
237
|
|
|
28
238
|
// If no redis client, then request block from blockFinder.
|
|
29
239
|
if (!isDefined(cache)) {
|
package/src/utils/EventUtils.ts
CHANGED
|
@@ -99,9 +99,9 @@ export function spreadEvent(args: Result | Record<string, unknown>): { [key: str
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export interface EventSearchConfig {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
102
|
+
fromBlock: number;
|
|
103
|
+
toBlock: number;
|
|
104
|
+
maxBlockLookBack?: number;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
export const eventToLog = (event: Event): Log => ({ ...event, event: event.event!, args: spreadEvent(event.args!) });
|
|
@@ -113,8 +113,8 @@ export async function paginatedEventQuery(
|
|
|
113
113
|
retryCount = 0
|
|
114
114
|
): Promise<Log[]> {
|
|
115
115
|
// If the max block look back is set to 0 then we dont need to do any pagination and can query over the whole range.
|
|
116
|
-
if (searchConfig.
|
|
117
|
-
const events = await contract.queryFilter(filter, searchConfig.
|
|
116
|
+
if (searchConfig.maxBlockLookBack === 0) {
|
|
117
|
+
const events = await contract.queryFilter(filter, searchConfig.fromBlock, searchConfig.toBlock);
|
|
118
118
|
return events.map(eventToLog);
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -132,7 +132,7 @@ export async function paginatedEventQuery(
|
|
|
132
132
|
)
|
|
133
133
|
.flat()
|
|
134
134
|
// Filter events by block number because ranges can include blocks that are outside the range specified for caching reasons.
|
|
135
|
-
.filter((event) => event.blockNumber >= searchConfig.
|
|
135
|
+
.filter((event) => event.blockNumber >= searchConfig.fromBlock && event.blockNumber <= searchConfig.toBlock)
|
|
136
136
|
.map(eventToLog)
|
|
137
137
|
);
|
|
138
138
|
} catch (error) {
|
|
@@ -159,11 +159,11 @@ export async function paginatedEventQuery(
|
|
|
159
159
|
* input range, but can include blocks outside of the desired range, so results should be filtered. Results
|
|
160
160
|
* are ordered from smallest to largest.
|
|
161
161
|
*/
|
|
162
|
-
export function getPaginatedBlockRanges({
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
162
|
+
export function getPaginatedBlockRanges({
|
|
163
|
+
fromBlock,
|
|
164
|
+
toBlock,
|
|
165
|
+
maxBlockLookBack,
|
|
166
|
+
}: EventSearchConfig): [number, number][] {
|
|
167
167
|
// If the maxBlockLookBack is undefined, we can look back as far as we like. Just return the entire range.
|
|
168
168
|
if (maxBlockLookBack === undefined) {
|
|
169
169
|
return [[fromBlock, toBlock]];
|
package/src/utils/JSONUtils.ts
CHANGED
|
@@ -33,8 +33,6 @@ export function stringifyJSONWithNumericString(obj: unknown): string {
|
|
|
33
33
|
return JSON.stringify(obj, (_key, value) => {
|
|
34
34
|
if (typeof value === "object" && value !== null && value.type === "BigNumber") {
|
|
35
35
|
return BigNumber.from(value).toString();
|
|
36
|
-
} else if (typeof value === "bigint" && value !== null) {
|
|
37
|
-
return value.toString();
|
|
38
36
|
}
|
|
39
37
|
return value;
|
|
40
38
|
});
|
package/src/utils/SpokeUtils.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { encodeAbiParameters,
|
|
1
|
+
import { encodeAbiParameters, keccak256 } from "viem";
|
|
2
2
|
import { MAX_SAFE_DEPOSIT_ID, ZERO_ADDRESS, ZERO_BYTES } from "../constants";
|
|
3
3
|
import { Deposit, RelayData } from "../interfaces";
|
|
4
4
|
import { toBytes32 } from "./AddressUtils";
|
|
5
5
|
import { BigNumber } from "./BigNumberUtils";
|
|
6
6
|
import { isMessageEmpty } from "./DepositUtils";
|
|
7
|
-
import { chainIsSvm } from "./NetworkUtils";
|
|
8
|
-
import { svm } from "../arch";
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
9
|
* Produce the RelayData for a Deposit.
|
|
@@ -65,9 +63,7 @@ export function getRelayDataHash(relayData: RelayData, destinationChainId: numbe
|
|
|
65
63
|
outputToken: toBytes32(relayData.outputToken),
|
|
66
64
|
exclusiveRelayer: toBytes32(relayData.exclusiveRelayer),
|
|
67
65
|
};
|
|
68
|
-
|
|
69
|
-
return svm.getRelayDataHash(_relayData, destinationChainId);
|
|
70
|
-
}
|
|
66
|
+
|
|
71
67
|
return keccak256(encodeAbiParameters(abi, [_relayData, destinationChainId]));
|
|
72
68
|
}
|
|
73
69
|
|
|
@@ -91,5 +87,5 @@ export function isZeroAddress(address: string): boolean {
|
|
|
91
87
|
}
|
|
92
88
|
|
|
93
89
|
export function getMessageHash(message: string): string {
|
|
94
|
-
return isMessageEmpty(message) ? ZERO_BYTES : keccak256(message as
|
|
90
|
+
return isMessageEmpty(message) ? ZERO_BYTES : keccak256(message as "0x{string}");
|
|
95
91
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Provider, Block as EthersBlock } from "@ethersproject/abstract-provider";
|
|
2
|
-
import { BlockFinder, type Block, type BlockFinderOpts as Opts, type BlockTimeAverage, type BlockFinderHints } from "../../utils/BlockFinder";
|
|
3
|
-
interface EVMBlock extends Block, EthersBlock {
|
|
4
|
-
}
|
|
5
|
-
export declare function averageBlockTime(provider: Provider, { highBlock, highBlockOffset, blockRange }?: Opts): Promise<Pick<BlockTimeAverage, "average" | "blockRange">>;
|
|
6
|
-
export declare class EVMBlockFinder extends BlockFinder<EVMBlock> {
|
|
7
|
-
private readonly provider;
|
|
8
|
-
private readonly blocks;
|
|
9
|
-
constructor(provider: Provider, blocks?: EVMBlock[]);
|
|
10
|
-
getBlockForTimestamp(timestamp: number | string, hints?: BlockFinderHints): Promise<EVMBlock>;
|
|
11
|
-
private getLatestBlock;
|
|
12
|
-
private getBlock;
|
|
13
|
-
private findBlock;
|
|
14
|
-
}
|
|
15
|
-
export {};
|