Expand description

A library for writing Substreams handlers.

Substreams consists of a number of modules which provide structs and macros for implementing Substreams handlers. The handlers are defined in your Manifest. Learn more about Substreams at https://substreams.streamingfast.io

Handler Examples

Below are a few map handler examples. The signature of the handler function is based on the inputs and output defined in the map module definition in the Manifest. There are a few things to note:

  • Best practice is to name your map module function `map_<your_action>’
  • map module function must always return a Result
  • The Result must have an Error type set to substreams::error:Error
 use substreams::{errors::Error, store};
 use substreams::store::{DeltaBigDecimal, StoreGetProto, StoreGet};
   }

 /// Map handler which takes a source as input
 #[substreams::handlers::map]
 fn map_transfers(blk: eth::Block) -> Result<pb::Custom, Error> {
     unimplemented!("do something");
 }

 /// Map handler which takes a source, and a store in get mode as inputs
 #[substreams::handlers::map]
 fn map_ownerships(blk: eth::Block, my_things: StoreGetProto<pb::Pairs>) -> Result<pb::Custom, Error> {
     unimplemented!("do something");
 }

 /// Map handler which takes a source, another map, and a store in get mode as inputs
 #[substreams::handlers::map]
 fn map_mints(blk: eth::Block, mints: pb::Custom, myt_things: StoreGetProto<pb::Pairs>) -> Result<pb::Custom, Error> {
     unimplemented!("do something");
 }

 /// Map handler which takes a source, another map, and a store in delta mode as inputs
 #[substreams::handlers::map]
 fn map_db(blk: eth::Block, mints: pb::Custom, store_deltas: store::Deltas<DeltaBigDecimal>) -> Result<pb::Custom, Error> {
     unimplemented!("do something");
 }

Below are a few store handler examples. The signature of the handler function is based on the inputs defined in the store module definition in the Manifest. There are a few things to note:

  • Best practice is to name your map module function `store_<your_action>’
  • store module function must return nothing
use substreams::store;
use substreams::store::{DeltaBigDecimal, StoreGetProto, StoreAddInt64, StoreGet};

#[substreams::handlers::store]
fn store_transfers(objects: pb::Custom, output: StoreAddInt64) {
    // to something
}

#[substreams::handlers::store]
fn store_ownerships(objects: pb::Custom, store: StoreGetProto<pb::Pairs>, output: StoreAddInt64) {
    // to something
}

#[substreams::handlers::store]
fn store_mints(objects: pb::Custom, store: StoreGetProto<pb::Pairs>, another_store: StoreGetProto<pb::Tokens>, store_deltas: store::Deltas<DeltaBigDecimal>, output: StoreAddInt64) {
    // to something
}

Modules

Error implementation for Substreams.
Handler macros for Substreams.
Log Implementation for Substreams
Protobuf generated Substream models
Protobuf helpers for Substreams.
Store Implementation for Substreams.

Macros

Macro for converting sequence of string literals containing hex-encoded data into an array of bytes.

Structs

Hex is a simple wrapper type that you can use to wrap your type so that it prints in lower hexadecimal format when use as a formatting argument.

Functions

Registers a Substreams custom panic hook. The panic hook is invoked when then handler panics