knitchain
v1.0.9
Published
Lightweight block-chain, without smart-contract
Downloads
16
Maintainers
Readme
🧶 knit-chain
lightweight block-chain, without smart-contract
knit-chain: lightweight block-chain
most current block-chain implementations use:
- blocks, containing
- a cryptographic hash of the previous block
- timestamp
- data
- hashed and stored in Merkle trees
- proof of work, via cryptographic salting
- peer-to-peer
- distribution
- evaluation (smart-contracts)
knit-chain uses:
- blocks, containing
- a cryptographic hash of the previous block
- timestamp
- data
- ~~hashed and stored in Merkle trees~~
- proof of work, via cryptographic salting
- ~~peer-to-peer~~
- ~~distribution~~
- ~~evaluation (smart-contracts)~~
Because of the complexity of most block-chain implementations, they are often discarded as a realistic option for smaller-scale solutions. Knit-chain was created to fill that need -- to provide a go-to option for exploring light-weight use cases for block-chain.
testing
All tests passing. 96.72% of statements covered.
install
npm install:
In project directory (with existing package.json):
$ npm i knitchain
javascript
require
const KC = require('knitchain');
// returns knitchain constructor
constructor & methods:
const myKC = new KC(/* [difficulty (default 4)], [docsLimit (default 2)] */);
// returns new knitchain object:
// {
// chain: [],
// latest: null,
// difficulty: 4
// docsLimit: 2
// }
myKC.insertData('data 1');
// if this is the first block or the current block is full,
// 1. creates block
// 2. creates doc from data
// 3. pushes doc to block.docs array
// 4. pushes block to chain array
// 5. mines latest block
// 6. returns latest block:
// {
// createdAt: 1521485744340,
// docs: [
// { value: 'data 1', createdAt: 1521485744340 }
// ],
// docsLimit: 2,
// previousHash: '',
// index: 0,
// closed: false,
// hash: '<hashed block>',
// nonce: <nonce value>
// }
myKC.insertData('data 2');
// if this is not the first block and the current block is not full,
// 1. creates doc from data
// 2. pushes doc to block.docs array
// 3. mines latest block (again)
// 4. returns latest block:
// {
// createdAt: 1521485744340,
// docs: [
// { value: 'data 1', createdAt: 1521485744340 },
// { value: 'data 2', createdAt: 1521486162374 }
// ],
// docsLimit: 2,
// previousHash: '',
// index: 0,
// closed: true,
// hash: '<re-hashed block>',
// nonce: <new nonce value>
// }
myKC.getLatest();
// returns latest block:
// {
// createdAt: 1521485744340,
// docs: [
// { value: 'data 1', createdAt: 1521485744340 },
// { value: 'data 2', createdAt: 1521486162374 }
// ],
// docsLimit: 2,
// previousHash: '',
// index: 0,
// closed: true,
// hash: '<re-hashed block>',
// nonce: <new nonce value>
// }
myKC.isValid();
// checks the hash of each block in the chain
// if hashes are correct, returns true
// if hashes are incorrect, returns false
updates:
1.0.7-8
- added keywords to package.json
1.0.6
- set difficulty and docsLimits as knitchain constructor optional parameters