From db95c81ee17deae3745fd94eb7c2836d49e3ed67 Mon Sep 17 00:00:00 2001 From: corey Date: Mon, 13 Jul 2026 15:23:17 +0800 Subject: [PATCH] fix(node/sync): fail fast if L2CrossDomainMessenger ABI fails to parse The package-level L2CrossDomainMessengerABI dropped the parse error with a blank identifier (, _). If the generated ABI ever failed to parse, the variable would be nil and only surface later as an obscure nil-dereference. Add an init() that panics at startup so the failure is caught at deploy time. No behavior change for the (normal) success path. Context: morph-l2/morph-ideas idea #003. Co-Authored-By: Claude Opus 4.8 (1M context) --- node/sync/deposit_log.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/node/sync/deposit_log.go b/node/sync/deposit_log.go index 1c8c3007c..767a005bc 100644 --- a/node/sync/deposit_log.go +++ b/node/sync/deposit_log.go @@ -19,6 +19,15 @@ var ( L2CrossDomainMessengerABI, _ = bindings.L2CrossDomainMessengerMetaData.GetAbi() ) +// init fails fast at startup if the generated L2CrossDomainMessenger ABI cannot +// be parsed, instead of letting the dropped error above surface later as an +// obscure nil-dereference the first time L2CrossDomainMessengerABI is used. +func init() { + if _, err := bindings.L2CrossDomainMessengerMetaData.GetAbi(); err != nil { + panic(fmt.Sprintf("parse L2CrossDomainMessenger ABI: %v", err)) + } +} + func L1MessageTxFromEvent(event *bindings.L1MessageQueueWithGasPriceOracleQueueTransaction) eth.L1MessageTx { return eth.L1MessageTx{ QueueIndex: event.QueueIndex,