+
80
-

javascript如何实现blockchain区块链数据结构?

javascript如何实现blockchain区块链数据结构?


网友回复

+
0
-

用js写的一个简单区块链代码,实现了数据上链,数据检验,是否被篡改等功能,代码如下:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <title>BFW DEMO JS PAGE</title>
    <script id="bfwone" data="dep=jquery.17|crypto-js-3.1.9-1/crypto-js" src="//repo.bfw.wiki/bfwrepo/js/bfwone.js"></script>
    <script>
        class Block {

      constructor(index, timestamp, data, previousHash = '') {

          this.index = index;

          this.previousHash = previousHash;

          this.timestamp = timestamp;

          this.data = data;

          this.hash = this.calculateHash();

      }

      calculateHash() {

          return CryptoJS.SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();

      }

  }
  class Blockchain {

      constructor() {

          this.chain = [this.createGenesisBlock()];

      }

      createGenesisBlock() {

          return new Block(0, "011/01/2019", "bfw init block", "0");

      }

      getLatestBlock() {

          return this.chain[this.chain.length - 1];

      }

      addBlock(newBlock) {


          newBlock.previousHash = this.getLatestBlock().hash;

          newBlock.hash = newBlock.calculateHash();

          this.chain.push(newBlock);

      }

      isChainValid() {

          for (let i = 1; i < this.chain.length; i++) {

              const currentBlock = this.chain[i];

              const previousBlock = this.chain[i - 1];

              if (currentBlock.hash !== currentBlock.calculateHash()) {

                  return false;

              }

              if (currentBlock.previousHash !== previousBlock.hash) {

                  return false;

              }

          }

          return true;

      }

  }
  bready(function() {
      let bfwcoin = new Blockchain();


      bfwcoin.addBlock(new Block(1, "1/12/2019", {
          amount: 4
      }));

      bfwcoin.addBlock(new Block(2, "2/12/2019", {
          amount: 8
      }));

        console.log(bfwcoin);
      // 检查是否有效(将会返回true)
      console.log('区块链是否有效? ' + bfwcoin.isChainValid());
      // 现在尝试操作变更数据
      bfwcoin.chain[1].data = {
          amount: 100
      };
      console.log(bfwcoin);
      // 再次检查是否有效 (将会返回false)
      console.log("区块链是否有效? " + bfwcoin.isChainValid());

  });
    </script>


</head>

<body>

</body>

</html>

我知道答案,我要回答