feat(proxyd): add debug_getRawReceipts to consensus
This commit is contained in:
parent
79379f4f45
commit
a2e1667b17
@ -71,6 +71,7 @@ The following request methods are rewritten:
|
|||||||
* `eth_getBlockByNumber`
|
* `eth_getBlockByNumber`
|
||||||
* `eth_getTransactionByBlockNumberAndIndex`
|
* `eth_getTransactionByBlockNumberAndIndex`
|
||||||
* `eth_getUncleByBlockNumberAndIndex`
|
* `eth_getUncleByBlockNumberAndIndex`
|
||||||
|
* `debug_getRawReceipts`
|
||||||
|
|
||||||
And `eth_blockNumber` response is overridden with current block consensus.
|
And `eth_blockNumber` response is overridden with current block consensus.
|
||||||
|
|
||||||
|
@ -63,24 +63,26 @@ func RewriteRequest(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResul
|
|||||||
case "eth_getLogs",
|
case "eth_getLogs",
|
||||||
"eth_newFilter":
|
"eth_newFilter":
|
||||||
return rewriteRange(rctx, req, res, 0)
|
return rewriteRange(rctx, req, res, 0)
|
||||||
|
case "debug_getRawReceipts":
|
||||||
|
return rewriteParam(rctx, req, res, 0, true)
|
||||||
case "eth_getBalance",
|
case "eth_getBalance",
|
||||||
"eth_getCode",
|
"eth_getCode",
|
||||||
"eth_getTransactionCount",
|
"eth_getTransactionCount",
|
||||||
"eth_call":
|
"eth_call":
|
||||||
return rewriteParam(rctx, req, res, 1)
|
return rewriteParam(rctx, req, res, 1, false)
|
||||||
case "eth_getStorageAt":
|
case "eth_getStorageAt":
|
||||||
return rewriteParam(rctx, req, res, 2)
|
return rewriteParam(rctx, req, res, 2, false)
|
||||||
case "eth_getBlockTransactionCountByNumber",
|
case "eth_getBlockTransactionCountByNumber",
|
||||||
"eth_getUncleCountByBlockNumber",
|
"eth_getUncleCountByBlockNumber",
|
||||||
"eth_getBlockByNumber",
|
"eth_getBlockByNumber",
|
||||||
"eth_getTransactionByBlockNumberAndIndex",
|
"eth_getTransactionByBlockNumberAndIndex",
|
||||||
"eth_getUncleByBlockNumberAndIndex":
|
"eth_getUncleByBlockNumberAndIndex":
|
||||||
return rewriteParam(rctx, req, res, 0)
|
return rewriteParam(rctx, req, res, 0, false)
|
||||||
}
|
}
|
||||||
return RewriteNone, nil
|
return RewriteNone, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func rewriteParam(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int) (RewriteResult, error) {
|
func rewriteParam(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int, required bool) (RewriteResult, error) {
|
||||||
var p []interface{}
|
var p []interface{}
|
||||||
err := json.Unmarshal(req.Params, &p)
|
err := json.Unmarshal(req.Params, &p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -89,9 +91,9 @@ func rewriteParam(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int) (Rewri
|
|||||||
|
|
||||||
// we assume latest if the param is missing,
|
// we assume latest if the param is missing,
|
||||||
// and we don't rewrite if there is not enough params
|
// and we don't rewrite if there is not enough params
|
||||||
if len(p) == pos {
|
if len(p) == pos && !required {
|
||||||
p = append(p, "latest")
|
p = append(p, "latest")
|
||||||
} else if len(p) < pos {
|
} else if len(p) <= pos {
|
||||||
return RewriteNone, nil
|
return RewriteNone, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,6 +148,58 @@ func TestRewriteRequest(t *testing.T) {
|
|||||||
expected: RewriteOverrideError,
|
expected: RewriteOverrideError,
|
||||||
expectedErr: ErrRewriteBlockOutOfRange,
|
expectedErr: ErrRewriteBlockOutOfRange,
|
||||||
},
|
},
|
||||||
|
/* required parameter at pos 0 */
|
||||||
|
{
|
||||||
|
name: "debug_getRawReceipts latest",
|
||||||
|
args: args{
|
||||||
|
rctx: RewriteContext{latest: hexutil.Uint64(100)},
|
||||||
|
req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{"latest"})},
|
||||||
|
res: nil,
|
||||||
|
},
|
||||||
|
expected: RewriteOverrideRequest,
|
||||||
|
check: func(t *testing.T, args args) {
|
||||||
|
var p []string
|
||||||
|
err := json.Unmarshal(args.req.Params, &p)
|
||||||
|
require.Nil(t, err)
|
||||||
|
require.Equal(t, 1, len(p))
|
||||||
|
require.Equal(t, hexutil.Uint64(100).String(), p[0])
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug_getRawReceipts within range",
|
||||||
|
args: args{
|
||||||
|
rctx: RewriteContext{latest: hexutil.Uint64(100)},
|
||||||
|
req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{hexutil.Uint64(55).String()})},
|
||||||
|
res: nil,
|
||||||
|
},
|
||||||
|
expected: RewriteNone,
|
||||||
|
check: func(t *testing.T, args args) {
|
||||||
|
var p []string
|
||||||
|
err := json.Unmarshal(args.req.Params, &p)
|
||||||
|
require.Nil(t, err)
|
||||||
|
require.Equal(t, 1, len(p))
|
||||||
|
require.Equal(t, hexutil.Uint64(55).String(), p[0])
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug_getRawReceipts out of range",
|
||||||
|
args: args{
|
||||||
|
rctx: RewriteContext{latest: hexutil.Uint64(100)},
|
||||||
|
req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{hexutil.Uint64(111).String()})},
|
||||||
|
res: nil,
|
||||||
|
},
|
||||||
|
expected: RewriteOverrideError,
|
||||||
|
expectedErr: ErrRewriteBlockOutOfRange,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug_getRawReceipts missing parameter",
|
||||||
|
args: args{
|
||||||
|
rctx: RewriteContext{latest: hexutil.Uint64(100)},
|
||||||
|
req: &RPCReq{Method: "debug_getRawReceipts", Params: mustMarshalJSON([]string{})},
|
||||||
|
res: nil,
|
||||||
|
},
|
||||||
|
expected: RewriteNone,
|
||||||
|
},
|
||||||
/* default block parameter */
|
/* default block parameter */
|
||||||
{
|
{
|
||||||
name: "eth_getCode omit block, should add",
|
name: "eth_getCode omit block, should add",
|
||||||
|
Loading…
Reference in New Issue
Block a user