From 6c05102188ad0571f54d00b91a9468308bacf0ed Mon Sep 17 00:00:00 2001
From: Daniel Liu <liudaniel@qq.com>
Date: Thu, 13 Jun 2024 17:20:22 +0800
Subject: [PATCH] internal/ethapi: error if tx args includes ChainId not match
 local (#25157)

---
 internal/ethapi/transaction_args.go | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go
index 662381c544a4d..34388ebf343d6 100644
--- a/internal/ethapi/transaction_args.go
+++ b/internal/ethapi/transaction_args.go
@@ -165,9 +165,15 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend) error {
 		args.Gas = &estimated
 		log.Trace("Estimate gas usage automatically", "gas", args.Gas)
 	}
-	if args.ChainID == nil {
-		id := (*hexutil.Big)(b.ChainConfig().ChainId)
-		args.ChainID = id
+	// If chain id is provided, ensure it matches the local chain id. Otherwise, set the local
+	// chain id as the default.
+	want := b.ChainConfig().ChainId
+	if args.ChainID != nil {
+		if have := (*big.Int)(args.ChainID); have.Cmp(want) != 0 {
+			return fmt.Errorf("chainId does not match node's (have=%v, want=%v)", have, want)
+		}
+	} else {
+		args.ChainID = (*hexutil.Big)(want)
 	}
 	return nil
 }