This project implements the system described in the following paper:
By Zhijie Ren and Zekeriya Erkin [PDF]
Blockchain technology, sometimes known by its applications like cryptocurrencies, suffers from the scalability problem mainly due to the unideal throughput of Byzantine fault tolerance consensus algorithms. Recently, many blockchains have been proposed to achieve scale-out throughput, i.e., the throughput of the system grows with the number of nodes. In this paper, we propose a novel scale-out blockchain system for the most considered type of ledgers, we call Value Transferring Ledgers, in which a transaction is a transfer of positive value from one node to another. In our system, nodes commonly agree on a main chain and individually generate their own chains. We propose a locally executable validation scheme with uncompromised validity and scalable throughput. Furthermore, a smart transacting algorithm is introduced so that the system is spontaneously sharded for individual transactions and achieves scale-out throughput.
An in-depth explanation of the system is available as a technical report in the docs
folder.
- Java 8 or newer
- NodeJS 6 or newer
- Tendermint 0.14.0
- Place a tendermint executable (V0.14) called
tendermint.exe
in the root folder of the project. The file-extension of the file must also be present on non-Windows systems. Download here - Install the tracker server
- In the folder
tracker-server
runnpm install
- In the folder
- Determine the master machine (when only using a single machine this must also be the master)
- Determine the IP address of the tracker
Apply these configuration steps for every machine
- In the
SimulationMain
-class:- Give each machine its sets of node by changing the
LOCAL_NODES_NUMBER
,TOTAL_NODES_NUMBER
,NODES_FROM_NUMBER
values - Specify the parameters for the transaction sending behaviour of each node using the fields
MAX_BLOCKS_PENDING
,INITIAL_SENDING_DELAY
,SENDING_WAIT_TIME
andREQUIRED_COMMITS
. - Set
IS_MASTER
totrue
for the master machine and tofalse
for all the others - If the current machine is the master, also specify the simulation time in seconds.
- Give each machine its sets of node by changing the
- In the
Application
-class:- Set
TRACKER_SERVER_ADDRESS
andTRACKER_SERVER_PORT
to point to the server location
- Set
- Start the tracker server
- In folder
tracker-server
runnpm start
- In folder
- Start the master machine by calling the main method in
SimulationMain
. - Start the other machines the same way as the master.
- A live visualization of the network can be seen by opening
<tracker-address>/demo
in a browser.
From the root folder run mvn test
.