SenShaMart/blockchain/index.js
2022-11-22 13:30:19 +11:00

45 lines
No EOL
1 KiB
JavaScript

const Block = require('./block');
class Blockchain {
constructor() {
this.chain = [Block.genesis()];
}
addBlock(data) {
const block = Block.mineBlock(this.chain[this.chain.length-1], data);
this.chain.push(block);
return block;
}
isValidChain(chain) {
if(JSON.stringify(chain[0]) !== JSON.stringify(Block.genesis())) return false;
for (let i=1; i<chain.length; i++) {
const block = chain[i];
const lastBlock = chain[i-1];
if (block.lastHash !== lastBlock.hash ||
block.hash !== Block.blockHash(block)) {
return false;
}
}
return true;
}
replaceChain(newChain) {
if (newChain.length <= this.chain.length) {
console.log('Received chain is not longer than the current chain.');
return;
} else if (!this.isValidChain(newChain)) {
console.log('The received chain is not valid.');
return;
}
console.log('Replacing blockchain with the new chain.');
this.chain = newChain;
}
}
module.exports = Blockchain;