1 个不稳定版本
0.25.6 |
|
---|---|
0.25.6-fork | 2024年5月14日 |
155 在 #web3
每月101 次下载
365KB
8K SLoC
为以太坊智能合约生成绑定。内部,生成的类型使用 web3
包与以太坊网络交互,并使用自定义的 Instance
运行时,可以直接使用而无需代码生成。
此包使用 std::future::Future
通过将 web3
futures
0.1 与 futures
0.3 兼容层包装来处理未来。这意味着此包已准备好使用 async
/await
!
以下是一个与智能合约 MyContract
交互的示例。使用构建器模式配置交易。
pragma solidity ^0.6.0;
contract MyContract {
function my_view_function(uint64 some_val) public view returns (string) {
// ...
}
function my_function(bool some_bool, string some_str) public returns (uint256) {
// ...
}
function my_other_function() public {
// ...
}
}
一旦使用 truffle 构建并部署此合约,以下示例将演示如何从 Rust 与之交互。
use ethcontract::transaction::Account;
use std::time::Duration;
use web3::api::Web3;
use web3::types::*;
// this proc macro generates a `MyContract` type with type-safe bindings to
// contract functions
ethcontract::contract!("path/to/MyContract.json");
// create a web3 instance as usual
let transport = ...;
let web3 = Web3::new(transport);
// now create an instance of an interface to the contract
let instance = MyContract::deployed(web3).await?;
let addr: Address = "0x000102030405060708090a0b0c0d0e0f10111213".parse()?;
let some_uint: U256 = U256::from_dec_str("1000000000000000000")?;
let some_bool = true;
let some_val = u64;
// call instance view functions with type-safe bindings! will only compile
// if contract function accepts a single `u64` value parameter and returns
// a concrete type based on the contract function's return type
let value = instance
.my_view_function(some_val)
.from(addr)
.execute()
.await?;
// contract functions also have type-safe bindings and return the tx hash
// of the submitted transaction; allows for multiple ways of signing txs
let tx = instance
.my_function(some_bool, value)
.from(Account::Locked(addr, "password".into(), None))
.value(some_uint)
.gas_price(1_000_000.into())
.execute()
.await?;
// wait for confirmations when needed
let receipt = instance
.my_important_function()
.poll_interval(Duration::from_secs(5))
.confirmations(2)
.execute_confirm()
.await?;
有关使用方法和参数的更多信息,以及如何直接从 Etherscan 使用合约 ABI,请参阅 contract!
过程宏文档。一个预置模块,用于在交互生成的合约时导入常用类型。各种运行时类型的别名,这些类型使用底层的 DynTransport
。这些类型在生成的代码中广泛使用。
依赖项
~10–29MB
~433K SLoC