Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/informalsystems/basecoin-rs
An example ABCI application making use of tendermint-rs and ibc-rs
https://github.com/informalsystems/basecoin-rs
abci ibc tendermint
Last synced: about 1 month ago
JSON representation
An example ABCI application making use of tendermint-rs and ibc-rs
- Host: GitHub
- URL: https://github.com/informalsystems/basecoin-rs
- Owner: informalsystems
- License: apache-2.0
- Created: 2021-06-04T12:03:52.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-09T19:41:11.000Z (4 months ago)
- Last Synced: 2024-08-15T10:52:42.263Z (4 months ago)
- Topics: abci, ibc, tendermint
- Language: Rust
- Homepage:
- Size: 1.5 MB
- Stars: 51
- Watchers: 20
- Forks: 17
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - informalsystems/basecoin-rs - An example ABCI application making use of tendermint-rs and ibc-rs (Rust)
README
# 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.75
* 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.0USAGE:
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