While the needs and environments for blockchain systems exist, a major downforce for the
application of this technology has always been its hard entry level. Existing blockchain
systems are often tailored towards a specific use-case or application domain and therefore
are hard to apply for new application types. To deal with this challenge, one of the three
following strategies is typically applied: (1) To reinvent the wheel and to engineer a new
blockchain system from scratch, fitting to the specific needs. (2) To carefully adapt an
existing blockchain system to the new requirements. (3) To not install a blockchain solution
at all. Of course, often, consequence (3) is picked as (1) and (2) are cumbersome and
therefore costly.
A step towards solving this problem is the observation that all blockchain systems essentially
consist only of two major components. The first component manages the network level. It
receives input transactions, orders them globally, and distributes the transaction sequence to
each node of the network in exactly the same way. The challenge here lies in performing
this in an untrusted environment, where a certain amount of participants might behave
maliciously or at least arbitrarily. To guarantee safety and liveness in such an environment,
network levels implement sophisticated consensus mechanisms, secure message passing, and
tamper-proof transaction logging. Despite various different implementations, the network
level is rather independent from the actual application, as the semantics of the transactions
are not relevant for this part. The second component manages the node level and centers
around the processing of transactions within each node. Naturally, the requirements here
are highly application dependent. For instance, to implement a currency, a simple key-
value-store backend managing account balances with a put()/get()/delete() interface
is sufficient. However, to power complex sales operations, a relational database system
offering full-fledged SQL support is certainly the better choice.
As a consequence of these observations, blockchain frameworks have emerged that try
to strictly separate their components by design. For example, the popular permissioned
blockchain framework Hyperledger Fabric [
An18
] provides exchangeable default imple-
mentations for its individual components. While this is a step in the right direction, Fabric
unfortunately still forces the user to stick to the key-value model. This limitation is overcome
by the framework Tendermint Core [
Te22b
], which leaves the node level backend fully
unimplemented. It is up the application to provide a backend which receives and processes
the transactions that are distributed by the framework to each node.
As this is a promising design for tackling the initial problem, in this work, we investigate
how challenging and how practical it is to connect a transaction processing backend to
the blockchain framework Tendermint Core. To cover a wide range of applications, we
integrate a highly-versatile transaction processing system, namely a relational DBMS.
We show how to create a “relational blockchain” with minimal effort and are especially
interested in the overhead that is caused by this combination. We will investigate the latency
and throughput of the relational blockchain under the drastically different synchronous,
pseudo-synchronous, and asynchronous communication, each appropriate for different types
of applications. Further, we will look at the scaling behavior of the system and discuss