Files
tendermint/abci
M. J. Fromberger 4a9bbe047f Fix lock sequencing in socket client request tracking. (#8581)
* Fix lock sequencing in socket client request tracking.

It is not safe to check base service state (IsRunning) while holding the lock
for the client state. If we do, then during shutdown we may deadlock with the
invocation of the OnStop handler, which the base service executes while holding
the service lock.

* Enqueue pending requests before sending them to the server.

If we don't do this, the server can reply before the request lands in the
queue.  That will cause the receiver to terminate early for an unsolicited
response. So enqueue first: This is safe because we're doing it in the same
routine as services the channel, so we won't take another message till we are
safely past that point.

* Document what we did.
* Fix socket paths in tests.
2022-05-19 12:11:57 -07:00
..

Application BlockChain Interface (ABCI)

Blockchains are systems for multi-master state machine replication. ABCI is an interface that defines the boundary between the replication engine (the blockchain), and the state machine (the application). Using a socket protocol, a consensus engine running in one process can manage an application state running in another.

Previously, the ABCI was referred to as TMSP.

The community has provided a number of additional implementations, see the Tendermint Ecosystem

Installation & Usage

To get up and running quickly, see the getting started guide along with the abci-cli documentation which will go through the examples found in the examples directory.

Specification

A detailed description of the ABCI methods and message types is contained in:

Protocol Buffers

To compile the protobuf file, run (from the root of the repo):

make protoc_abci

See protoc --help and the Protocol Buffers site for details on compiling for other languages. Note we also include a GRPC service definition.