diff --git a/.changeset/angry-wombats-marry.md b/.changeset/angry-wombats-marry.md new file mode 100644 index 00000000000..ceb6caa6c87 --- /dev/null +++ b/.changeset/angry-wombats-marry.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/proxyd': minor +--- + +Fixed JSON-RPC 2.0 specification compliance by adding the optional data field on an RPCError diff --git a/proxyd/rpc.go b/proxyd/rpc.go index e34b01041fb..0c30d6439d8 100644 --- a/proxyd/rpc.go +++ b/proxyd/rpc.go @@ -57,6 +57,7 @@ func (r *RPCRes) MarshalJSON() ([]byte, error) { type RPCErr struct { Code int `json:"code"` Message string `json:"message"` + Data string `json:"data,omitempty"` HTTPErrorCode int `json:"-"` } diff --git a/proxyd/rpc_test.go b/proxyd/rpc_test.go index 0d38decf08b..e30fe9361a6 100644 --- a/proxyd/rpc_test.go +++ b/proxyd/rpc_test.go @@ -45,7 +45,7 @@ func TestRPCResJSON(t *testing.T) { `{"jsonrpc":"2.0","result":null,"id":123}`, }, { - "error result", + "error result without data", &RPCRes{ JSONRPC: JSONRPCVersion, Error: &RPCErr{ @@ -56,6 +56,19 @@ func TestRPCResJSON(t *testing.T) { }, `{"jsonrpc":"2.0","error":{"code":1234,"message":"test err"},"id":123}`, }, + { + "error result with data", + &RPCRes{ + JSONRPC: JSONRPCVersion, + Error: &RPCErr{ + Code: 1234, + Message: "test err", + Data: "revert", + }, + ID: []byte("123"), + }, + `{"jsonrpc":"2.0","error":{"code":1234,"message":"test err","data":"revert"},"id":123}`, + }, { "string ID", &RPCRes{