Implement block height
This commit is contained in:
parent
130cf66a90
commit
2734285450
7
block.go
7
block.go
|
@ -14,11 +14,12 @@ type Block struct {
|
||||||
PrevBlockHash []byte
|
PrevBlockHash []byte
|
||||||
Hash []byte
|
Hash []byte
|
||||||
Nonce int
|
Nonce int
|
||||||
|
Height int
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBlock creates and returns Block
|
// NewBlock creates and returns Block
|
||||||
func NewBlock(transactions []*Transaction, prevBlockHash []byte) *Block {
|
func NewBlock(transactions []*Transaction, prevBlockHash []byte, height int) *Block {
|
||||||
block := &Block{time.Now().Unix(), transactions, prevBlockHash, []byte{}, 0}
|
block := &Block{time.Now().Unix(), transactions, prevBlockHash, []byte{}, 0, height}
|
||||||
pow := NewProofOfWork(block)
|
pow := NewProofOfWork(block)
|
||||||
nonce, hash := pow.Run()
|
nonce, hash := pow.Run()
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ func NewBlock(transactions []*Transaction, prevBlockHash []byte) *Block {
|
||||||
|
|
||||||
// NewGenesisBlock creates and returns genesis Block
|
// NewGenesisBlock creates and returns genesis Block
|
||||||
func NewGenesisBlock(coinbase *Transaction) *Block {
|
func NewGenesisBlock(coinbase *Transaction) *Block {
|
||||||
return NewBlock([]*Transaction{coinbase}, []byte{})
|
return NewBlock([]*Transaction{coinbase}, []byte{}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// HashTransactions returns a hash of the transactions in the block
|
// HashTransactions returns a hash of the transactions in the block
|
||||||
|
|
|
@ -172,6 +172,7 @@ func (bc *Blockchain) Iterator() *BlockchainIterator {
|
||||||
// MineBlock mines a new block with the provided transactions
|
// MineBlock mines a new block with the provided transactions
|
||||||
func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block {
|
func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block {
|
||||||
var lastHash []byte
|
var lastHash []byte
|
||||||
|
var lastHeight int
|
||||||
|
|
||||||
for _, tx := range transactions {
|
for _, tx := range transactions {
|
||||||
if bc.VerifyTransaction(tx) != true {
|
if bc.VerifyTransaction(tx) != true {
|
||||||
|
@ -183,13 +184,18 @@ func (bc *Blockchain) MineBlock(transactions []*Transaction) *Block {
|
||||||
b := tx.Bucket([]byte(blocksBucket))
|
b := tx.Bucket([]byte(blocksBucket))
|
||||||
lastHash = b.Get([]byte("l"))
|
lastHash = b.Get([]byte("l"))
|
||||||
|
|
||||||
|
blockData := b.Get(lastHash)
|
||||||
|
block := DeserializeBlock(blockData)
|
||||||
|
|
||||||
|
lastHeight = block.Height
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
newBlock := NewBlock(transactions, lastHash)
|
newBlock := NewBlock(transactions, lastHash, lastHeight+1)
|
||||||
|
|
||||||
err = bc.db.Update(func(tx *bolt.Tx) error {
|
err = bc.db.Update(func(tx *bolt.Tx) error {
|
||||||
b := tx.Bucket([]byte(blocksBucket))
|
b := tx.Bucket([]byte(blocksBucket))
|
||||||
|
|
Loading…
Reference in New Issue