rewrite should support blockorhash
This commit is contained in:
parent
bb4a592d77
commit
538492a0e7
@ -3,9 +3,8 @@ package proxyd
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||
"github.com/ethereum/go-ethereum/rpc"
|
||||
)
|
||||
|
||||
type RewriteContext struct {
|
||||
@ -159,15 +158,21 @@ func rewriteTagMap(rctx RewriteContext, m map[string]interface{}, key string) (b
|
||||
}
|
||||
|
||||
func rewriteTag(rctx RewriteContext, current string) (string, bool, error) {
|
||||
if current == "latest" {
|
||||
return rctx.latest.String(), true, nil
|
||||
} else if strings.HasPrefix(current, "0x") {
|
||||
decode, err := hexutil.DecodeUint64(current)
|
||||
jv, err := json.Marshal(current)
|
||||
if err != nil {
|
||||
return current, false, err
|
||||
return "", false, err
|
||||
}
|
||||
b := hexutil.Uint64(decode)
|
||||
if b > rctx.latest {
|
||||
|
||||
var bnh rpc.BlockNumberOrHash
|
||||
err = bnh.UnmarshalJSON(jv)
|
||||
if err != nil {
|
||||
return "", false, err
|
||||
}
|
||||
|
||||
if bnh.BlockNumber != nil && *bnh.BlockNumber == rpc.LatestBlockNumber {
|
||||
return rctx.latest.String(), true, nil
|
||||
} else if bnh.BlockNumber != nil {
|
||||
if hexutil.Uint64(bnh.BlockNumber.Int64()) > rctx.latest {
|
||||
return "", false, ErrRewriteBlockOutOfRange
|
||||
}
|
||||
}
|
||||
|
@ -334,6 +334,18 @@ func TestRewriteRequest(t *testing.T) {
|
||||
expected: RewriteOverrideError,
|
||||
expectedErr: ErrRewriteBlockOutOfRange,
|
||||
},
|
||||
{
|
||||
name: "eth_getStorageAt using rpc.BlockNumberOrHash",
|
||||
args: args{
|
||||
rctx: RewriteContext{latest: hexutil.Uint64(100)},
|
||||
req: &RPCReq{Method: "eth_getStorageAt", Params: mustMarshalJSON([]string{
|
||||
"0xae851f927ee40de99aabb7461c00f9622ab91d60",
|
||||
"0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08",
|
||||
"0x1c4840bcb3de3ac403c0075b46c2c47d4396c5b624b6e1b2874ec04e8879b483"})},
|
||||
res: nil,
|
||||
},
|
||||
expected: RewriteNone,
|
||||
},
|
||||
}
|
||||
|
||||
// generalize tests for other methods with same interface and behavior
|
||||
|
Loading…
Reference in New Issue
Block a user