13 unstable releases (4 breaking)
0.6.0 | Oct 16, 2024 |
---|---|
0.5.0 | Sep 18, 2024 |
0.4.2 | Jul 30, 2024 |
0.4.1 | Mar 24, 2024 |
0.1.0 | Jan 24, 2023 |
#1 in #antelope
27 downloads per month
145KB
2.5K
SLoC
Substreams
for Antelope
This library contains the generated Rust protobuf bindings for Antelope blocks as well as helper methods to extract and parse block data.
📖 Documentation
https://docs.rs/substreams-antelope
Further resources
Install
$ cargo add substreams-antelope
Usage
Refer to Docs.rs for helper methods on Block
that extract action and transaction iterators from the Antelope block.
Cargo.toml
[dependencies]
substreams = "0.6"
substreams-antelope = "0.6"
src/lib.rs
use substreams::prelude::*;
use substreams::errors::Error;
use substreams_antelope::{Block, ActionTraces};
#[substreams::handlers::map]
fn map_action_traces(block: Block) -> Result<ActionTraces, Error> {
let mut action_traces = vec![];
for trx in block.transaction_traces() {
for trace in trx.action_traces {
action_traces.push(trace);
}
}
Ok(ActionTraces { action_traces })
}
Or, using actions()
helper method to filter all actions of Statelog
type from myaccount
account. As a parameter you can specify a list of contract account names to include actions from, that can be empty if you want actions with this signature from any contract account.
src/lib.rs
#[substreams::handlers::map]
fn map_actions(param_account: String, block: substreams_antelope::Block) -> Result<Actions, substreams::errors::Error> {
Ok(Actions {
transfers: block.actions::<abi::contract::actions::Transfer>(&["eosio.token"])
.map(|(action, trace)| Transfer {
// action.to, action.from, action.memo, action.quantity are available here.
})
.collect(),
})
}
Using Abigen
To generate ABI bindings for your smart contract you can add abi/contract.abi.json
file containing the smart contract ABI, as well as the following build.rs
file to the root of your project. This will ensure that src/abi/contract.rs
module containing Rust bindings for your smart contract is always generated in your project:
build.rs
fn main() {
substreams_antelope::Abigen::new("Contract", "abi/eosio.token.json")
.expect("failed to load abi")
.generate()
.expect("failed to generate contract")
.write_to_file("src/abi/eosio.token.rs")
.expect("failed to write contract");
}
Release
- Run
gen.sh
if there were changes in protobufs - Bump up version in workspace
Cargo.toml
- Commit changes
- Tag a release: https://github.com/pinax-network/substreams-antelope/releases
- Publish packages in this order:
substreams-antelope-core
,substreams-antelope-abigen
,substreams-antelope
.
TODO: automate releases with github actions
Dependencies
~5.5–8.5MB
~150K SLoC