#alloy #ethereum #erc20

alloy-erc20

使用 Alloy 与 ERC-20 合约交互

3 个不稳定版本

0.2.0 2024年7月28日
0.1.1 2024年6月19日
0.1.0 2024年6月17日

#2 in #erc20

Download history 304/week @ 2024-06-16 14/week @ 2024-06-23 2/week @ 2024-06-30 145/week @ 2024-07-28 1/week @ 2024-08-04

每月下载量 146

MIT 许可证

29KB
682

alloy-erc20

ERC20 是一个依赖 Alloy 的 Rust 库,允许与 ERC-20 合约交互。

安装

alloy-erc20 添加到您的 Cargo.toml 文件中。

alloy-erc20 = "0.2"

功能

  • 一个基本的 Token 结构和与 Alloy 的 Provider 相关的扩展方法,允许检索代币小数位数,并从 U256 计算余额作为 BigDecimal
  • 一个 TokenStore 特征和一个 BasicTokenStore 实现,允许在内存中缓存 Token
  • 一个 LazyToken 结构,作为 Alloy 合约实例的包装器,懒加载从区块链中检索 namesymboldecimalstotalSupply

入门

基本用法

let provider = ProviderBuilder::new().on_http("https://...".parse()?);

// Just retrieve a token from its address
let dai = provider
    .retrieve_token(address!("6B175474E89094C44Da98b954EedeAC495271d0F"))
    .await?;

// Compute a balance as a BigDecimal from a U256
let balance = dai.get_balance(U256::from(1000000000000_u64));

存储

let provider = ProviderBuilder::new().on_http("https://...".parse()?);

let store = BasicTokenStore::new();

// Just retrieve a token from its address, and add it to the store
let dai = provider
    .get_token(address!("6B175474E89094C44Da98b954EedeAC495271d0F").into(), &store)
    .await?;

// ...

// Now the token can be retrieved from its symbol or address from the store
let dai = store.get(1, TokenId::Symbol("DAI".to_string())).unwrap();

// Compute a balance as a BigDecimal from a U256
let balance = dai.get_balance(U256::from(1000000000000_u64));

懒加载

let provider = ProviderBuilder::new().on_http("https://...".parse()?);

let dai = LazyToken::new(address!("6B175474E89094C44Da98b954EedeAC495271d0F"), provider);

// lazily query the network for the decimals and cache the result
let total_supply = dai.decimals()?;

依赖项

~27–36MB
~720K SLoC