Ethereum Light Client
UntrustedなRPCでも、consensus layerの状態を検証することで安全に利用できる
ブロック全てを検証するのではなく、consensumのみ検証するのでlight clientという
helios
a16zが提供するlight client
github: https://github.com/a16z/helios
install
code:bash
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
heliosup
usage
code:bash
helios --execution-rpc $ETH_RPC_URL
Metamaskにも追加できる
https://chainstack.com/helios-client/
Rustライブラリとしても利用できる。
code:rust
use std::{str::FromStr, env};
use helios::{client::ClientBuilder, config::networks::Network, types::BlockTag};
use ethers::{types::Address, utils};
use eyre::Result;
#tokio::main
async fn main() -> Result<()> {
let untrusted_rpc_url = env::var("UNTRUSTED_RPC_URL")?;
let mut client = ClientBuilder::new()
.network(Network::MAINNET)
.consensus_rpc("https://www.lightclientdata.org")
.execution_rpc(&untrusted_rpc_url)
.build()?;
client.start().await?;
let head_block_num = client.get_block_number().await?;
let addr = Address::from_str("0x00000000219ab540356cBB839Cbe05303d7705Fa")?;
let block = BlockTag::Latest;
let balance = client.get_balance(&addr, block).await?;
println!("synced up to block: {}", head_block_num);
println!("balance of deposit contract: {}", utils::format_ether(balance));
Ok(())
}
ただCheckpoint is too oldが出てしまう…
ちなにみ、checkpointとはBeacon chainのEpochの一番最初のスロットのブロックハッシュ
https://beaconscan.com/slots#
などで確認できる。
感想
一瞬で同期するので、full nodeと比べ物にならないくらい便利
エラーメッセージが不親切だったり、バグが多かったりするので開発途中といった印象を受けた