informalsystems / basecoin-rs

An example ABCI application making use of tendermint-rs and ibc-rs
Apache License 2.0
56 stars 17 forks source link
abci ibc tendermint

basecoin-rs

At a high level, basecoin implements the application logic that sits between the Tendermint consensus layer and ibc-rs. It is a rudimentary Tendermint ABCI application that implements the following functionality in the form of modules -

Its main use-cases are serving as a testing ground and mock implementation for verifying the correctness and behaviour of the ibc-rs modules.

Requirements

So far this app has been tested with:

How to integrate ibc-rs changes into basecoin

Since basecoin serves as a suite of integration tests against ibc-rs's functionality, each ibc-rs PR also requires an accompanying basecoin PR. The steps to do this are:

  1. In a new branch in basecoin, update ibc revisions with the latest commit of the ibc-rs PR.
  2. Implement the necessary changes in basecoin in order to get it working with the latest commit revision of ibc-rs.
  3. Run cargo clippy --all-features and cargo clippy --no-default-features and fix any issues that clippy raises.
  4. Open a PR in the basecoin-rs repository, making sure to the link to the associated ibc-rs PR.
  5. Check to see if the integration tests pass.

Starting up an instance of basecoin

Step 1: Reset your local CometBFT node

$ cometbft init
$ cometbft unsafe-reset-all

Step 2: Modify CometBFT config

Edit the CometBFT config.toml file (default location ~/.cometbft/config/config.toml) to update the proxy_app and P2P laddr as follows.

proxy_app = "tcp://127.0.0.1:26358"
# ...
[p2p]
laddr = "tcp://0.0.0.0:26356"

Step 3: Module specific setup

See the module documentation for more details -

Step 4: Run the basecoin app and CometBFT

# See all supported CLI options
$ cargo run -- --help
basecoin 0.1.0

USAGE:
    basecoin [FLAGS] [OPTIONS]

Commands:
    start
    query   Query a state of Basecoin application from the store
    help    Prints this message or the help of the given subcommand(s)

OPTIONS:
        --config <FILE>  The path to the configuration file [default: config.toml]
        --verbose        Increase output logging verbosity to DEBUG level
        --quiet          Suppress all output logging (overrides --verbose)
    -h  --help           Prints help information
    -V, --version        Prints version information

# Run the ABCI application (from this repo)
# The -v is to enable trace-level logging
$ cargo run -- -v

# In another terminal
$ cometbft node

UML diagrams

system diagram

class diagram

activity diagram - DeliverTx