Choose the block-number domain for an Arbitrum contract deadline

A contract ported from Ethereum can accidentally mix the height reported by Solidity block.number with the native Arbitrum block number reported by RPC. The two counters advance differently.

Identify the clock used by the contract

For chains with standard Arbitrum One semantics, block.number exposes an approximate parent-chain block number. To read the Arbitrum block number from Solidity, use the ArbSys interface at address 100 as in the example. Import the interface when compiling.

uint256 parentLikeHeight = block.number;
uint256 childHeight = ArbSys(address(100)).arbBlockNumber();

If a stored start height came from arbBlockNumber(), compare it to a later arbBlockNumber() result. Subtracting an Ethereum-like height from the child height can produce a meaningless duration or an arithmetic revert.

Document clock semantics for consumers

Label block numbers in emitted events and off-chain APIs with their domain. Check configuration and documented behavior for other Arbitrum chains, and avoid converting a fixed count of either kind of block into a guaranteed duration in seconds. docs.arbitrum.io Arbitrum documentation