|
|
|
@ -271,7 +271,7 @@ func (node *Node) BroadcastNewBlock(newBlock *blockchain.Block) { |
|
|
|
|
|
|
|
|
|
// This is called by consensus participants to verify the block they are running consensus on
|
|
|
|
|
func (node *Node) VerifyNewBlock(newBlock *blockchain.Block) bool { |
|
|
|
|
if bytes.Equal(newBlock.PrevBlockHash[:], (&[32]byte{})[:]) { |
|
|
|
|
if newBlock.IsStateBlock() { |
|
|
|
|
return node.UtxoPool.VerifyStateBlock(newBlock) |
|
|
|
|
} else { |
|
|
|
|
return node.UtxoPool.VerifyTransactions(newBlock.Transactions) |
|
|
|
@ -282,7 +282,19 @@ func (node *Node) VerifyNewBlock(newBlock *blockchain.Block) bool { |
|
|
|
|
// 1. add the new block to blockchain
|
|
|
|
|
// 2. [leader] move cross shard tx and proof to the list where they wait to be sent to the client
|
|
|
|
|
func (node *Node) PostConsensusProcessing(newBlock *blockchain.Block) { |
|
|
|
|
if newBlock.IsStateBlock() { |
|
|
|
|
// Clear out old tx blocks and put state block as genesis
|
|
|
|
|
if node.db != nil { |
|
|
|
|
node.log.Info("Deleting old blocks.") |
|
|
|
|
for i := 1; i <= len(node.blockchain.Blocks); i++ { |
|
|
|
|
blockchain.Delete(node.db, strconv.Itoa(i)) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
node.blockchain.Blocks = []*blockchain.Block{} |
|
|
|
|
node.AddNewBlock(newBlock) |
|
|
|
|
} else { |
|
|
|
|
node.AddNewBlock(newBlock) |
|
|
|
|
node.UpdateUtxoAndState(newBlock) |
|
|
|
|
|
|
|
|
|
if node.Consensus.IsLeader { |
|
|
|
|
// Move crossTx-in-consensus into the list to be returned to client
|
|
|
|
@ -300,6 +312,8 @@ func (node *Node) PostConsensusProcessing(newBlock *blockchain.Block) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (node *Node) AddNewBlock(newBlock *blockchain.Block) { |
|
|
|
|
// Add it to blockchain
|
|
|
|
|
node.blockchain.Blocks = append(node.blockchain.Blocks, newBlock) |
|
|
|
@ -308,6 +322,9 @@ func (node *Node) AddNewBlock(newBlock *blockchain.Block) { |
|
|
|
|
node.log.Info("Writing new block into disk.") |
|
|
|
|
newBlock.Write(node.db, strconv.Itoa(len(node.blockchain.Blocks))) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (node *Node) UpdateUtxoAndState(newBlock *blockchain.Block) { |
|
|
|
|
// Update UTXO pool
|
|
|
|
|
node.UtxoPool.Update(newBlock.Transactions) |
|
|
|
|
// Clear transaction-in-Consensus list
|
|
|
|
|