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.exein 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-serverrunnpm 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_NUMBERvalues - Specify the parameters for the transaction sending behaviour of each node using the fields
MAX_BLOCKS_PENDING,INITIAL_SENDING_DELAY,SENDING_WAIT_TIMEandREQUIRED_COMMITS. - Set
IS_MASTERtotruefor the master machine and tofalsefor 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_ADDRESSandTRACKER_SERVER_PORTto point to the server location
- Set
- Start the tracker server
- In folder
tracker-serverrunnpm 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>/demoin a browser.
From the root folder run mvn test.