#applications #store #avl #ibc #tendermint #abci #basecoin

basecoin-store

A simple implementation of an AVL store tailored for the basecoin application

2 unstable releases

0.2.0 Aug 9, 2024
0.1.0 May 13, 2024

#2 in #abci

Download history 375/week @ 2024-07-29 359/week @ 2024-08-05 271/week @ 2024-08-12 180/week @ 2024-08-19 244/week @ 2024-08-26 338/week @ 2024-09-02 451/week @ 2024-09-09 131/week @ 2024-09-16 179/week @ 2024-09-23 117/week @ 2024-09-30 92/week @ 2024-10-07 153/week @ 2024-10-14 63/week @ 2024-10-21 123/week @ 2024-10-28 321/week @ 2024-11-04 215/week @ 2024-11-11

728 downloads per month
Used in 2 crates (via ibc-testkit)

Apache-2.0

69KB
1.5K SLoC

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 -

  • bank - keeps track of different accounts' balances and facilitates transactions between those accounts.
  • ibc - enables support for IBC (clients, connections & channels)

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:

  • Rust > v1.64
  • CometBFT v0.37

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

Dependencies

~10MB
~187K SLoC