FABRKNT
Reth Fundamentals — Alloy で動かす最初の一歩
Alloyを使う
レッスン 4 / 11·CONTENT12 分25 XP
コース
Reth Fundamentals — Alloy で動かす最初の一歩
レッスンの役割
CONTENT
順序
4 / 11

レッスン4 — Provider — ノードへ接続する

問い

ここまでの 3 レッスンで Rust と Alloy 型を扱えるようになった。次は Ethereum ノードと話す方法Provider がそのインターフェース。HTTP / WebSocket / IPC / Anvil-fork どれでも、同じ trait の同じメソッド で叩ける。

原理(最小モデル)

  • Provider トレイト. ノードへの RPC クライアント抽象、get_block_number / get_balance / call / send_transaction 等の動詞。
  • ProviderBuilder::new().connect_http(url). HTTP 経由のプロバイダを作る、url.parse()?Url 型に。
  • Public RPC エンドポイント. https://ethereum.reth.rs/rpc(rethlab 公式、無料)/ https://eth.llamarpc.com(llamarpc)/ Alchemy / Infura(API key 必要)。
  • async メソッド. provider.get_block_number().await? = ネットワーク往復、Tokio ランタイム上で実行。
  • #[tokio::main]. main() を async 化、ランタイム起動 + 最後まで待つ、初心者の boilerplate。

具体例 + ステップで組み立てる

Provider — ノードへ接続する

Alloyの Provider は「ノードへの窓口」である。これを通じてブロック番号・残高・トランザクション情報を取得する。

最小コード — 一字一句そのまま

これは alloy-rs/exampleshttp.rs をベースにした最小プロジェクトである。

まず Cargo.toml

[package]
name = "hello_provider"
version = "0.1.0"
edition = "2024"

[dependencies]
alloy = "2.0.5"
alloy-provider = "2.0.5"
eyre = "0.6.12"
tokio = { version = "1", features = ["full"] }

次に src/main.rs

use alloy::providers::{Provider, ProviderBuilder};
use eyre::Result;

#[tokio::main]
async fn main() -> Result<()> {
    let rpc_url = "https://ethereum.reth.rs/rpc".parse()?;
    let provider = ProviderBuilder::new().connect_http(rpc_url);

    let latest_block = provider.get_block_number().await?;

    println!("Latest block number: {}", latest_block);

    Ok(())
}

cargo run するとメインネットの最新ブロック番号が表示される。これが監視Botの出発点 になる。

URLに注目: https://ethereum.reth.rs/rpcReth プロジェクトが運営する公開RPCエンドポイント である。コードは既に文字通り Reth ノードと通信している。

よく使うProviderメソッド

メソッド役割
get_block_number最新ブロック番号
get_balance(address)ETH残高
get_block(...)ブロックの詳細
get_transaction_by_hash(hash)トランザクション詳細
get_logs(filter)イベントログの取得

任意のEVM互換チェーンに繋ぐ

URLを差し替えるだけで、HyperEVM、Optimism、Anvil(ローカル)などにも接続できる。

let provider = ProviderBuilder::new()
    .connect_http("https://api.hyperliquid.xyz/evm".parse()?); // HyperEVM
let provider = ProviderBuilder::new()
    .connect_http("http://127.0.0.1:8545".parse()?);          // Anvil

ローカルで試すなら Anvil

Foundry に同梱の Anvil を使うと、自分のマシン上でローカルなEthereumノードを立てられます(後で --fork-url を付ければメインネットフォークにもできます)。

anvil

ガス代なしで残高変更や送金を試せるため、学習用途に向く。

次のステップ

これでAlloyの「Read」(読み取り)まで来た。次のモジュールでは、EVMが実際に「動く」中身(スタック、メモリ、Opcode)に踏み込む。

まとめ(3行)

  • Provider = ノードへの RPC クライアント抽象、HTTP / WebSocket / IPC / Anvil-fork どれでも同じ trait + 同じメソッド。
  • ProviderBuilder::new().connect_http(url) で作成、public RPC は ethereum.reth.rs/rpc 等、async メソッドで往復。
  • #[tokio::main] で main async 化、次は学んだ要素を組み合わせた残高チェッカークイズ。