Skip to content

Latest commit

 

History

History
98 lines (72 loc) · 3.84 KB

README.md

File metadata and controls

98 lines (72 loc) · 3.84 KB

github crates.io docs.rs GitHub Workflow Status

This library contains the generated Rust protobuf bindings for Antelope blocks as well as helper methods to extract and parse block data.

📖 Documentation

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

TODO: automate releases with github actions