Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
61a501b
chore: add method
natanasow Feb 11, 2026
cc42633
chore: fix comments
natanasow Feb 12, 2026
a36d6a3
chore: format raw block
natanasow Feb 12, 2026
8107201
Merge branch 'main' into 4890-add-debug-getrawblock-method
natanasow Feb 12, 2026
39b9123
chore: pull main
natanasow Feb 12, 2026
24bb813
chore: add new lines
natanasow Feb 12, 2026
18bbd8f
chore: pull main
natanasow Feb 12, 2026
51ae109
chore: fix test
natanasow Feb 12, 2026
6dc494a
chore: resolve comments
natanasow Feb 13, 2026
08aadf3
chore: remove ununsed import
natanasow Feb 13, 2026
1737bce
chore: fix padding
natanasow Feb 13, 2026
cbff76b
Merge branch 'main' into 4890-add-debug-getrawblock-method
natanasow Feb 13, 2026
c25abea
chore: resolve comments
natanasow Feb 16, 2026
a2aee36
chore: resolve comments
natanasow Feb 16, 2026
08db390
chore: fix mixhash
natanasow Feb 16, 2026
e38b425
chore: fix tests
natanasow Feb 16, 2026
744d5ab
chore: add method
natanasow Feb 16, 2026
db324a3
chore: fix test
natanasow Feb 16, 2026
c711078
chore: remove todo
natanasow Feb 17, 2026
349eaee
chore: add method to the interface
natanasow Feb 17, 2026
80d0d2a
Merge branch 'main' into 4890-add-debug-getrawblock-method
natanasow Feb 17, 2026
06130eb
Merge branch '4890-add-debug-getrawblock-method' into 4891-add-debug-…
natanasow Feb 17, 2026
6008b51
chore: add method to the interface
natanasow Feb 17, 2026
1e98c46
chore: resolve comments
natanasow Feb 18, 2026
a05d094
chore: resolve comments
natanasow Feb 18, 2026
f7d8a66
chore: resolve comments
natanasow Feb 18, 2026
84b9531
chore: use mixhash instead of constant
natanasow Feb 18, 2026
17afe77
chore: fix test
natanasow Feb 18, 2026
25cdb86
chore: resolve comment
natanasow Feb 18, 2026
9656054
chore: resolve comments
natanasow Feb 18, 2026
ac9fc4e
chore: resolve comments
natanasow Feb 19, 2026
2185dfa
Merge branch 'main' into 4890-add-debug-getrawblock-method
natanasow Feb 19, 2026
2a8f1f3
Merge branch '4890-add-debug-getrawblock-method' into 4891-add-debug-…
natanasow Feb 19, 2026
78279e8
chore: resolve comments
natanasow Feb 19, 2026
0ab100f
Merge branch 'main' into 4891-add-debug-get-raw-header-method
natanasow Feb 19, 2026
233a311
chore: resolve conflicts
natanasow Feb 19, 2026
55a4723
chore: fix comment
natanasow Feb 19, 2026
cd9baf8
chore: add tests
natanasow Feb 19, 2026
6903a5f
chore: fix test
natanasow Feb 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions docs/openrpc.json
Original file line number Diff line number Diff line change
Expand Up @@ -1316,6 +1316,28 @@
}
}
},
{
"name": "debug_getRawHeader",
"summary": "Returns an RLP-encoded header.",
"description": "![](https://raw.githubusercontent.com/hiero-ledger/hiero-json-rpc-relay/main/docs/images/http_label.png)",
"params": [
{
"name": "block",
"required": true,
"schema": {
"$ref": "#/components/schemas/BlockNumberOrTagOrHash"
}
}
],
"result": {
"name": "Header RLP",
"description": "The RLP-encoded block header, or 0x if the block is not found",
"schema": {
"title": "raw block",
"$ref": "#/components/schemas/bytes"
}
}
},
{
"name": "debug_traceBlockByNumber",
"summary": "Returns the tracing result for all transactions in the block specified by number with a tracer.",
Expand Down
2 changes: 1 addition & 1 deletion docs/rpc-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ These methods are extensions provided by various Ethereum clients but are not pa
| [admin_config](https://github.com/hiero-ledger/hiero-json-rpc-relay/tree/main#admin-api) | **Implemented** | N/A | Returns relay and upstream dependency configuration |
| [debug_getBadBlocks](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetbadblocks) | **Implemented** - Requires `DEBUG_API_ENABLED=true` | N/A | Always returns empty array |
| [debug_getRawBlock](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetrawblock) | **Implemented** - Requires `DEBUG_API_ENABLED=true` | N/A | |
| [debug_getRawHeader](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetrawheader) | **Not Implemented** | N/A | |
| [debug_getRawHeader](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetrawheader) | **Implemented** - Requires `DEBUG_API_ENABLED=true` | N/A | |
| [debug_getRawReceipts](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetrawreceipts) | **Not Implemented** | N/A | |
| [debug_getRawTransaction](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debuggetrawtransaction) | **Not Implemented** | N/A | |
| [debug_traceBlockByHash](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debugtraceblockbyhash) | **Implemented** - Requires `DEBUG_API_ENABLED=true` | Mirror Node | Supports CallTracer and PrestateTracer, caches results |
Expand Down
2 changes: 2 additions & 0 deletions packages/relay/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ export interface Debug {

getRawBlock(blockNrOrHash: string, requestDetails: RequestDetails): Promise<string | JsonRpcError>;

getRawHeader(blockNrOrHash: string, requestDetails: RequestDetails): Promise<string | JsonRpcError>;

traceBlockByHash(blockHash: string, tracerObject: BlockTracerConfig, requestDetails: RequestDetails): Promise<any>;
}

Expand Down
45 changes: 44 additions & 1 deletion packages/relay/src/lib/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
import { ConfigService } from '@hashgraph/json-rpc-config-service/dist/services';
import type { Logger } from 'pino';

import { decodeErrorMessage, mapKeysAndValues, numberTo0x, prepend0x, strip0x, tinybarsToWeibars } from '../formatters';
import {
decodeErrorMessage,
mapKeysAndValues,
numberTo0x,
prepend0x,
strip0x,
tinybarsToWeibars,
toHexString,
} from '../formatters';
import { type Debug } from '../index';
import { JsonRpcError } from '../index';
import { Utils } from '../utils';
Expand Down Expand Up @@ -136,6 +144,41 @@ export class DebugImpl implements Debug {
return constants.EMPTY_HEX + Buffer.from(BlockFactory.rlpEncode(block)).toString('hex');
}

/**
* Get a raw block header for debugging purposes.
*
* @async
* @rpcMethod Exposed as debug_getRawHeader RPC endpoint
* @rpcParamValidationRules Applies JSON-RPC parameter validation according to the API specification
*
* @param {string} blockNrOrHash - The block number, tag or hash. Possible values are 'earliest', 'pending', 'latest', hex block number or 32 bytes hash.
* @param {RequestDetails} requestDetails - Request details for logging and tracking
*
* @example
* const result = await getRawHeader('0x160c', requestDetails);
*/
@rpcMethod
@rpcParamValidationRules({
0: { type: ['blockNumber', 'blockHash'], required: true },
})
@cache({
skipParams: [{ index: '0', value: constants.NON_CACHABLE_BLOCK_PARAMS }],
})
async getRawHeader(blockNrOrHash: string, requestDetails: RequestDetails): Promise<string | JsonRpcError> {
DebugImpl.requireDebugAPIEnabled();

const block: Block | null =
blockNrOrHash.length === 66
? await this.blockService.getBlockByHash(blockNrOrHash, false, requestDetails)
: await this.blockService.getBlockByNumber(blockNrOrHash, false, requestDetails);

if (!block) {
return constants.EMPTY_HEX;
}

return prepend0x(toHexString(BlockFactory.rlpEncode(block, true)));
}

/**
* Trace a transaction for debugging purposes.
*
Expand Down
17 changes: 14 additions & 3 deletions packages/relay/src/lib/factories/blockFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,12 @@ export class BlockFactory {
* RLP encode a block based on Ethereum Yellow Paper.
*
* @param { Block } block - The block object from eth_getBlockByNumber/Hash
* @param {boolean} headerOnly - A flag that determines whether to encode the entire block or only the block header
*
* @returns {Uint8Array} - RLP encoded block as Uint8 array
*/
static rlpEncode(block: Block): Uint8Array {
if (typeof block.transactions[0] === 'string') {
static rlpEncode(block: Block, headerOnly: boolean = false): Uint8Array {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe we should split preparing canonical representation and encoding into two separate steps? I think it would allow us to get rid of headerOnly flag, swapping it for rlpEncodeBlock(block: Block) and rlpEncodeBlockHeader(header: BlockHeader)

if (!headerOnly && typeof block.transactions[0] === 'string') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not a blocker for me, but I think it would look a little bit cleaner with separate methods, and we wouldn’t need conditional validation logic here.

encodeHeader(block): RLP => rlp(header(block));
encode(block): RLP => validate(block) && rlp(...header(block), ...payload(block));

also because of this the jsdocs are not quite valid any longer (especiall ydescription of the returned value)

RLP encode a block based on Ethereum Yellow Paper.
   * @returns {Uint8Array} - RLP encoded block as Uint8 array

it should be more like

RLP encode a block (or its header only) based on Ethereum Yellow Paper.
   * @returns {Uint8Array} - RLP encoded block (or block header) as Uint8 array

throw new Error('Block transactions must include full transaction objects for RLP encoding');
}

Expand All @@ -150,7 +152,8 @@ export class BlockFactory {
// -- BT - block transactions (RLP encoded transactions array)
// -- BU - ommers (empty array)
// -- BW - withdrawals (empty array)
return RLP.encode([

const header = [
// Hp - parentHash
block.parentHash,
// Ho - ommersHash
Expand Down Expand Up @@ -185,6 +188,14 @@ export class BlockFactory {
block.baseFeePerGas,
// Hw - withdrawalsRoot
block.withdrawalsRoot,
];

if (headerOnly) {
return RLP.encode(header);
}

return RLP.encode([
...header,
// BT - block transactions (RLP encoded transactions array)
[...block.transactions.map((tx) => BlockFactory.rlpEncodeTx(tx as Transaction))],
// BU - ommers (empty array)
Expand Down
170 changes: 116 additions & 54 deletions packages/relay/tests/lib/debug.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,61 @@ describe('Debug API Test Suite', async function () {
evm_address: '0x91b1c451777122afc9b83f9b96160d7e59847ad7',
};

const blockInfo = {
timestamp: '0x698afa66',
difficulty: '0x0',
extraData: '0x',
gasLimit: '0x1c9c380',
baseFeePerGas: '0xd63445f000',
gasUsed: '0xa32c1',
logsBloom:
'0x0000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000',
miner: '0x0000000000000000000000000000000000000000',
mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
receiptsRoot: '0x26c9ecffe4aa9e2e19f814a570bd1e9093ff55e9e6c18f39f4192de6e36153db',
sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: '0x1b81',
stateRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
totalDifficulty: '0x0',
transactions: [
{
blockHash: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
blockNumber: '0x1de1f54',
chainId: '0x128',
from: '0xbe04a4900b02fe715c75ff307f0b531894184c91',
gas: '0xc2860',
gasPrice: '0x0',
hash: '0x4454bdc6328e6cafb477c76af5e6a72dcb9f97e5aa79d76900f8ca65712a8151',
input:
'0xef7615ce00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000085614ea608c5dd326ba83aeaaacc7eb9d090e0d40000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000019800000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000002436623739366561382d303635622d343133322d383266642d38653766613334626338623900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000672616e616a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001586b615258536e5a6f62384c6c5a6c3270327351367134426337385977553175564473746b42756b66724652306556304f6e3750504c4a324a7262655157717443474c5170797579367559686a725138685a6c4f646242485831484741616277544147397a61483068504d4765336c7136682f665a5a5266316b6161626b356c34476d352f4b6a516e4746654a52776a55753565546775305242507338314b416238444735304e6c77524544616f5547635762376c514c504b656e6b354d4f5064662f31504c58546f383461793333307a77446e61786a46584f30783239373761786e4548365879696c5941784b636c7954397963793766477a6b4d724a6a757a376850486767436d4652315a68664a5252334778684c647a366f4336424b497554506154524b52566e63345742585432454577494c2f514d4542422f764d4a695a326733665a576e563572595962446c6e42326338773d3d000000000000000000000000000000000000000000000000000000000000000000000000000000415f0770f2c509e8cb0c3dacceca295e43657f1232c62c9f2d542d8754a6a94720500abc4b95446945a686675fc1e1768506390f5aa2be98ef2e58727d8893b99f1c00000000000000000000000000000000000000000000000000000000000000',
nonce: '0x168a',
r: '0xabbfb012c0b774997edcf782a256e55590325962f7a96ffb64467a323c84733f',
s: '0x60627cc8fc5be8d28dbec3de0835769f1140604eae6bb732dbc60b7aba4274aa',
to: '0xdd902a9d02d570d92e5d94b095bf6b7a4106773a',
transactionIndex: '0xf',
type: '0x2',
v: '0x0',
value: '0x0',
yParity: '0x0',
accessList: [],
maxPriorityFeePerGas: '0x62',
maxFeePerGas: '0x62',
},
],
transactionsRoot: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
uncles: [],
withdrawals: [],
withdrawalsRoot: '0x0000000000000000000000000000000000000000000000000000000000000000',
number: '0x1de1f54',
hash: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
parentHash: '0xd7dbe6b1379e3e1d71729a92e167af28d6b79aa9e40b0f6d845fe7b85c500bfa',
};

const blockNumber = '0x160c';

const blockHash = '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce';

this.beforeAll(() => {
mirrorNodeInstance = new MirrorNodeClient(
ConfigService.get('MIRROR_NODE_URL')!,
Expand Down Expand Up @@ -349,10 +404,68 @@ describe('Debug API Test Suite', async function () {
cacheService.clear();
});

describe('debug_getRawBlock', async function () {
const blockNumber = '0x160c';
const blockHash = '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce';
describe('debug_getRawHeader', async function () {
beforeEach(() => {
sinon.restore();
});

withOverriddenEnvsInMochaTest({ DEBUG_API_ENABLED: true }, () => {
it('should return "0x" when block is not found using block number', async function () {
sinon.stub(debugService['blockService'], 'getBlockByNumber').resolves(null);
const result = await debugService.getRawHeader(blockNumber, requestDetails);
expect(result).to.equal('0x');
});

it('should return "0x" when block is not found using block hash', async function () {
sinon.stub(debugService['blockService'], 'getBlockByHash').resolves(null);
const result = await debugService.getRawHeader(blockHash, requestDetails);
expect(result).to.equal('0x');
});

it('should return a RLP block for existing block', async () => {
const expectedRlpHex =
'0xf90223' +
'a0' +
'd7dbe6b1379e3e1d71729a92e167af28d6b79aa9e40b0f6d845fe7b85c500bfa' + // parent hash
'a0' +
'1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347' + // ommersHash
'94' +
'0000000000000000000000000000000000000321' + // beneficiary
'a0' +
'56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' + // stateRoot
'a0' +
'cf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce' + // transactionsRoot
'a0' +
'26c9ecffe4aa9e2e19f814a570bd1e9093ff55e9e6c18f39f4192de6e36153db' + // receiptsRoot
'b9' +
'01000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000' + // logsBloom
'00' + // difficulty
'84' +
'01de1f54' + // number
'84' +
'01c9c380' + // gasLimit
'83' +
'0a32c1' + // gasUsed
'84' +
'698afa66' + // timestamp
'80' + // extraData
'a0' +
'0000000000000000000000000000000000000000000000000000000000000000' + // prevrandao
'88' +
'0000000000000000' + // nonce
'85' +
'd63445f000' + // baseFeePerGas
'a0' +
'0000000000000000000000000000000000000000000000000000000000000000'; // withdrawalsRoot

sinon.stub(debugService['blockService'], 'getBlockByHash').resolves(blockInfo as Block);
const result = await debugService.getRawHeader(blockHash, requestDetails);
expect(result).to.equal(expectedRlpHex);
});
});
});

describe('debug_getRawBlock', async function () {
beforeEach(() => {
sinon.restore();
});
Expand All @@ -371,57 +484,6 @@ describe('Debug API Test Suite', async function () {
});

it('should return a RLP block for existing block', async () => {
const blockInfo = {
timestamp: '0x698afa66',
difficulty: '0x0',
extraData: '0x',
gasLimit: '0x1c9c380',
baseFeePerGas: '0xd63445f000',
gasUsed: '0xa32c1',
logsBloom:
'0x0000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000',
miner: '0x0000000000000000000000000000000000000000',
mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0000000000000000',
receiptsRoot: '0x26c9ecffe4aa9e2e19f814a570bd1e9093ff55e9e6c18f39f4192de6e36153db',
sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347',
size: '0x1b81',
stateRoot: '0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421',
totalDifficulty: '0x0',
transactions: [
{
blockHash: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
blockNumber: '0x1de1f54',
chainId: '0x128',
from: '0xbe04a4900b02fe715c75ff307f0b531894184c91',
gas: '0xc2860',
gasPrice: '0x0',
hash: '0x4454bdc6328e6cafb477c76af5e6a72dcb9f97e5aa79d76900f8ca65712a8151',
input:
'0xef7615ce00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000085614ea608c5dd326ba83aeaaacc7eb9d090e0d40000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000019800000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000002436623739366561382d303635622d343133322d383266642d38653766613334626338623900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000672616e616a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001586b615258536e5a6f62384c6c5a6c3270327351367134426337385977553175564473746b42756b66724652306556304f6e3750504c4a324a7262655157717443474c5170797579367559686a725138685a6c4f646242485831484741616277544147397a61483068504d4765336c7136682f665a5a5266316b6161626b356c34476d352f4b6a516e4746654a52776a55753565546775305242507338314b416238444735304e6c77524544616f5547635762376c514c504b656e6b354d4f5064662f31504c58546f383461793333307a77446e61786a46584f30783239373761786e4548365879696c5941784b636c7954397963793766477a6b4d724a6a757a376850486767436d4652315a68664a5252334778684c647a366f4336424b497554506154524b52566e63345742585432454577494c2f514d4542422f764d4a695a326733665a576e563572595962446c6e42326338773d3d000000000000000000000000000000000000000000000000000000000000000000000000000000415f0770f2c509e8cb0c3dacceca295e43657f1232c62c9f2d542d8754a6a94720500abc4b95446945a686675fc1e1768506390f5aa2be98ef2e58727d8893b99f1c00000000000000000000000000000000000000000000000000000000000000',
nonce: '0x168a',
r: '0xabbfb012c0b774997edcf782a256e55590325962f7a96ffb64467a323c84733f',
s: '0x60627cc8fc5be8d28dbec3de0835769f1140604eae6bb732dbc60b7aba4274aa',
to: '0xdd902a9d02d570d92e5d94b095bf6b7a4106773a',
transactionIndex: '0xf',
type: '0x2',
v: '0x0',
value: '0x0',
yParity: '0x0',
accessList: [],
maxPriorityFeePerGas: '0x62',
maxFeePerGas: '0x62',
},
],
transactionsRoot: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
uncles: [],
withdrawals: [],
withdrawalsRoot: '0x0000000000000000000000000000000000000000000000000000000000000000',
number: '0x1de1f54',
hash: '0xcf55eb0655b5d21c38413afe1919099a83140514cb6c531aebd77e3d2c5506ce',
parentHash: '0xd7dbe6b1379e3e1d71729a92e167af28d6b79aa9e40b0f6d845fe7b85c500bfa',
};

const expectedRlpHex =
'0xf905fc' +
'a0' +
Expand Down
Loading
Loading