rpc: implement eth_chainId (#379)

* add eth_chainId

* add nolint

* use clientCtx chainID

* rpc: eth_chainId test

Co-authored-by: Federico Kunze <federico.kunze94@gmail.com>
This commit is contained in:
noot 2020-07-08 03:57:19 -04:00 committed by GitHub
parent c4cf33a9bb
commit 1d8c997585
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"log" "log"
"math/big" "math/big"
"strconv"
"strings" "strings"
"sync" "sync"
@ -67,6 +68,17 @@ func (e *PublicEthAPI) ProtocolVersion() hexutil.Uint {
return hexutil.Uint(version.ProtocolVersion) return hexutil.Uint(version.ProtocolVersion)
} }
// ChainId returns the chain's identifier in hex format
func (e *PublicEthAPI) ChainId() (hexutil.Uint, error) { // nolint
// parse the chainID from a integer string
intChainID, err := strconv.ParseUint(e.cliCtx.ChainID, 0, 64)
if err != nil {
return 0, fmt.Errorf("invalid chainID: %s, must be integer format", e.cliCtx.ChainID)
}
return hexutil.Uint(intChainID), nil
}
// Syncing returns whether or not the current node is syncing with other peers. Returns false if not, or a struct // Syncing returns whether or not the current node is syncing with other peers. Returns false if not, or a struct
// outlining the state of the sync if it is. // outlining the state of the sync if it is.
func (e *PublicEthAPI) Syncing() (interface{}, error) { func (e *PublicEthAPI) Syncing() (interface{}, error) {

View File

@ -130,6 +130,15 @@ func TestEth_protocolVersion(t *testing.T) {
require.Equal(t, expectedRes, res, "expected: %s got: %s\n", expectedRes.String(), rpcRes.Result) require.Equal(t, expectedRes, res, "expected: %s got: %s\n", expectedRes.String(), rpcRes.Result)
} }
func TestEth_chainId(t *testing.T) {
rpcRes := call(t, "eth_chainId", []string{})
var res hexutil.Uint
err := res.UnmarshalJSON(rpcRes.Result)
require.NoError(t, err)
require.NotEqual(t, "0x0", res.String())
}
func TestEth_blockNumber(t *testing.T) { func TestEth_blockNumber(t *testing.T) {
rpcRes := call(t, "eth_blockNumber", []string{}) rpcRes := call(t, "eth_blockNumber", []string{})