diff --git a/blockchain/chain.py b/blockchain/chain.py index 82a3b9b..d9f21b2 100644 --- a/blockchain/chain.py +++ b/blockchain/chain.py @@ -179,3 +179,15 @@ class Blockchain: self.writeBlocks() return True + def isChainValid(self): + """ + Method to verify integrity of blockchain + """ + for i in range(1, len(self.chain)): + eachBlock = self.chain[i] + if eachBlock.hash != eachBlock.calculateHash(): + return i + if eachBlock.previousHash != self.chain[i-1].hash: + return i + return 0 + diff --git a/bscli.py b/bscli.py index 540aa8e..f4c6b5d 100644 --- a/bscli.py +++ b/bscli.py @@ -27,6 +27,7 @@ SUPPORTED_COMMANDS = [ 'getblock', 'help', 'modify', + 'verify', ] def printLogo(): @@ -161,6 +162,16 @@ def modify(args): else: throwError("Block modification failed!") +def verify(cmd): + """ + Method to verify the validity of blockchain. + """ + chain_valid = coin.isChainValid() + if chain_valid == 0: + printSuccess("Blockchain is valid!") + else: + throwError(f"Blockchain is not valid! Error on block {chain_valid}. Altered Chain!") + def throwError(msg): """ Method to throw an error from Blockshell.