作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过使用 JavaScript 构建一个小项目来了解更多关于区 block 链的信息。谁能向我解释为什么当我对测试区 block 链进行 console.log 时 previousHash 不显示?
(npm install --save crypto-js 如果你需要 SHA256)
const SHA256 = require('crypto-js/sha256');
class Block{
//Index: (Optional) tells us where the block is in the chain
//Timestamp: tells us when the block was created
//Data: Can include any kind of data; for a currency you could store details of the transaction(transfer amount, sender id, receiver id)
//previousHash: String which contains the hash of the block which came before it (Ensures data integrity)
constructor(index, timestamp, data, previousHash = ''){
this.index = index;
this.timestamp = timestamp;
this.data = data;
this.previousHash = previousHash;
//Hash of this block
this.hash = this.calculateHash();
}
//Runs values from block through a hashing function to create a hash
calculateHash(){
return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();
}
}
//8.44
class Blockchain{
//Initializes blockchain
constructor(){
this.chain = [this.createGenesisBlock];
}
// first block needs to be created manually
//index, timeStamp, data, previousHash(there is none in this case)
createGenesisBlock(){
return new Block(0, "01/01/2017", "Genesis block", "0");
}
//Returns most recently added block
getLatestBlock(){
return this.chain[this.chain.length -1];
}
//adds a new block to the chain
addBlock(newBlock){
newBlock.previousHash = this.getLatestBlock().hash;
newBlock.hash = newBlock.calculateHash
//The chain is just an array so you can use regular array methods
this.chain.push(newBlock);
}
}
//create instance of blockchhain
let Coin = new Blockchain();
Coin.addBlock(new Block(1, "10/07/2017", {amount: 4}));
Coin.addBlock(new Block(2, "12/07/2017", {amount: 10}));
console.log(JSON.stringify(Coin, null, 4));
我希望 console.logged JSON 文件包含 previousHash 以及索引、时间戳和数据。它包含除 previousHash 之外的所有内容。
感谢您的帮助,我绞尽脑汁想弄清楚这个问题......
最佳答案
您忘记了行中的括号:this.chain = [this.createGenesisBlock()];
行,因此链的第一个元素将是对函数的引用,而不是Block
的实例。添加括号,它应该可以工作。
此外,您还忘记了另一个函数调用中的括号:当您尝试调用函数 newBlock.hash = newBlock.calculateHash()
关于javascript - 为什么当我 console.log 我的测试区 block 链时 previousHash 没有显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118212/
我正在尝试通过使用 JavaScript 构建一个小项目来了解更多关于区 block 链的信息。谁能向我解释为什么当我对测试区 block 链进行 console.log 时 previousHash
我是一名优秀的程序员,十分优秀!