Skip to content

Commit 67a2948

Browse files
authored
improve(constants): Autogenerate bundle block end buffers (#2866)
1 parent 04b4e6c commit 67a2948

File tree

1 file changed

+32
-43
lines changed

1 file changed

+32
-43
lines changed

src/common/Constants.ts

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { isDefined } from "../utils/TypeGuards";
44
import {
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

214203
export const DEFAULT_RELAYER_GAS_PADDING = ".15"; // Padding on token- and message-based relayer fill gas estimates.
215204
export const DEFAULT_RELAYER_GAS_MULTIPLIER = "1.0"; // Multiplier on pre-profitability token-only gas estimates.

0 commit comments

Comments
 (0)