Blockchain Data

Blockchain has the potential to change the way that the world approaches data. Develop Blockchain skills by understanding the data model behind Blockchain by developing your own simplified private blockchain.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

Installing Node and NPM is pretty straightforward using the installer package available from the (Node.js® web site)[https://nodejs.org/en/].

Configuring your project

  • Use NPM to initialize your project and create package.json to store project dependencies.
npm init
  • Install crypto-js with --save flag to save dependency to our package.json file
npm install crypto-js --save
  • Install level with --save flag
npm install level --save
  • Install Express.js npm install express --save
- Install body-parser
npm install body-parser --save

Testing

To test code: 1: Open a command prompt or shell terminal after install node.js. 2: Enter a node session, also known as REPL (Read-Evaluate-Print-Loop). 3: Smoke tests for simple chain could also be triggered by npm test

node

3: Copy and paste your code into your node session 4: Instantiate blockchain with blockchain variable

let blockchain = new Blockchain();

5: Generate 10 blocks using a for loop

for (var i = 0; i <= 10; i++) {
  blockchain.addBlock(new Block("test data "+i));
}

6: Validate blockchain

blockchain.validateChain();

7: Induce errors by changing block data

let inducedErrorBlocks = [2,4,7];
for (var i = 0; i < inducedErrorBlocks.length; i++) {
  blockchain.chain[inducedErrorBlocks[i]].data='induced chain error';
}

8: Validate blockchain. The chain should now fail with blocks 2,4, and 7.

blockchain.validateChain();

API

Get block endpoint

  • Configure GET request using URL path with a block height parameter.
  • The response for the endpoint should provide block object is JSON format.

GET response example for URL http://localhost:8000/block/0

    HTTP/1.1 200 OK
    content-type: application/json; charset=utf-8
    cache-control: no-cache
    content-length: 179
    accept-ranges: bytes
    Connection: close
    {"hash":"49cce61ec3e6ae664514d5fa5722d86069cf981318fc303750ce66032d0acff3","height":0,"body":"First block in the chain - Genesis block","time":"1530311457","previousBlockHash":""}

Post block endpoint

  • Post a new block with data payload option to add data to the block body.
  • The block body should support a string of text.
  • The response for the endpoint should provide block object is JSON format.

POST response example for URL http://localhost:8000/block

    HTTP/1.1 200 OK
    content-type: application/json; charset=utf-8
    cache-control: no-cache
    content-length: 238
    Connection: close
    {"hash":"ffaffeb2330a12397acc069791323783ef1a1c8aab17ccf2d6788cdab0360b90","height":1,"body":"Testing block with test string data","time":"1531764891","previousBlockHash":"49cce61ec3e6ae664514d5fa5722d86069cf981318fc303750ce66032d0acff3"}