diff --git a/src/debug/getters.yaml b/src/debug/getters.yaml index a1a8f6fd0..62978425a 100644 --- a/src/debug/getters.yaml +++ b/src/debug/getters.yaml @@ -57,7 +57,9 @@ result: name: EIP-2718 binary-encoded transaction schema: - $ref: '#/components/schemas/bytes' + oneOf: + - $ref: '#/components/schemas/notFound' + - $ref: '#/components/schemas/bytes' examples: - name: debug_getRawTransaction example params: diff --git a/src/eth/transaction.yaml b/src/eth/transaction.yaml index bbef8c8e3..d6a12efdf 100644 --- a/src/eth/transaction.yaml +++ b/src/eth/transaction.yaml @@ -124,6 +124,87 @@ v: '0xfe7' r: '0x84caf09aefbd5e539295acc67217563438a4efb224879b6855f56857fa2037d3' s: '0x5e863be3829812c81439f0ae9d8ecb832b531d651fb234c848d1bf45e62be8b9' +- name: eth_getRawTransactionByHash + summary: Returns the raw RLP-encoded transaction bytes requested by transaction hash. + params: + - name: Transaction hash + required: true + schema: + $ref: '#/components/schemas/hash32' + result: + name: Raw transaction + schema: + oneOf: + - $ref: '#/components/schemas/notFound' + - $ref: '#/components/schemas/bytes' + examples: + - name: eth_getRawTransactionByHash example + params: + - name: Transaction hash + value: '0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44' + result: + name: Raw transaction + value: '0x02f86f010185012a05f20085012a05f2008252089400000000219ab540356cbb839cbe05303d7705fa8806f05b59d3b2000080c080a09a70c8a9f7255b4f5e36a4d14c5fd5c1f7da60ba7cda7a2aa7b6e5d5a41e5f0a07b2da7e3a8d15b2a61fb4e0e1a6f47c3b82d6e4f9c1a0b3e5d7c2f4a6b8d0e2' +- name: eth_getRawTransactionByBlockHashAndIndex + summary: Returns the raw RLP-encoded transaction bytes by block hash and transaction index position. + params: + - name: Block hash + required: true + schema: + $ref: '#/components/schemas/hash32' + - name: Transaction index + required: true + schema: + $ref: '#/components/schemas/uint' + result: + name: Raw transaction + schema: + oneOf: + - $ref: '#/components/schemas/notFound' + - $ref: '#/components/schemas/bytes' + errors: + - code: 4444 + message: Pruned history unavailable + examples: + - name: eth_getRawTransactionByBlockHashAndIndex example + params: + - name: Block hash + value: '0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7' + - name: Transaction index + value: '0x2' + result: + name: Raw transaction + value: '0x02f86f010185012a05f20085012a05f2008252089400000000219ab540356cbb839cbe05303d7705fa8806f05b59d3b2000080c080a09a70c8a9f7255b4f5e36a4d14c5fd5c1f7da60ba7cda7a2aa7b6e5d5a41e5f0a07b2da7e3a8d15b2a61fb4e0e1a6f47c3b82d6e4f9c1a0b3e5d7c2f4a6b8d0e2' +- name: eth_getRawTransactionByBlockNumberAndIndex + summary: Returns the raw RLP-encoded transaction bytes by block number and transaction index position. + params: + - name: Block + required: true + schema: + $ref: '#/components/schemas/BlockNumberOrTag' + - name: Transaction index + required: true + schema: + $ref: '#/components/schemas/uint' + result: + name: Raw transaction + schema: + oneOf: + - $ref: '#/components/schemas/notFound' + - $ref: '#/components/schemas/bytes' + errors: + - code: 4444 + message: Pruned history unavailable + examples: + - name: eth_getRawTransactionByBlockNumberAndIndex example + params: + - name: Block + value: '0x1442e' + - name: Transaction index + value: '0x2' + result: + name: Raw transaction + value: '0x02f86f010185012a05f20085012a05f2008252089400000000219ab540356cbb839cbe05303d7705fa8806f05b59d3b2000080c080a09a70c8a9f7255b4f5e36a4d14c5fd5c1f7da60ba7cda7a2aa7b6e5d5a41e5f0a07b2da7e3a8d15b2a61fb4e0e1a6f47c3b82d6e4f9c1a0b3e5d7c2f4a6b8d0e2' - name: eth_getTransactionReceipt summary: Returns the receipt of a transaction by transaction hash. params: diff --git a/tests/debug_getRawTransaction/get-notfound-tx.io b/tests/debug_getRawTransaction/get-notfound-tx.io new file mode 100644 index 000000000..56460779c --- /dev/null +++ b/tests/debug_getRawTransaction/get-notfound-tx.io @@ -0,0 +1,3 @@ +// gets a non-existent transaction +>> {"jsonrpc":"2.0","id":1,"method":"debug_getRawTransaction","params":["0x00000000000000000000000000000000000000000000000000000000deadbeef"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByBlockHashAndIndex/get-block-n.io b/tests/eth_getRawTransactionByBlockHashAndIndex/get-block-n.io new file mode 100644 index 000000000..f395ba2f1 --- /dev/null +++ b/tests/eth_getRawTransactionByBlockHashAndIndex/get-block-n.io @@ -0,0 +1,3 @@ +// gets raw tx 0 in a non-empty block by block hash +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockHashAndIndex","params":["0x79ba0368c2c6563a7d263695b583dcc6d1c25d4988daa0105804d38bdd987f2f","0x0"]} +<< {"jsonrpc":"2.0","id":1,"result":"0xf889800183013a548080b83c600d380380600d6000396000f360004381526020014681526020014181526020014881526020014481526020013281526020013481526020016000f31ca0d642ba4d1f9388c5fd312bb9fb42d189a0b3c796de55093c85f30802a85147c8a037aa8680923f811a6988c03dd414ca00cd25d6876ba5925c7ca8ac6aad21669d"} diff --git a/tests/eth_getRawTransactionByBlockHashAndIndex/get-index-out-of-range.io b/tests/eth_getRawTransactionByBlockHashAndIndex/get-index-out-of-range.io new file mode 100644 index 000000000..caab11f01 --- /dev/null +++ b/tests/eth_getRawTransactionByBlockHashAndIndex/get-index-out-of-range.io @@ -0,0 +1,3 @@ +// gets raw tx with index exceeding block transaction count +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockHashAndIndex","params":["0x79ba0368c2c6563a7d263695b583dcc6d1c25d4988daa0105804d38bdd987f2f","0x4"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByBlockHashAndIndex/get-notfound-block.io b/tests/eth_getRawTransactionByBlockHashAndIndex/get-notfound-block.io new file mode 100644 index 000000000..be27b0b0f --- /dev/null +++ b/tests/eth_getRawTransactionByBlockHashAndIndex/get-notfound-block.io @@ -0,0 +1,3 @@ +// gets raw tx from a non-existent block hash +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockHashAndIndex","params":["0x00000000000000000000000000000000000000000000000000000000deadbeef","0x0"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByBlockNumberAndIndex/get-block-n.io b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-block-n.io new file mode 100644 index 000000000..f926b81f5 --- /dev/null +++ b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-block-n.io @@ -0,0 +1,3 @@ +// gets raw tx 0 in a non-empty block by block number +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockNumberAndIndex","params":["0x1","0x0"]} +<< {"jsonrpc":"2.0","id":1,"result":"0xf889800183013a548080b83c600d380380600d6000396000f360004381526020014681526020014181526020014881526020014481526020013281526020013481526020016000f31ca0d642ba4d1f9388c5fd312bb9fb42d189a0b3c796de55093c85f30802a85147c8a037aa8680923f811a6988c03dd414ca00cd25d6876ba5925c7ca8ac6aad21669d"} diff --git a/tests/eth_getRawTransactionByBlockNumberAndIndex/get-index-out-of-range.io b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-index-out-of-range.io new file mode 100644 index 000000000..6eb164f62 --- /dev/null +++ b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-index-out-of-range.io @@ -0,0 +1,3 @@ +// gets raw tx with index exceeding block transaction count +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockNumberAndIndex","params":["0x1","0x4"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByBlockNumberAndIndex/get-notfound-block.io b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-notfound-block.io new file mode 100644 index 000000000..73d0d5ab0 --- /dev/null +++ b/tests/eth_getRawTransactionByBlockNumberAndIndex/get-notfound-block.io @@ -0,0 +1,3 @@ +// gets raw tx from a non-existent block number +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByBlockNumberAndIndex","params":["0x5f5e0ff","0x0"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByHash/get-empty-tx.io b/tests/eth_getRawTransactionByHash/get-empty-tx.io new file mode 100644 index 000000000..778a0dc4b --- /dev/null +++ b/tests/eth_getRawTransactionByHash/get-empty-tx.io @@ -0,0 +1,3 @@ +// requests the zero transaction hash +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByHash","params":["0x0000000000000000000000000000000000000000000000000000000000000000"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tests/eth_getRawTransactionByHash/get-legacy-tx.io b/tests/eth_getRawTransactionByHash/get-legacy-tx.io new file mode 100644 index 000000000..cdff07435 --- /dev/null +++ b/tests/eth_getRawTransactionByHash/get-legacy-tx.io @@ -0,0 +1,3 @@ +// gets the RLP-encoded bytes of a legacy transaction +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByHash","params":["0x0d6999c0e9e4bec347945593e97bdcdf7c25be08ca1a1efdc520dbe75be985f3"]} +<< {"jsonrpc":"2.0","id":1,"result":"0xf85f070182520894eda8645ba6948855e3b3cd596bbb07596d59c60301801ba0fad01b9a15db73d59b0a74b3d85718dfebb7cde80f916840a006ef5f2a85769ea060b08e6b12604d91c6e2c514f2c020562b61f97973ada18a1701937d3302e5f3"} diff --git a/tests/eth_getRawTransactionByHash/get-notfound-tx.io b/tests/eth_getRawTransactionByHash/get-notfound-tx.io new file mode 100644 index 000000000..99855e5a2 --- /dev/null +++ b/tests/eth_getRawTransactionByHash/get-notfound-tx.io @@ -0,0 +1,3 @@ +// gets a non-existent transaction +>> {"jsonrpc":"2.0","id":1,"method":"eth_getRawTransactionByHash","params":["0x00000000000000000000000000000000000000000000000000000000deadbeef"]} +<< {"jsonrpc":"2.0","id":1,"result":null} diff --git a/tools/go.mod b/tools/go.mod index eed9b7e86..c448ce7e4 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -16,9 +16,11 @@ require ( ) require ( - github.com/DataDog/zstd v1.5.2 // indirect + github.com/DataDog/zstd v1.5.7 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 // indirect + github.com/RaduBerinde/axisds v0.1.0 // indirect + github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/VictoriaMetrics/fastcache v1.13.0 // indirect github.com/alexflint/go-scalar v1.1.0 // indirect @@ -26,11 +28,14 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v1.1.5 // indirect + github.com/cockroachdb/pebble/v2 v2.1.4 // indirect github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/swiss v0.0.0-20251224182025-b0f6560f979b // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/consensys/gnark-crypto v0.18.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect @@ -79,7 +84,7 @@ require ( github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/kilic/bls12-381 v0.1.0 // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -87,6 +92,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/mitchellh/pointerstructure v1.2.0 // indirect @@ -100,10 +106,10 @@ require ( github.com/pion/stun/v3 v3.1.2 // indirect github.com/pion/transport/v4 v4.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.15.0 // indirect + github.com/prometheus/client_golang v1.16.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/protolambda/bls12-381-util v0.1.0 // indirect github.com/protolambda/zrnt v0.34.1 // indirect github.com/protolambda/ztyp v0.2.2 // indirect @@ -148,3 +154,5 @@ require ( ) tool github.com/open-rpc/openrpc-linter + +replace github.com/ethereum/go-ethereum => github.com/manusw7/go-ethereum v1.17.4-0.20260626133832-33e1d84d16d0 diff --git a/tools/go.sum b/tools/go.sum index e2b58f0b7..903db6177 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,13 +1,19 @@ -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= +github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6 h1:1zYrtlhrZ6/b6SAjLSfKzWtdgqK0U+HtH/VcBWh1BaU= github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20251001021608-1fe7b43fc4d6/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= +github.com/RaduBerinde/axisds v0.1.0 h1:YItk/RmU5nvlsv/awo2Fjx97Mfpt4JfgtEVAGPrLdz8= +github.com/RaduBerinde/axisds v0.1.0/go.mod h1:UHGJonU9z4YYGKJxSaC6/TNcLOBptpmM5m2Cksbnw0Y= +github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54 h1:bsU8Tzxr/PNz75ayvCnxKZWEYdLMPDkUgticP4a4Bvk= +github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54/go.mod h1:0tr7FllbE9gJkHq7CVeeDDFAFKQVy5RnCSSNBOvdqbc= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/VictoriaMetrics/fastcache v1.13.0 h1:AW4mheMR5Vd9FkAPUv+NH6Nhw+fmbTMGMsNAoA/+4G0= github.com/VictoriaMetrics/fastcache v1.13.0/go.mod h1:hHXhl4DA2fTL2HTZDJFXWgW0LNjo6B+4aj2Wmng3TjU= +github.com/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f h1:JjxwchlOepwsUWcQwD2mLUAGE9aCp0/ehy6yCHFBOvo= +github.com/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f/go.mod h1:tMDTce/yLLN/SK8gMOxQfnyeMeCg8KGzp0D1cbECEeo= github.com/alexflint/go-arg v1.4.3 h1:9rwwEBpMXfKQKceuZfYcwuc/7YY7tWJbFsgG5cAU/uo= github.com/alexflint/go-arg v1.4.3/go.mod h1:3PZ/wp/8HuqRZMUUgu7I+e1qcpUbvmS258mRXkFH4IA= github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM= @@ -27,18 +33,26 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b h1:SHlYZ/bMx7frnmeqCu+xm0TCxXLzX3jQIVuFbnFGtFU= +github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b/go.mod h1:Gq51ZeKaFCXk6QwuGM0w1dnaOqc/F5zKT2zA9D6Xeac= +github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5 h1:UycK/E0TkisVrQbSoxvU827FwgBBcZ95nRRmpj/12QI= +github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5/go.mod h1:jsaKMvD3RBCATk1/jbUZM8C9idWBJME9+VRZ5+Liq1g= github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA= +github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA= github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= +github.com/cockroachdb/pebble/v2 v2.1.4 h1:j9wPgMDbkErFdAKYFGhsoCcvzcjR+6zrJ4jhKtJ6bOk= +github.com/cockroachdb/pebble/v2 v2.1.4/go.mod h1:Reo1RTniv1UjVTAu/Fv74y5i3kJ5gmVrPhO9UtFiKn8= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/swiss v0.0.0-20251224182025-b0f6560f979b h1:VXvSNzmr8hMj8XTuY0PT9Ane9qZGul/p67vGYwl9BFI= +github.com/cockroachdb/swiss v0.0.0-20251224182025-b0f6560f979b/go.mod h1:yBRu/cnL4ks9bgy4vAASdjIW+/xMlFwuHKqtmh3GZQg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/consensys/gnark-crypto v0.18.1 h1:RyLV6UhPRoYYzaFnPQA4qK3DyuDgkTgskDdoGqFt3fI= @@ -80,8 +94,6 @@ github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn2 github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= -github.com/ethereum/go-ethereum v1.17.4-0.20260609123946-08aaa7c5ff9d h1:g14Px5es+E5UwDrQhGPfDSqhXFC4xM+fKdbJCJg0Ug0= -github.com/ethereum/go-ethereum v1.17.4-0.20260609123946-08aaa7c5ff9d/go.mod h1:qMdgwqqRAen+aT8P7KKQKi0Qt6RzG4cfejVAbCpJgqA= github.com/ethereum/hid v1.0.1-0.20260421154323-c2ab8d9bf68a h1:eIFUceK3U/z9UV0D/kAI6cxA27eH7MPqt2ks7fbzj/k= github.com/ethereum/hid v1.0.1-0.20260421154323-c2ab8d9bf68a/go.mod h1:nABYy4hsKZpuN0mu0uybdjrIOuGb1eE7b1lci/ezUAo= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= @@ -99,6 +111,8 @@ github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= @@ -184,8 +198,8 @@ github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4 github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -206,6 +220,8 @@ github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzW github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/manusw7/go-ethereum v1.17.4-0.20260626133832-33e1d84d16d0 h1:Gs7S0hOJQlLxvEkFpEcPbCT2UDtEu9zI5WgkIRBDb14= +github.com/manusw7/go-ethereum v1.17.4-0.20260626133832-33e1d84d16d0/go.mod h1:W3iLMHC24CJJyHjpNH0vwBtyfiMyyeHzUtPINI1ShKQ= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -225,6 +241,8 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882 h1:0lgqHvJWHLGW5TuObJrfyEi6+ASTKDBWikGvPqy9Yiw= +github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882/go.mod h1:qT0aEB35q79LLornSzeDH75LBf3aH1MV+jB5w9Wasec= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= @@ -270,14 +288,14 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= -github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/protolambda/bls12-381-util v0.1.0 h1:05DU2wJN7DTU7z28+Q+zejXkIsA/MF8JZQGhtBZZiWk= github.com/protolambda/bls12-381-util v0.1.0/go.mod h1:cdkysJTRpeFeuUVx/TXGDQNMTiRAalk1vQw3TYTHcE4= github.com/protolambda/zrnt v0.34.1 h1:qW55rnhZJDnOb3TwFiFRJZi3yTXFrJdGOFQM7vCwYGg= diff --git a/tools/testgen/generators.go b/tools/testgen/generators.go index 71007a764..523f9d928 100644 --- a/tools/testgen/generators.go +++ b/tools/testgen/generators.go @@ -80,6 +80,9 @@ var AllMethods = []MethodTests{ EthGetTransactionByBlockNumberAndIndex, EthGetTransactionCount, EthGetTransactionByHash, + EthGetRawTransactionByHash, + EthGetRawTransactionByBlockHashAndIndex, + EthGetRawTransactionByBlockNumberAndIndex, EthGetTransactionReceipt, EthGetBlockReceipts, EthSendRawTransaction, @@ -1401,6 +1404,172 @@ var EthGetTransactionByHash = MethodTests{ }, } +// EthGetRawTransactionByHash stores a list of all tests against the method. +var EthGetRawTransactionByHash = MethodTests{ + "eth_getRawTransactionByHash", + []Test{ + { + Name: "get-legacy-tx", + About: "gets the RLP-encoded bytes of a legacy transaction", + Run: func(ctx context.Context, t *T) error { + want := t.chain.FindTransaction("legacy tx", matchLegacyValueTransfer) + var got hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByHash", want.Hash()); err != nil { + return err + } + raw, err := want.MarshalBinary() + if err != nil { + return err + } + if !bytes.Equal(got, raw) { + return fmt.Errorf("raw tx mismatch (got: %s, want: %s)", got, hexutil.Bytes(raw)) + } + return nil + }, + }, + { + Name: "get-empty-tx", + About: "requests the zero transaction hash", + Run: func(ctx context.Context, t *T) error { + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByHash", common.Hash{}); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + { + Name: "get-notfound-tx", + About: "gets a non-existent transaction", + Run: func(ctx context.Context, t *T) error { + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByHash", common.HexToHash("deadbeef")); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + }, +} + +// EthGetRawTransactionByBlockHashAndIndex stores a list of all tests against the method. +var EthGetRawTransactionByBlockHashAndIndex = MethodTests{ + "eth_getRawTransactionByBlockHashAndIndex", + []Test{ + { + Name: "get-block-n", + About: "gets raw tx 0 in a non-empty block by block hash", + Run: func(ctx context.Context, t *T) error { + block := t.chain.BlockWithTransactions("", nil) + want := block.Transactions()[0] + var got hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockHashAndIndex", block.Hash(), hexutil.Uint(0)); err != nil { + return err + } + raw, err := want.MarshalBinary() + if err != nil { + return err + } + if !bytes.Equal(got, raw) { + return fmt.Errorf("raw tx mismatch (got: %s, want: %s)", got, hexutil.Bytes(raw)) + } + return nil + }, + }, + { + Name: "get-notfound-block", + About: "gets raw tx from a non-existent block hash", + Run: func(ctx context.Context, t *T) error { + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockHashAndIndex", common.HexToHash("deadbeef"), hexutil.Uint(0)); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + { + Name: "get-index-out-of-range", + About: "gets raw tx with index exceeding block transaction count", + Run: func(ctx context.Context, t *T) error { + block := t.chain.BlockWithTransactions("", nil) + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockHashAndIndex", block.Hash(), hexutil.Uint(len(block.Transactions()))); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + }, +} + +// EthGetRawTransactionByBlockNumberAndIndex stores a list of all tests against the method. +var EthGetRawTransactionByBlockNumberAndIndex = MethodTests{ + "eth_getRawTransactionByBlockNumberAndIndex", + []Test{ + { + Name: "get-block-n", + About: "gets raw tx 0 in a non-empty block by block number", + Run: func(ctx context.Context, t *T) error { + block := t.chain.BlockWithTransactions("", nil) + want := block.Transactions()[0] + var got hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockNumberAndIndex", hexutil.Uint64(block.NumberU64()), hexutil.Uint(0)); err != nil { + return err + } + raw, err := want.MarshalBinary() + if err != nil { + return err + } + if !bytes.Equal(got, raw) { + return fmt.Errorf("raw tx mismatch (got: %s, want: %s)", got, hexutil.Bytes(raw)) + } + return nil + }, + }, + { + Name: "get-notfound-block", + About: "gets raw tx from a non-existent block number", + Run: func(ctx context.Context, t *T) error { + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockNumberAndIndex", hexutil.Uint64(99999999), hexutil.Uint(0)); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + { + Name: "get-index-out-of-range", + About: "gets raw tx with index exceeding block transaction count", + Run: func(ctx context.Context, t *T) error { + block := t.chain.BlockWithTransactions("", nil) + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "eth_getRawTransactionByBlockNumberAndIndex", hexutil.Uint64(block.NumberU64()), hexutil.Uint(len(block.Transactions()))); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, + }, +} + // EthGetTransactionReceipt stores a list of all tests against the method. var EthGetTransactionReceipt = MethodTests{ "eth_getTransactionReceipt", @@ -2429,6 +2598,20 @@ var DebugGetRawTransaction = MethodTests{ return nil }, }, + { + Name: "get-notfound-tx", + About: "gets a non-existent transaction", + Run: func(ctx context.Context, t *T) error { + var got *hexutil.Bytes + if err := t.rpc.CallContext(ctx, &got, "debug_getRawTransaction", common.HexToHash("deadbeef")); err != nil { + return err + } + if got != nil { + return fmt.Errorf("expected null result, got %s", *got) + } + return nil + }, + }, }, }