ERC-related utilities for the Rain Protocol ecosystem, in Rust.
erc165— Probe arbitrary contracts forIERC165support. The probe is spec-compliant: it distinguishes execution-revert results (treated as "interface not supported", per EIP-165) from genuine RPC / decoding errors (returned asErr). Works against anyalloy::providers::Provider.erc4626— Read ERC-4626 vault/share-token metadata and share-to-asset ratios. Batch reads use Alloy's Multicall3 builder, pin all contract reads to a captured block, and return block metadata plus per-vault success/error items.
[dependencies]
rain-erc = "0.1"use alloy::primitives::Address;
use alloy::providers::ProviderBuilder;
use rain_erc::erc165::supports_erc165;
let provider = ProviderBuilder::new().connect_http("https://...".parse()?);
let contract: Address = "0x...".parse()?;
if supports_erc165(&provider, contract).await? {
// contract responds correctly to ERC-165 probes
}use alloy::primitives::Address;
use alloy::providers::ProviderBuilder;
use rain_erc::erc4626::{batch_share_ratios, Erc4626BatchVault};
let provider = ProviderBuilder::new().connect_http("https://...".parse()?);
let vault: Address = "0x...".parse()?;
let response = batch_share_ratios(
&provider,
vec![Erc4626BatchVault::new(vault)],
None,
)
.await?;Requires Nix with flakes:
nix develop # default = rust-shell (slim Rust toolchain)
nix develop -c cargo test
nix develop -c cargo clippyCI runs via rainlanguage/rainix reusable workflows.
CAL-1.0.