#ethereum #mpt #trie

bin+lib eth-trie-proofs

Ethereum 交易 trie 证明

2 个版本

0.1.1 2024 年 6 月 26 日
0.1.0 2024 年 6 月 25 日

#6 in #mpt

Download history 298/week @ 2024-06-23 83/week @ 2024-06-30 38/week @ 2024-07-07 41/week @ 2024-07-14 55/week @ 2024-07-21 157/week @ 2024-07-28 18/week @ 2024-08-04 23/week @ 2024-08-11 17/week @ 2024-08-18

217 每月下载量
用于 8 个 crate (2 直接)

自定义许可

54KB
1K SLoC

eth-trie-proofs

为 Ethereum trie 提供全面的证明处理程序。已测试各种 EIP,包括 Legacy、EIP-2930、EIP-1559 和 EIP-4844。此存储库公开了证明构建功能和一个 CLI 版本。

特性

  • 交易 trie 处理器

    • 使用目标区块号构建 trie
    • 使用目标交易哈希构建 trie
    • 按交易索引检索证明
    • 验证证明
  • 交易收据 trie 处理器

    • 使用目标区块号构建 trie
    • 使用目标交易哈希构建 trie
    • 按交易索引检索证明
    • 验证证明

CLI 工具

CLI 工具支持生成交易和收据的证明。根据您的需求使用以下命令

使用以下命令安装:cargo install --path ./

或者,不安装直接运行:cargo run --bin etp-cli

通过 CLI 生成证明

要为交易生成证明,请使用以下命令

etp-cli tx<TRANSACTION_HASH> [RPC_URL]

要生成收据证明

etp-cli receipt<TRANSACTION_HASH> [RPC_URL]

默认情况下,使用 https://ethereum-rpc.publicnode.com 作为 RPC 提供商。这可能会对最近的事务有效,但建议使用专用 RPC。

安装

将依赖项 eth-trie-proofs 添加到您的项目

eth-trie-proofs = { git = "https://github.com/HerodotusDev/eth-trie-proofs.git", branch = "main" }

示例

使用目标区块号或目标交易哈希构建交易 trie

let target_tx_hash = B256::from(hex!(
    "1fcb1196d8a3bff0bcf13309d2d2bb1a23ae1ac13f5674c801be0ff9254d5ab5"
));

let mut txs_mpt_handler = TxsMptHandler::new(MAINNET_RPC_URL)?;

txs_mpt_handler
    .build_tx_tree_from_block(4370000)
    .await?;

let tx_index = txs_mpt_handler.tx_hash_to_tx_index(target_tx_hash)?;
let proof = txs_mpt_handler.get_proof(tx_index)?;
txs_mpt_handler
    .verify_proof(tx_index, proof.clone())?;

// You can either build with target tx hash. Both roots match.
let mut txs_mpt_handler2 = TxsMptHandler::new(MAINNET_RPC_URL)?;
txs_mpt_handler2
    .build_tx_tree_from_tx_hash(target_tx_hash)
    .await?;

assert_eq!(
    txs_mpt_handler.get_root().unwrap(),
    txs_mpt_handler2.get_root().unwrap()
);

使用目标区块号构建交易收据 trie

// 4844 transaction
let target_tx_hash = B256::from(hex!(
    "9c1fbda4f649ac806ab0faefbe94e1a60282eb374ead6aa01bac042f52b28a8c"
));

let mut tx_receipts_mpt_handler = TxReceiptsMptHandler::new(MAINNET_RPC_URL)?;
tx_receipts_mpt_handler
    .build_tx_receipts_tree_from_block(19426589)
    .await?;

let tx_index = tx_receipts_mpt_handler
    .tx_hash_to_tx_index(target_tx_hash)
    .await?;
let proof = tx_receipts_mpt_handler.get_proof(tx_index)?;
tx_receipts_mpt_handler
    .verify_proof(tx_index, proof.clone())?;

致谢

对于 trie 实现,此项目依赖于 eth_trie。对于交易和交易收据类型,高度依赖于 alloy

许可

eth-trie-proofs 根据 GNU 通用公共许可证 v3.0 许可。


Herodotus Dev Ltd - 2024

依赖项

~28–42MB
~823K SLoC