Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

calculate Hash fonction

Olá tudo bem ? eu estou aprendendo a programar uma blockchain (bem simples) mas eu estou tendo um problema no meu codigo e não consigo achar o erro, se alguem puder me ajudar eu agradeço !

1) o problema esta na hora de criar um novo hash, ao tentar passar um novo hash para um novo bloco ele esta passando o mesmo hash (anterior) e sinceramente não vejo o erro

segue o codigo:

const SHA256 = require('crypto-js/sha256');
class Block {
    constructor(index, timestamp, previousHash, data){
        this.index = index;
        this.timestamp = timestamp;
        this.previousHash = previousHash;
        this.data = data;
        this.hash = this.calculateHash();

    }
    calculateHash(){
         return SHA256(this.index, this.timestamp, this.previousHash, JSON.stringify(this.data)).toString();
    }
}   

class Blockchain{
    constructor(){
        this.chain = [this.createGenesisBlock()];
    }
    createGenesisBlock(){
        return new Block(0, '17/02/1999',0,'Genesis block');
    }
    getLatestBlock(){
        return this.chain[this.chain.length -1];
    }
    addBlock(newBlock){
        newBlock.previousHash = this.getLatestBlock().hash;
        newBlock.hash = newBlock.calculateHash(); /*<--deveria passar novo hash */
        this.chain.push(newBlock); 
    }
}
var test = new Blockchain()
test.addBlock(new Block(2,'18/02/2002',{amount :55}));
test.addBlock(new Block(3,'19/02/2002',{amount :2789}));
console.log(JSON.stringify(test, null, 4));

Na hora de rodar no console o bloco 3 sai com o mesmo hash do 2 :


C:\Users\Felipe\Desktop\blockchain\aitak_chain>node main
{
    "chain": [
        {
            "index": 0,
            "timestamp": "17/02/1999",
            "previousHash": 0,
            "data": "Genesis block",
            "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
        },
        {
            "index": 2,
            "timestamp": "18/02/2002",
            "previousHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
            "hash": "4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e"
        },
        {
            "index": 3,
            "timestamp": "19/02/2002",
            "previousHash": "4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e",
            "hash": "4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e"
        }
    ]
}

C:\Users\Felipe\Desktop\blockchain\aitak_chain>

Se alguem puder ajudar eu agradeço ! obrigado !

1 resposta
solução!

Opa, já descobri eu estava passando os parametros da função calculateHash com virgula, então daria sempre o mesmo, o certo é somando !

Abraço !