24 releases (11 breaking)
|0.12.2||Jun 8, 2021|
|0.11.3||Mar 22, 2021|
|0.9.1||Dec 10, 2020|
|0.9.0||Nov 10, 2020|
|0.1.0||Nov 7, 2019|
#37 in Procedural macros
389 downloads per month
Used in 2 crates (via ethcontract)
Crate used for generating code for Ethereum smart contracts. It provides a function procedural macro that generates safe bindings for contract interaction based on the contract ABI.
Add a dependency to the
ethcontract crate in your
[dependencies] ethcontract = "..."
Then generate a struct for interacting with the smart contract with a type-safe API:
This will generate a new struct
ContractName with contract generated methods
for interacting with contract functions in a type-safe way.
The minimum supported Rust version is 1.52.
As an alternative to the procedural macro, a generator API is provided for
generating contract bindings from
build.rs scripts. More information can be
found in the
In order to run local examples you will additionally need:
- NodeJS LTS
For all examples, the smart contracts must first be built:
cd examples/truffle yarn && yarn build
Truffle examples rely on the local truffle development server. In a separate terminal run:
cd examples/truffle yarn start
abi example deploys a simple contract and performs various
to illustrate how Solidity types are mapped to Rust types by
cargo run --example abi
async example deploys an ERC20 token and interacts with the contract
with various accounts.
cargo run --example async
deployments example illustrates how the
deployments parameter can be
specified when generating a contract with the
This can be useful for specifying addresses in testing environments that are
deterministic but either not included, or inaccurate in the artifact's
networks property (when for example the contract is developed upstream, but
a separate testnet deployment wants to be used).
cargo run --example deployments
events example illustrates how to listen to logs emitted by smart
cargo run --example events
generator example (actually a separate crate to be able to have a build
script) demonstrates how the generator API can be used for creating type-safe
bindings to a smart contract with a
build.rs build script.
cargo run --package examples-generate
linked example deploys a library and a contract that links to it then
makes a method call.
cargo run --example linked
There is a provided example that runs with Rinkeby and Infura. Running this example is a little more involved to run because it requires a private key with funds on Rinkeby (for gas) as well as an Infura project ID in order to connect to a node. Parameters are provided to the Rinkeby example by environment variables:
export PK="private key" export INFURA_PROJECT_ID="Infura project ID" cargo run --example rinkeby
This example generates contract bindings from online sources:
- A verified contract on Etherscan
- An npmjs contract
It also queries some contract state with Infura. Running this example requires an Infura project ID in order to connect to a node. Parameters are provided to the example by environment variables:
export INFURA_PROJECT_ID="Infura project ID" cargo run --example sources
This example retrieves the entire event history of token OWL contract and prints the total number of events since deployment.
Note the special handling of the
tokenOWLProxy contract and how it is cast into
tokenOWL instance using Contract's
export INFURA_PROJECT_ID="Infura project ID" cargo run --example past_events
You can view example generated contract documentation by fist building the contracts and then generating documentation for the crate:
(cd examples/truffle; yarn && yarn build) cargo doc --package examples-documentation --no-deps --open
This will open a browser at the documentation root.