Skip to main content
To facilitate testing and debugging of ABCI servers and simple apps, we built a CLI, the abci-cli, for sending ABCI messages from the command line.

Install

Make sure you have Go installed. Next, install the abci-cli tool and example applications:
Now run abci-cli to see the list of commands:

KVStore - First Example

The abci-cli tool lets us send ABCI messages to our application to help build and debug them. The most important messages are deliver_tx, check_tx, and commit, but there are others for convenience, configuration, and information purposes. We’ll start a kvstore application, which was installed at the same time as abci-cli above. The kvstore just stores transactions in a Merkle tree. Its code can be found here. Start the application by running:
And in another terminal, run
You’ll see something like:
and:
An ABCI application must provide two things:
  • a socket server
  • a handler for ABCI messages
When we run the abci-cli tool, we open a new connection to the application’s socket server, send the given ABCI message, and wait for a response. The server may be generic for a particular language, and we provide a reference implementation in Golang. See the list of other ABCI implementations for servers in other languages. The handler is specific to the application, and may be arbitrary, so long as it is deterministic and conforms to the ABCI interface specification. So when we run abci-cli info, we open a new connection to the ABCI server, which calls the Info() method on the application, which tells us the number of transactions in our Merkle tree. Now, since every command opens a new connection, we provide the abci-cli console and abci-cli batch commands to allow multiple ABCI messages to be sent over a single connection. Running abci-cli console should drop you into an interactive console for speaking ABCI messages to your application. Try running these commands:
Note that if we do finalize_block "abc" ... it will store (abc, abc), but if we do finalize_block "abc=efg" ... it will store (abc, efg). You could put the commands in a file and run abci-cli --verbose batch < myfile. Note that the abci-cli is designed strictly for testing and debugging. In a real deployment, the role of sending messages is taken by CometBFT, which connects to the app using four separate connections, each with its own pattern of messages. For examples of running an ABCI app with CometBFT, see the getting started guide.

Bounties

Want to write an app in your favorite language?! We’d be happy to add you to our ecosystem! See funding opportunities from the Interchain Foundation for implementations in new languages and more.