alloy-reth 0.2.0

Types and provider extensions for the reth_ Ethereum JSON-RPC namespace
Documentation

alloy-reth

Types and provider extensions for the reth_ Ethereum JSON-RPC namespace.

Usage

[dependencies]
alloy-reth = "0.2"

Version 0.2 targets the Alloy 2.4.x release series (with Alloy primitives 1.6.x).

Provider Extension

With the provider feature (enabled by default), you can use the RethApi extension trait with any alloy provider:

use alloy_provider::ProviderBuilder;
use alloy_reth::RethApi;
use alloy_eips::BlockId;

let provider = ProviderBuilder::new().connect("http://localhost:8545").await?;

let changes = provider
    .reth_get_balance_changes_in_block(BlockId::latest())
    .await?;

reth_newPayload accepts standard execution data, Reth big-block data, and raw RLP blocks:

use alloy_primitives::{B256, Bytes};
use alloy_reth::{BigBlockData, RethApi, RethNewPayloadInput, RethNewPayloadParams};

let standard = RethNewPayloadInput::execution_data(serde_json::json!({
    "payload": "0x01",
    "sidecar": "0x02",
}));
let big_block = RethNewPayloadInput::big_block_data(BigBlockData {
    env_switches: vec![serde_json::json!({"payload": "0x01"})],
    prior_block_hashes: vec![(7, B256::ZERO)],
    block_number: 8,
    merged_block_access_list: None,
});
let raw_block = RethNewPayloadInput::block_rlp(Bytes::from_static(&[0x01]));

provider
    .reth_new_payload(
        RethNewPayloadParams::new(standard)
            .with_wait_for_persistence(true)
            .with_wait_for_caches(false),
    )
    .await?;

Raw RLP blocks with a merged block access list use RethNewPayloadInput::block_rlp_with_bal(block, bal). Without a BAL, the wire format remains the legacy bare byte string; with one, it is { "block": ..., "bal": ... }.

reth_forkchoiceUpdated sends only the forkchoice state. Payload attributes are intentionally not part of this Reth-specific method.

Migration from 0.1

The BlockRlp(Bytes) enum variant is now BlockRlp { block, bal } so a BAL can be represented. Use RethNewPayloadInput::block_rlp(bytes) to migrate old code, or RethNewPayloadInput::block_rlp_with_bal(block, bal) when supplying a BAL. The block_rlp constructor also preserves legacy bare-byte serialization.

Supported Methods

Method Description
reth_getBalanceChangesInBlock Returns balance changes in a block
reth_getBlockExecutionOutcome Returns the execution outcome for a block
reth_newPayload Submits a new payload to the engine (extended)
reth_forkchoiceUpdated Updates the forkchoice state

Features

  • std — Enable std support (enabled by default)
  • provider — Enable the RethApi provider extension trait (enabled by default)

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.