建议和反馈

请填写你的反馈内容

问答 > 共识算法 > 问答详情
已解决

推送新区块时无法获得区块的先前哈希值10LK

我创建了一个区块链实现,效果很好。然后我想编写一个在删除消息时创建新链的程序。

而不是获得一个新链,其中第二个块具有来自前一个链的最新块的数据,它丢弃了一个错误,我真的不明白这意味着什么。为什么是“ 1”?它甚至不是哈希,而是新链中块的索引。这是错误:

Uncaught TypeError: Cannot create property 'prevHash' on number '1'     at Chain.addBlock (chain.js:24)     at newChain (test.js:26)     at HTMLButtonElement.onclick (index.html:1)

有人可以解释为什么吗?我还附加了一个代码片段,以显示所有功能


// Chain.js class Block {   constructor(id, data, prevHash = ''){     this.id = id;     this.prevHash = this.prevHash;     this.hash = this.calcHash();     this.data = data;   }   calcHash() {     return CryptoJS.SHA512(this.id + JSON.stringify(this.data)).toString();   }  } class Chain {   constructor(){     this.chain = [this.genesisBlock()];   }   genesisBlock(){     return new Block(0,'Chain started.');   }   getLastBlock(){     return this.chain[this.chain.length - 1];   }   addBlock(block){     block.prevHash = this.getLastBlock().hash;     block.hash = block.calcHash();     this.chain.push(block)   }   isValid(){     for(let i = 1; i < this.chain.length; i++){       let prev = this.chain[i-1], current = this.chain[i];       if(current.hash !== prev.prevHash || current.hash !== current.calcHash())        return false;     }return true;   }  }  // Msg.js class Msg {   constructor(msg, date){     this.msg = msg;     const D = new Date();     this.date = [D.getHours(), D.getMinutes(), D.getSeconds()].join(' : ');   } }  // Test.js FROZENCHAINS = []; CHAIN = new Chain(); i = 0;  msg = () => {   let text = $('input').val();   i++;  CHAIN.addBlock(new Block(i, text));   let msg = JSON.stringify(CHAIN.chain,null, 4);   $('#log').text(msg);  let thisMSG = new Msg(text);   $('section').append('' + thisMSG.msg + ''  + 'Created at: ' + thisMSG.date + '
')   }  newChain = () => {   FROZENCHAINS.push(CHAIN);   delete CHAIN;   CHAIN = new Chain();   CHAIN.addBlock(1,'Hi') }
.input {         margin: 10px 0;       }       .tag {         font-size: 23px !important;         background-color: whitesmoke !important;         margin: 5px;       }
                             Blockchain Chat                                 Blockchain Chat Part 1

                          
                                         Send Message            
    


2020-11-07
0
请先登陆或注册

BTC2020-11-09

addBlock函数需要一个Block,但是在newChain()中提供1。将行更改为

CHAIN.addBlock(new Block(1,'Hi'));


投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 8
  • 6
  • 6
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励