# 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][revs] 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][integration-tests] pass. ## Starting up an instance of basecoin ### Step 1: Reset your local CometBFT node ```shell $ 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. ```toml 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 - * [Bank module](docs/modules/bank.md) * [Ibc module](docs/modules/ibc.md) ### Step 4: Run the basecoin app and CometBFT ```console # 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 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](docs/images/system-diagram.png) --- ![class diagram](docs/images/class-diagram.png) --- ![activity diagram - DeliverTx](docs/images/activity-diagram-deliverTx.png) [revs]: https://github.com/informalsystems/basecoin-rs/blob/9610b29067ba122808d1d14354a32e2005b54517/Cargo.toml#L15-L16 [integration-tests]: https://github.com/informalsystems/basecoin-rs/blob/8f744c8356569d5f87a546f46d1ade247ebe5256/.github/workflows/integration.yml#L1