Introduction
This tutorial will demonstrate how to simulate and run a blockchain system using JavaScript. Often times, whenever blockchain and to some extent smart contract is described, what comes to minds is an opaque black-box. It could be that the predominant language used for writing most smart contract codes contributes to this.
This piece will show a detailed step-by-step approach to implementing a smart contract using Node.js and vanilla JavaScript. A test suite will also be added to test the whole application. The source code for the article can be found in this repository. Let's get started!
Here, we have three parameters, two arrays representing initialBalances
and transactions
and a third integer representing the blockSize
. We are going to create a blockchain smart contract that includes all valid pending transactions in the order in which they are given. And provide functionality to get the balance of a specific account on the blockchain.
Installation of Dependencies
First, clone the above repository and run npm install
and skip over to the Implementation section below. If you are otherwise coding along, initialize your node.js project by running npm init -y
. Then, create two files blockchain.js
and blockchain.test.js
. Install the following dependencies by running npm i sha1 chai mocha
.
The files in the directory should look like the below image:
Then add the following codes to the blockchain.js
file blockchain.js
Save the file and add the following code to the blockchain.test.js
file blockchain.test.js
Save the file also and open the package.json
file. Here, you need to make minor changes to the script commands. First, the following code to the script part of the package.json
:
"start": "node blockchain.js",
"test": "mocha --timeout 10000"
The --timeout 10000
will ensure that all the test will pass during testing.
Implementation
There are two interfaces viz: init
and getAccountBalance
. But before that, let's define some parameters.
const balances = [200, 250, 500];
const transactions = [[0, 1, 50], [1, 2, 80], [1, 0, 100], [1, 2, 600], [2, 0, 150], [1, 0, 50], [2, 1, 60], [0, 1, 55], [1, 2, 40], [1, 0, 70]];
const blockSize = 3;
const index = 1;
const pendingTransactions = [[0,1,50], [1,2,80]];
const prevBlockHash = '548bc92f827bd41ad97243cc3ca4b765f8c68a2c';
We are going to execute the code and run the test. Run the following code sequentially inside the root directory of the project (Ignore the undefined output after executing any of the commands):
Activate the Node REPL with
node
Initialize the constructor by running
const Blockchain = require('./blockchain');
Instantiate an object by running
const blockchain = new Blockchain();
Initialize an object by running
blockchain.init(balances, transactions, blockSize);
Retrieve account balance by running
blockchain.getAccountBalance(index);
The Node REPL should look like the following image if everything checks out:
Testing the Codes
Exit the Node REPL and return to the root directory. Run the test by executing npm test ./blockchain.test.js
. The output should look like below image:
You have successfully implemented and tested a blockchain code using JavaScript. You can take some time to go through the code in order to understand how each part of the code interact with each other.
If you like the article, do like and share with friends.
Top comments (0)