From f8e15a92e15fa19c29d5947778b4521792b44ee4 Mon Sep 17 00:00:00 2001 From: Peter Kieltyka Date: Thu, 17 Sep 2026 12:17:33 -0400 Subject: [PATCH 1/2] ethgas: use the arbitrum gas price paid reader for robinhood chains Adds robinhood (4663) and robinhood-testnet (46630) to CustomGasPricePaidReaders. Both are Arbitrum Orbit chains running Arbitrum Nitro, so they belong with the other arbitrum entries. Without this they fall through to DefaultGasPricePaidReader, which reports each transaction's GasFeeCap -- the maximum the sender was willing to pay. On these chains that overstates the price actually paid: eth_maxPriorityFeePerGas returns 0, and ordering is first-come-first-served by sequencer arrival, so tips cannot affect inclusion and effectively nothing is paid above the base fee. arbitrumGasPricePaidReader reports block.BaseFee() instead, which is what was really paid. Affects gas statistics only, not transaction correctness. Co-Authored-By: Claude Opus 5 (1M context) --- ethgas/readers.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ethgas/readers.go b/ethgas/readers.go index ab8ad891..2c047c06 100644 --- a/ethgas/readers.go +++ b/ethgas/readers.go @@ -18,6 +18,8 @@ var CustomGasPricePaidReaders = map[uint64]GasPriceReader{ 421613: arbitrumGasPricePaidReader, // arbitrum goerli 421614: arbitrumGasPricePaidReader, // arbitrum sepolia 200: arbitrumGasPricePaidReader, // arbitrum xdai + 4663: arbitrumGasPricePaidReader, // robinhood + 46630: arbitrumGasPricePaidReader, // robinhood testnet } func DefaultGasPriceBidReader(block *ethmonitor.Block) []*big.Int { From 93e1f14e788f6fcfdef72cf003266106b4295224 Mon Sep 17 00:00:00 2001 From: Peter Kieltyka Date: Thu, 17 Sep 2026 12:22:32 -0400 Subject: [PATCH 2/2] ethrpc: add robinhood chains to the Networks registry Adds robinhood (4663) and robinhood-testnet (46630) to ethrpc.Networks, which ethreceipts consults for NumBlocksToFinality when a caller does not set its own. NumBlocksToFinality 50 matches every arbitrum entry in this map (arbitrum, arbitrum-testnet, arbitrum-nova), which is the right reference since robinhood is an Arbitrum Orbit chain. Without an entry both chains fell back to DefaultNumBlocksToFinality of 40 -- workable, but implicit and inconsistent with the rest of the family. Note 50 blocks is ~5s at robinhood's 100ms block time, against ~12.5s for arbitrum at 250ms. Reorg depth is block-based, so matching the family's depth is the sensible reading, but the wall-clock window is correspondingly shorter. There is no ArbitrumChain field on the Network struct -- only OptimismChain -- so nothing else to set here. Co-Authored-By: Claude Opus 5 (1M context) --- ethrpc/networks.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ethrpc/networks.go b/ethrpc/networks.go index bae10cc7..aeea7762 100644 --- a/ethrpc/networks.go +++ b/ethrpc/networks.go @@ -154,4 +154,14 @@ var Networks = map[uint64]Network{ NumBlocksToFinality: 50, OptimismChain: true, }, + 4663: { + Name: "robinhood", + ChainID: 4663, + NumBlocksToFinality: 50, + }, + 46630: { + Name: "robinhood-testnet", + ChainID: 46630, + NumBlocksToFinality: 50, + }, }