建议和反馈

请填写你的反馈内容

问答 > Go/Python > 问答详情
已解决

为什么在我的console.log我的测试区块链时,previousHash没有显示?10LK

我正在尝试通过使用JavaScript构建一个小项目来了解更多关于区块链的知识。任何人都可以向我解释为什么我在console.log测试区块链时没有显示previousHash?

(npm install - 如果你需要SHA256,请保存crypto-js)

        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之外的所有内容。

谢谢你的帮助一直在试图弄明白这一点......


2019-05-27
0
请先登陆或注册

少年锦衣2019-05-27

你忘记了行中的paranthesis:this.chain = [this.createGenesisBlock()];line,因此链的第一个元素将是对函数的引用,而不是a的实例Block添加paranthesis,它应该工作。

此外,您还忘记了另一个函数调用的paranthesis:当您尝试调用该函数时 newBlock.hash = newBlock.calculateHash()


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

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