Note
This crate provides a Rust implementation of adjustable Ethereum block submission requests for use by block builders.
Based on Go reference implementation from Ultra Sound Relay
- Submission of block data using adjustable request formats.
 - Compatibility with Ethereum's Deneb and Electra forks.
 - Optional SSZ (SimpleSerialize) encoding/decoding.
 - Full integration with the 
alloy-rsEthereum ecosystem. 
| Feature | Description | 
|---|---|
| Deneb Support | AdjustableSubmitBlockRequest type for Deneb fork submission | 
| Electra Support | AdjustableSubmitBlockRequestV4 for Electra fork submission | 
| SSZ Serialization | Optional SSZ support via sszb, behind a crate feature | 
| Alloy Integration | Uses types from the alloy-rs ecosystem for Ethereum primitives | 
Add the crate to your Cargo.toml:
[dependencies]
adjustable-bid-encoding-rs = "0.1"To enable SSZ serialization, use the optional ssz feature:
[dependencies]
adjustable-bid-encoding-rs = { version = "0.1", features = ["ssz"] }use adjustable_bid_encoding_rs::types::{AdjustableSubmitBlockRequest, AdjustmentData};
use alloy_primitives::{Address, B256};
// Create adjustment data
let adjustment_data = AdjustmentData {
    state_root: B256::default(),
    transactions_root: B256::default(),
    receipts_root: B256::default(),
    builder_address: Address::default(),
    builder_proof: vec![],
    fee_recipient_address: Address::default(),
    fee_recipient_proof: vec![],
    fee_payer_address: Address::default(),
    fee_payer_proof: vec![],
    placeholder_tx_proof: vec![],
    placeholder_receipt_proof: vec![],
};
// Construct the submission request
let request = AdjustableSubmitBlockRequest {
    message: Default::default(),
    execution_payload: Default::default(),
    blobs_bundle: Default::default(),
    signature: [0; 96],
    adjustment_data,
};Note The
AdjustableSubmitBlockRequestV4type can be used similarly for Electra fork compatibility.
SSZ serialization and deserialization is typically used via the ssz-rs library.
Instead we are using sszb
Warning
The amount of crates needed to implement SSZ in Alloy is like 5 crates. YMMV.
[dependencies]
adjustable-bid-encoding-rs = { version = "0.1", features = ["ssz"] }Once enabled, types like AdjustableSubmitBlockRequest and AdjustmentData will implement Encode and Decode.
GPL-2.0