@@ -4,6 +4,7 @@ import { isDefined } from "../utils/TypeGuards";
44import {
55 chainIsOPStack ,
66 chainIsOrbit ,
7+ chainIsProd ,
78 CHAIN_IDs ,
89 TOKEN_SYMBOLS_MAP ,
910 Signer ,
@@ -166,50 +167,38 @@ export const CHAIN_MAX_BLOCK_LOOKBACK = resolveRpcConfig();
166167// also give enough buffer time so that any reasonable fill on the chain
167168// can be matched with a deposit on the origin chain, so something like
168169// ~1-2 mins per chain.
169- export const BUNDLE_END_BLOCK_BUFFERS = {
170- [ CHAIN_IDs . ALEPH_ZERO ] : 0 , // Chain is disabled.
171- [ CHAIN_IDs . ARBITRUM ] : 240 , // ~0.25s/block. Arbitrum is a centralized sequencer
172- [ CHAIN_IDs . BASE ] : 60 , // 2s/block. Same finality profile as Optimism
173- [ CHAIN_IDs . BLAST ] : 60 ,
174- [ CHAIN_IDs . BOBA ] : 0 , // **UPDATE** 288 is disabled so there should be no buffer.
175- [ CHAIN_IDs . BSC ] : 5 , // 2x the average 2.5 finality block time https://www.bnbchain.org/en/blog/the-coming-fastfinality-on-bsc
176- [ CHAIN_IDs . HYPEREVM ] : 120 , // big blocks are 60s/block
177- [ CHAIN_IDs . LENS ] : 120 , // ~1s/block. Uses same sequencing logic as ZkSync.
178- [ CHAIN_IDs . LINEA ] : 40 , // At 3s/block, 2 mins = 40 blocks.
179- [ CHAIN_IDs . LISK ] : 60 , // 2s/block gives 2 mins buffer time.
180- [ CHAIN_IDs . INK ] : 120 , // 1s/block gives 2 mins buffer time
181- [ CHAIN_IDs . MAINNET ] : 5 , // 12s/block
182- [ CHAIN_IDs . MODE ] : 60 , // 2s/block. Same finality profile as Optimism
183- [ CHAIN_IDs . MONAD ] : 150 , // ~400ms/block. 0.8s finality
184- [ CHAIN_IDs . OPTIMISM ] : 60 , // 2s/block
185- [ CHAIN_IDs . PLASMA ] : 180 , // ~1s/block variable. Finality guarantees are less certain, be a bit more conservative.
186- [ CHAIN_IDs . POLYGON ] : 128 , // 2s/block. Polygon reorgs often so this number is set larger than the largest observed reorg.
187- [ CHAIN_IDs . REDSTONE ] : 0 , // Disabled
188- [ CHAIN_IDs . SCROLL ] : 40 , // ~3s/block
189- [ CHAIN_IDs . SOLANA ] : 150 , // ~400ms/block
190- [ CHAIN_IDs . SONEIUM ] : 60 , // 2s/block
191- [ CHAIN_IDs . UNICHAIN ] : 120 , // 1s/block gives 2 mins buffer time
192- [ CHAIN_IDs . WORLD_CHAIN ] : 60 , // 2s/block
193- [ CHAIN_IDs . ZK_SYNC ] : 120 , // ~1s/block. ZkSync is a centralized sequencer but is relatively unstable so this is kept higher than 0
194- [ CHAIN_IDs . ZORA ] : 60 , // 2s/block
195- // Testnets:
196- [ CHAIN_IDs . ARBITRUM_SEPOLIA ] : 0 ,
197- [ CHAIN_IDs . BASE_SEPOLIA ] : 0 ,
198- [ CHAIN_IDs . BLAST_SEPOLIA ] : 0 ,
199- [ CHAIN_IDs . INK_SEPOLIA ] : 0 ,
200- [ CHAIN_IDs . HYPEREVM_TESTNET ] : 0 ,
201- [ CHAIN_IDs . LENS_SEPOLIA ] : 0 ,
202- [ CHAIN_IDs . LISK_SEPOLIA ] : 0 ,
203- [ CHAIN_IDs . MODE_SEPOLIA ] : 0 ,
204- [ CHAIN_IDs . MONAD_TESTNET ] : 0 ,
205- [ CHAIN_IDs . OPTIMISM_SEPOLIA ] : 0 ,
206- [ CHAIN_IDs . PLASMA_TESTNET ] : 0 ,
207- [ CHAIN_IDs . POLYGON_AMOY ] : 0 ,
208- [ CHAIN_IDs . TATARA ] : 0 ,
209- [ CHAIN_IDs . UNICHAIN_SEPOLIA ] : 0 ,
210- [ CHAIN_IDs . SEPOLIA ] : 0 ,
211- [ CHAIN_IDs . BOB_SEPOLIA ] : 0 ,
170+ const resolveChainBundleBuffers = ( ) => {
171+ const DEFAULT_CHAIN_BUFFER = 1024 ;
172+
173+ const defaultBuffers = {
174+ [ ChainFamily . OP_STACK ] : 60 , // 2s/block
175+ [ ChainFamily . ORBIT ] : 240 , // ~250ms/block
176+ [ ChainFamily . SVM ] : 150 , // ~400ms/slot
177+ [ ChainFamily . ZK_STACK ] : 120 , // ~1s/block
178+ } ;
179+
180+ const buffers = {
181+ [ CHAIN_IDs . ARBITRUM ] : defaultBuffers [ ChainFamily . ORBIT ] , // Inherit Orbit default.
182+ [ CHAIN_IDs . BSC ] : 5 , // 2x the average 2.5 block finality (https://www.bnbchain.org/en/blog/the-coming-fastfinality-on-bsc)
183+ [ CHAIN_IDs . HYPEREVM ] : 120 , // 60s/big block
184+ [ CHAIN_IDs . LINEA ] : 40 , // ~3s/block
185+ [ CHAIN_IDs . MAINNET ] : 5 , // ~12s/block
186+ [ CHAIN_IDs . MONAD ] : 150 , // ~400ms/block, 2 block finality
187+ [ CHAIN_IDs . PLASMA ] : 180 , // ~1s/block variable. Finality guarantees are less certain, be a bit more conservative.
188+ [ CHAIN_IDs . POLYGON ] : 128 , // ~2s/block. Polygon has historically re-orged often.
189+ [ CHAIN_IDs . SCROLL ] : 40 , // ~3s/block.
190+ [ CHAIN_IDs . ZK_SYNC ] : defaultBuffers [ ChainFamily . ZK_STACK ] , // Inherit ZK_STACK default.
191+ } ;
192+
193+ return Object . fromEntries (
194+ Object . entries ( PUBLIC_NETWORKS ) . map ( ( [ _chainId , { family } ] ) => {
195+ const chainId = Number ( _chainId ) ;
196+ const buffer = chainIsProd ( chainId ) ? buffers [ chainId ] ?? defaultBuffers [ family ] ?? DEFAULT_CHAIN_BUFFER : 0 ;
197+ return [ chainId , buffer ] ;
198+ } )
199+ ) ;
212200} ;
201+ export const BUNDLE_END_BLOCK_BUFFERS = resolveChainBundleBuffers ( ) ;
213202
214203export const DEFAULT_RELAYER_GAS_PADDING = ".15" ; // Padding on token- and message-based relayer fill gas estimates.
215204export const DEFAULT_RELAYER_GAS_MULTIPLIER = "1.0" ; // Multiplier on pre-profitability token-only gas estimates.
0 commit comments