The chain - Just a simple way to integrate a blockchain
Tags: blockchain, npm, node, javascript
Published: 2019-12-21 19:45:41

So, let's talk about The chain. The chain its a npm package made for anyone interested to build a Node.JS Blockchain App. 

# How it started?
Some months ago, i've been looking for a blockchain package, something that can help me build a blockchain based social media.
So i have been searching the hole npm for one, that can create a simple blockchain database in less then 5 minutes, which can create new block at a custom time interval, and also provide a simple API to make my life easier.

# Why The Chain instead of a simple database
The Chain its not only a sqlite3 database with some default table, The Chain its a package that comes with ways that must help the developer reduce the time to build his awesome blockchain application.

# Features

 - Easy to integrate to existing apps
 - A very customizable chain
 - Custom block time
 - Block verify function
 - Local database

# Incoming Features!

  - Node system - this will let you sync the chain between multiple nodes
  - Multiple extract data features
  - Block confirmation system
  - SocketIO API
  - Documentation


### Installation

The Chain requires [Node.js](https://nodejs.org/) v10 (only tested) to run. 

Install The Chain...
```sh
$ npm install thechain --save
```

A simple demo

```js
const Chain = require("thechain");
const blockchain = new Chain(path, port, blockTime); // or new Chain() for a fast blockchain

const block_one = blockchain.getBlock(1);
console.log(block_one); // this will print the genesis block
```

Default params:

```js
const path = "./chain/chain.db3";
const port = 4444;
const blocktime =  60000; // 1 minute blocktime in ms
```
# Methods


### Verify the Chain 
```js
blockchain.verifyChain(); // No return
```
This method will be initially called to check every block, you can use it whenever you want, but warning, this method will stop your script until every block is checked.

### Create new Block (WARNING! Better to set a block time and never use this method!)
```js
blockchain.createNewBlock(); // No return
```
This method will create a new block when it is called, the block data will be the data contained in the data object at the block time.

### Data push
```js
const Object = ["test1", "test2"];
blockchain.push(Object); // No return
```
This method will push data into the block, and the block will be generated with the pushed data.

### Get last 100 blocks
```js
const last100blocks = blockchain.getLast100();
console.log(last100blocks); 
```
This method will return the last 100 blocks.
### Get x block
```js
const blockNumber = 2; // Block number id
const block = blockchain.getBlock(blockNumber);
console.log(block); // This will print the block data
```
This method will return the block with x number.

## Development
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/GabrielLeonte/Glaciary.JS/pulls)

Want to contribute? Great! Start by telling us your wishes!


## License

The chain is licensed as [MIT](https://github.com/GabrielLeonte/The-Chain/blob/master/LICENSE)

**Free Blockchain Software, DAM Yeah!**