feat(proxyd): add debug_getRawReceipts to consensus

This commit is contained in:
Felipe Andrade 2023-05-31 10:04:20 -07:00
parent 79379f4f45
commit a2e1667b17
3 changed files with 61 additions and 6 deletions

@ -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",