From 984e752ce52b09142ed936c337456df27128e3bc Mon Sep 17 00:00:00 2001
From: rene <41963722+renaynay@users.noreply.github.com>
Date: Tue, 12 Jan 2021 10:52:13 +0100
Subject: [PATCH] eth: return error from eth_chainID during sync before EIP-155
 activates (#21686)

This changes the chainID RPC method to return an error when EIP-155 is not yet
active at the current block height. It used to simply return zero in this case, but
that's confusing.
---
 eth/api.go | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/eth/api.go b/eth/api.go
index 6cd0fd700..be1dcbb52 100644
--- a/eth/api.go
+++ b/eth/api.go
@@ -67,12 +67,12 @@ func (api *PublicEthereumAPI) Hashrate() hexutil.Uint64 {
 }
 
 // ChainId is the EIP-155 replay-protection chain id for the current ethereum chain config.
-func (api *PublicEthereumAPI) ChainId() hexutil.Uint64 {
-	chainID := new(big.Int)
+func (api *PublicEthereumAPI) ChainId() (hexutil.Uint64, error) {
+	// if current block is at or past the EIP-155 replay-protection fork block, return chainID from config
 	if config := api.e.blockchain.Config(); config.IsEIP155(api.e.blockchain.CurrentBlock().Number()) {
-		chainID = config.ChainID
+		return (hexutil.Uint64)(config.ChainID.Uint64()), nil
 	}
-	return (hexutil.Uint64)(chainID.Uint64())
+	return hexutil.Uint64(0), fmt.Errorf("chain not synced beyond EIP-155 replay-protection fork block")
 }
 
 // PublicMinerAPI provides an API to control the miner.
-- 
GitLab