17次发布

0.2.6 2023年11月13日
0.2.5 2023年11月13日
0.2.2 2023年9月26日
0.1.9 2023年9月8日
0.1.7 2023年8月27日

#2987 in 魔力豆

42 次每月下载

MIT/Apache

58KB
1.5K SLoC

eth_rpc

Test

功能

eth_rpc是一个简单、可移植的eth rpc(部分)实现,具有以下功能:

  • 辅助方法:代币符号、代币小数位数、与ethers-rs abigen兼容的eth_call、获取revm AccountInfo模型的功能
  • 传输方式:Ipc、Http、EnvHttp、RandomizeHttp(用于底层多个节点提供商链接的设置)
  • 配置序列化支持
  • 最常见的交易提交错误
  • json rpc批处理
  • 同步(收回对线程运行时的控制权,在Linux线程上运行而不是在tokio上运行)
  • 速率限制(例如,对于alchemy)和网络错误保护

(不完整)功能概述

底层所有调用(除交易提交以获得完全控制外)都不使用速率限制rpc

pub fn no_ratelimit_rpc<R>(&self, jr: JRCall) -> Result<R, JRError>
where
    R: for<'a> Deserialize<'a>,

与abigen兼容的eth call

/// simple wrapper on top of eth call to work with abigen! macro
pub fn eth_call_typed<R>(&self, to: H160, calldata: impl AbiEncode) -> Result<R, JRError>
where
    R: AbiDecode,

json rpc(分块)批处理兼容性

/// in case of error returns first JRError encountered
pub fn batch(&self, requests: Vec<JRCall>) -> Result<Vec<SafeJRResult>, JRError>

Erc20辅助

pub fn get_balance(&self, token: H160, account: H160) -> Result<U256, JRError>;
pub fn get_decimals(&self, token: H160) -> Result<u8, JRError>;
pub fn get_symbol(&self, token: H160) -> Result<String, JRError>;
/// for MKR token
pub fn get_bytes32_symbol(&self, token: H160) -> Result<String, JRError>;

自定义交易提交错误(将根据下游需求处理更多)

#[derive(Debug)]
pub enum SubmitTxError {
    JRErr(JRError),
    NonceTooLow,
    ReplacementUnderpriced,
    BaseGasPriceTooLow(String),
}

示例rpc序列化(json)配置(底层使用所有https随机访问)

{
  "batch_chunk_size": 5,
  "transport": {
    "RandomizeHttps": [
      "https://omniscient-few-darkness.quiknode.pro/fake0/",
      "https://eth-mainnet.g.alchemy.com/v2/fake1",
      "https://eth-mainnet.g.alchemy.com/v2/fake2",
      "https://eth-mainnet.g.alchemy.com/v2/fake3"
    ]
  }
}

功能包括

  • eth_blockNumber
  • eth_estimateGas
  • eth_gasPrice
  • eth_getBlockByNumber(使用ethers Block类型)
  • eth_getLogs(使用自定义日志类型)
  • eth_getStorageAt
  • eth_getTransactionByHash
  • eth_getTransactionCount
  • eth_getTransactionReceipt(使用ethers TransactionReceipt)

测试

根据source_env_example.sh修改source_env.sh,然后使用sh ./regression.sh运行测试

依赖项

~35–52MB
~1M SLoC