Add merkle proof of last block hash to BlockHeader, add merkle proof of tx hash to Transaction

This commit is contained in:
ChronosX88 2021-05-26 23:57:54 +03:00
parent dde32e11dc
commit fb84ab8ad6
Signed by: ChronosXYZ
GPG Key ID: 085A69A82C8C511A
2 changed files with 25 additions and 15 deletions

View File

@ -20,6 +20,7 @@ type BlockHeader struct {
Height uint64 Height uint64
Hash []byte Hash []byte
LastHash []byte LastHash []byte
LastHashProof *merkletree.Proof
Proposer peer.ID Proposer peer.ID
Signature []byte Signature []byte
} }
@ -63,6 +64,11 @@ func CreateBlock(lastBlockHeader *BlockHeader, txs []*Transaction, wallet *walle
return nil, err return nil, err
} }
lastHashProof, err := tree.GenerateProof(lastBlockHeader.Hash, 0)
if err != nil {
return nil, err
}
block := &Block{ block := &Block{
Header: &BlockHeader{ Header: &BlockHeader{
Timestamp: timestamp, Timestamp: timestamp,
@ -71,6 +77,7 @@ func CreateBlock(lastBlockHeader *BlockHeader, txs []*Transaction, wallet *walle
Signature: s.Data, Signature: s.Data,
Hash: blockHash, Hash: blockHash,
LastHash: lastBlockHeader.Hash, LastHash: lastBlockHeader.Hash,
LastHashProof: lastHashProof,
}, },
Data: txs, Data: txs,
} }

View File

@ -5,11 +5,14 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/wealdtech/go-merkletree"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
) )
type Transaction struct { type Transaction struct {
Hash []byte Hash []byte
MerkleProof *merkletree.Proof // sets when transaction is added to block
Timestamp time.Time Timestamp time.Time
Data []byte Data []byte
} }