Using ABCI-CLI
To facilitate testing and debugging of ABCI servers and simple apps, we built a CLI, theabci-cli, for sending ABCI messages from the command
line.
Install
Make sure you have Go installed. Next, install theabci-cli tool and example applications:
abci-cli to see the list of commands:
KVStore - First Example
Theabci-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:
- a socket server
- a handler for ABCI messages
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 in an interactive console for
speaking ABCI messages to your application.
Try running these commands:
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.