rewrite should support blockorhash
This commit is contained in:
parent
bb4a592d77
commit
538492a0e7
@ -3,9 +3,8 @@ package proxyd
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
|
"github.com/ethereum/go-ethereum/rpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RewriteContext struct {
|
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) {
|
func rewriteTag(rctx RewriteContext, current string) (string, bool, error) {
|
||||||
if current == "latest" {
|
jv, err := json.Marshal(current)
|
||||||
return rctx.latest.String(), true, nil
|
|
||||||
} else if strings.HasPrefix(current, "0x") {
|
|
||||||
decode, err := hexutil.DecodeUint64(current)
|
|
||||||
if err != nil {
|
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
|
return "", false, ErrRewriteBlockOutOfRange
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -334,6 +334,18 @@ func TestRewriteRequest(t *testing.T) {
|
|||||||
expected: RewriteOverrideError,
|
expected: RewriteOverrideError,
|
||||||
expectedErr: ErrRewriteBlockOutOfRange,
|
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
|
// generalize tests for other methods with same interface and behavior
|
||||||
|
Loading…
Reference in New Issue
Block a user