From 107f556b2d9811ea2d64c065531dcae33997fcb7 Mon Sep 17 00:00:00 2001
From: HackyMiner <hackyminer@gmail.com>
Date: Sun, 30 Sep 2018 05:07:02 +0900
Subject: [PATCH] internal/ethapi: add eth_chainId method (#17617)

This implements EIP-695.
---
 eth/api.go                  | 9 +++++++++
 internal/web3ext/web3ext.go | 5 +++++
 2 files changed, 14 insertions(+)

diff --git a/eth/api.go b/eth/api.go
index 708f75a78..3ec3afb81 100644
--- a/eth/api.go
+++ b/eth/api.go
@@ -67,6 +67,15 @@ func (api *PublicEthereumAPI) Hashrate() hexutil.Uint64 {
 	return hexutil.Uint64(api.e.Miner().HashRate())
 }
 
+// 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)
+	if config := api.e.chainConfig; config.IsEIP155(api.e.blockchain.CurrentBlock().Number()) {
+		chainID = config.ChainID
+	}
+	return (hexutil.Uint64)(chainID.Uint64())
+}
+
 // PublicMinerAPI provides an API to control the miner.
 // It offers only methods that operate on data that pose no security risk when it is publicly accessible.
 type PublicMinerAPI struct {
diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go
index f4eb47a12..bf4b7808f 100644
--- a/internal/web3ext/web3ext.go
+++ b/internal/web3ext/web3ext.go
@@ -433,6 +433,11 @@ const Eth_JS = `
 web3._extend({
 	property: 'eth',
 	methods: [
+		new web3._extend.Method({
+			name: 'chainId',
+			call: 'eth_chainId',
+			params: 0
+		}),
 		new web3._extend.Method({
 			name: 'sign',
 			call: 'eth_sign',
-- 
GitLab