fix input
This commit is contained in:
parent
a3cf38f8b2
commit
804a57566f
@ -257,11 +257,6 @@ const ReceiptsTargetAlchemyGetTransactionReceipts = "alchemy_getTransactionRecei
|
||||
const ReceiptsTargetParityGetTransactionReceipts = "parity_getBlockReceipts"
|
||||
const ReceiptsTargetEthGetTransactionReceipts = "eth_getBlockReceipts"
|
||||
|
||||
type ConsensusGetReceiptsRequest struct {
|
||||
BlockOrHash *rpc.BlockNumberOrHash `json:"blockOrHash"`
|
||||
Transactions []common.Hash `json:"transactions"`
|
||||
}
|
||||
|
||||
type ConsensusGetReceiptsResult struct {
|
||||
Method string `json:"method"`
|
||||
Result interface{} `json:"result"`
|
||||
@ -442,12 +437,11 @@ func (b *Backend) doForward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool
|
||||
if rpcReq.Method == ConsensusGetReceiptsMethod {
|
||||
translatedReqs[string(rpcReq.ID)] = rpcReq
|
||||
rpcReq.Method = b.receiptsTarget
|
||||
var reqParams []ConsensusGetReceiptsRequest
|
||||
var reqParams []rpc.BlockNumberOrHash
|
||||
err := json.Unmarshal(rpcReq.Params, &reqParams)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidRequest("invalid request")
|
||||
}
|
||||
bnh := reqParams[0].BlockOrHash
|
||||
|
||||
var translatedParams []byte
|
||||
switch rpcReq.Method {
|
||||
@ -457,20 +451,20 @@ func (b *Backend) doForward(ctx context.Context, rpcReqs []*RPCReq, isBatch bool
|
||||
// conventional methods use an array of strings having either block number or block hash
|
||||
// i.e. ["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"]
|
||||
params := make([]string, 1)
|
||||
if bnh.BlockNumber != nil {
|
||||
params[0] = bnh.BlockNumber.String()
|
||||
if reqParams[0].BlockNumber != nil {
|
||||
params[0] = reqParams[0].BlockNumber.String()
|
||||
} else {
|
||||
params[0] = bnh.BlockHash.Hex()
|
||||
params[0] = reqParams[0].BlockHash.Hex()
|
||||
}
|
||||
translatedParams = mustMarshalJSON(params)
|
||||
case ReceiptsTargetAlchemyGetTransactionReceipts:
|
||||
// alchemy uses an array of object with either block number or block hash
|
||||
// i.e. [{ blockHash: "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b" }]
|
||||
params := make([]BlockHashOrNumberParameter, 1)
|
||||
if bnh.BlockNumber != nil {
|
||||
params[0].BlockNumber = bnh.BlockNumber
|
||||
if reqParams[0].BlockNumber != nil {
|
||||
params[0].BlockNumber = reqParams[0].BlockNumber
|
||||
} else {
|
||||
params[0].BlockHash = bnh.BlockHash
|
||||
params[0].BlockHash = reqParams[0].BlockHash
|
||||
}
|
||||
translatedParams = mustMarshalJSON(params)
|
||||
default:
|
||||
|
@ -793,8 +793,8 @@ func TestConsensus(t *testing.T) {
|
||||
// reset request counts
|
||||
nodes["node1"].mockBackend.Reset()
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -820,8 +820,9 @@ func TestConsensus(t *testing.T) {
|
||||
// reset request counts
|
||||
nodes["node1"].mockBackend.Reset()
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "latest"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"latest"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -847,8 +848,9 @@ func TestConsensus(t *testing.T) {
|
||||
// reset request counts
|
||||
nodes["node1"].mockBackend.Reset()
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "0x55"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"0x55"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -877,8 +879,9 @@ func TestConsensus(t *testing.T) {
|
||||
nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts"))
|
||||
defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts"))
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -908,8 +911,9 @@ func TestConsensus(t *testing.T) {
|
||||
nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts"))
|
||||
defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts"))
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "0x55"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"0x55"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -939,8 +943,9 @@ func TestConsensus(t *testing.T) {
|
||||
nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("alchemy_getTransactionReceipts"))
|
||||
defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts"))
|
||||
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "latest"}})
|
||||
resRaw, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"latest"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, statusCode)
|
||||
|
||||
@ -966,8 +971,9 @@ func TestConsensus(t *testing.T) {
|
||||
nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("unsupported_consensus_receipts_target"))
|
||||
defer nodes["node1"].backend.Override(proxyd.WithConsensusReceiptTarget("debug_getRawReceipts"))
|
||||
|
||||
_, statusCode, err := client.SendRPC("consensus_getReceipts", []interface{}{map[string]interface{}{
|
||||
"blockOrHash": "latest"}})
|
||||
_, statusCode, err := client.SendRPC("consensus_getReceipts",
|
||||
[]interface{}{"latest"})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 400, statusCode)
|
||||
})
|
||||
@ -978,7 +984,7 @@ func TestConsensus(t *testing.T) {
|
||||
|
||||
_, statusCode, err := client.SendBatchRPC(
|
||||
NewRPCReq("1", "eth_getBlockByNumber", []interface{}{"latest"}),
|
||||
NewRPCReq("2", "consensus_getReceipts", []interface{}{"0x102"}),
|
||||
NewRPCReq("2", "consensus_getReceipts", []interface{}{"0x55"}),
|
||||
NewRPCReq("3", "eth_getBlockByNumber", []interface{}{"0xe1"}))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 400, statusCode)
|
||||
|
@ -63,9 +63,7 @@ func RewriteRequest(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResul
|
||||
case "eth_getLogs",
|
||||
"eth_newFilter":
|
||||
return rewriteRange(rctx, req, res, 0)
|
||||
case "consensus_getReceipts":
|
||||
return rewriteGetReceiptsParams(rctx, req, res)
|
||||
case "debug_getRawReceipts":
|
||||
case "debug_getRawReceipts", "consensus_getReceipts":
|
||||
return rewriteParam(rctx, req, res, 0, true)
|
||||
case "eth_getBalance",
|
||||
"eth_getCode",
|
||||
@ -84,38 +82,6 @@ func RewriteRequest(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResul
|
||||
return RewriteNone, nil
|
||||
}
|
||||
|
||||
func rewriteGetReceiptsParams(rctx RewriteContext, req *RPCReq, res *RPCRes) (RewriteResult, error) {
|
||||
var p []interface{}
|
||||
err := json.Unmarshal(req.Params, &p)
|
||||
if err != nil {
|
||||
return RewriteOverrideError, err
|
||||
}
|
||||
|
||||
if len(p) != 1 {
|
||||
return RewriteNone, nil
|
||||
}
|
||||
|
||||
if m, ok := p[0].(map[string]interface{}); !ok || m["blockOrHash"] == nil {
|
||||
return RewriteNone, nil
|
||||
}
|
||||
|
||||
val, rw, err := rewriteTag(rctx, p[0].(map[string]interface{})["blockOrHash"].(string))
|
||||
if err != nil {
|
||||
return RewriteOverrideError, err
|
||||
}
|
||||
|
||||
if rw {
|
||||
p[0].(map[string]interface{})["blockOrHash"] = val
|
||||
paramRaw, err := json.Marshal(p)
|
||||
if err != nil {
|
||||
return RewriteOverrideError, err
|
||||
}
|
||||
req.Params = paramRaw
|
||||
return RewriteOverrideRequest, nil
|
||||
}
|
||||
return RewriteNone, nil
|
||||
}
|
||||
|
||||
func rewriteParam(rctx RewriteContext, req *RPCReq, res *RPCRes, pos int, required bool) (RewriteResult, error) {
|
||||
var p []interface{}
|
||||
err := json.Unmarshal(req.Params, &p)
|
||||
|
Loading…
Reference in New Issue
Block a user