diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index 1f2693735b..9378b5f571 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -547,10 +547,22 @@ func toBlockNumArg(number *big.Int) string { if number == nil { return "latest" } - pending := big.NewInt(-1) + latest := big.NewInt(int64(rpc.LatestBlockNumber)) + if number.Cmp(latest) == 0 { + return "latest" + } + pending := big.NewInt(int64(rpc.PendingBlockNumber)) if number.Cmp(pending) == 0 { return "pending" } + finalized := big.NewInt(int64(rpc.FinalizedBlockNumber)) + if number.Cmp(finalized) == 0 { + return "finalized" + } + safe := big.NewInt(int64(rpc.SafeBlockNumber)) + if number.Cmp(safe) == 0 { + return "safe" + } return hexutil.EncodeBig(number) } diff --git a/rpc/types.go b/rpc/types.go index 07726ce178..c1cf5304ed 100644 --- a/rpc/types.go +++ b/rpc/types.go @@ -58,9 +58,11 @@ type jsonWriter interface { type BlockNumber int64 const ( - PendingBlockNumber = BlockNumber(-2) - LatestBlockNumber = BlockNumber(-1) - EarliestBlockNumber = BlockNumber(0) + SafeBlockNumber = BlockNumber(-4) + FinalizedBlockNumber = BlockNumber(-3) + PendingBlockNumber = BlockNumber(-2) + LatestBlockNumber = BlockNumber(-1) + EarliestBlockNumber = BlockNumber(0) ) // UnmarshalJSON parses the given JSON fragment into a BlockNumber. It supports: