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 次每月下载
58KB
1.5K SLoC
eth_rpc
功能
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