-
Notifications
You must be signed in to change notification settings - Fork 3
/
Basics.js
52 lines (43 loc) · 1.36 KB
/
Basics.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const SHA256= require('crypto-js/SHA256');
class Block{
constructor(index,timestamp, data, previousHash=''){
this.index=index;
this.timestamp=timestamp;
this.data=data;
this.previousHash=previousHash;
this.hash=this.calculateHash();
this.nonce=0;
}
calculateHash(){
return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)+this.nonce).toString();
}
mineblock(difficulty){
while(this.hash.substring(0,difficulty) !== Array(difficulty + 1).join("0")){
this.nonce++;
this.hash=this.calculateHash();
}
console.log("Block mined"+ this.hash);
}
}
class BlockChain{
constructor(){
this.chain=[this.createGenesisBlock( )];
this.difficulty=2;
}
createGenesisBlock(){
return new Block(0,"02/06/2019","Genesis Block","0");
}
getlatestBlock(){
return this.chain[this.chain.length-1];
}
addBlock(newBlock){
newBlock.previousHash = this.getlatestBlock().hash;
newBlock.mineblock(this.difficulty);
this.chain.push(newBlock);
}
}
let dc = new BlockChain();
console.log('Mining Block 1....')
dc.addBlock(new Block(1,"07/06/2019",{amount: 4}));
console.log('Mining Block 2....')
dc.addBlock(new Block(2,"12/06/2018",{amount: 10}));