mirror of https://github.com/poanetwork/quorum.git
IBFT private state commit issue in a single validator node network (#938)
This commit is contained in:
parent
29d53fb649
commit
8c50cb09e7
|
@ -936,6 +936,23 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types.
|
||||||
bc.mu.Lock()
|
bc.mu.Lock()
|
||||||
defer bc.mu.Unlock()
|
defer bc.mu.Unlock()
|
||||||
|
|
||||||
|
// Quorum
|
||||||
|
// Write private state changes to database
|
||||||
|
privateRoot, err := privateState.Commit(bc.chainConfig.IsEIP158(block.Number()))
|
||||||
|
if err != nil {
|
||||||
|
return NonStatTy, err
|
||||||
|
}
|
||||||
|
if err := WritePrivateStateRoot(bc.db, block.Root(), privateRoot); err != nil {
|
||||||
|
log.Error("Failed writing private state root", "err", err)
|
||||||
|
return NonStatTy, err
|
||||||
|
}
|
||||||
|
// Explicit commit for privateStateTriedb
|
||||||
|
privateTriedb := bc.privateStateCache.TrieDB()
|
||||||
|
if err := privateTriedb.Commit(privateRoot, false); err != nil {
|
||||||
|
return NonStatTy, err
|
||||||
|
}
|
||||||
|
// /Quorum
|
||||||
|
|
||||||
currentBlock := bc.CurrentBlock()
|
currentBlock := bc.CurrentBlock()
|
||||||
localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
|
localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
|
||||||
externTd := new(big.Int).Add(block.Difficulty(), ptd)
|
externTd := new(big.Int).Add(block.Difficulty(), ptd)
|
||||||
|
@ -953,17 +970,6 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types.
|
||||||
}
|
}
|
||||||
triedb := bc.stateCache.TrieDB()
|
triedb := bc.stateCache.TrieDB()
|
||||||
|
|
||||||
// Explicit commit for privateStateTriedb to handle Raft db issues
|
|
||||||
if privateState != nil {
|
|
||||||
privateRoot, err := privateState.Commit(bc.chainConfig.IsEIP158(block.Number()))
|
|
||||||
if err != nil {
|
|
||||||
return NonStatTy, err
|
|
||||||
}
|
|
||||||
privateTriedb := bc.privateStateCache.TrieDB()
|
|
||||||
if err := privateTriedb.Commit(privateRoot, false); err != nil {
|
|
||||||
return NonStatTy, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we're running an archive node, always flush
|
// If we're running an archive node, always flush
|
||||||
if bc.cacheConfig.Disabled {
|
if bc.cacheConfig.Disabled {
|
||||||
|
@ -1269,17 +1275,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks) (int, []interface{}, []*ty
|
||||||
return i, events, coalescedLogs, err
|
return i, events, coalescedLogs, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Quorum
|
|
||||||
// Write private state changes to database
|
|
||||||
if privateStateRoot, err = privateState.Commit(bc.Config().IsEIP158(block.Number())); err != nil {
|
|
||||||
return i, events, coalescedLogs, err
|
|
||||||
}
|
|
||||||
if err := WritePrivateStateRoot(bc.db, block.Root(), privateStateRoot); err != nil {
|
|
||||||
return i, events, coalescedLogs, err
|
|
||||||
}
|
|
||||||
allReceipts := mergeReceipts(receipts, privateReceipts)
|
allReceipts := mergeReceipts(receipts, privateReceipts)
|
||||||
// /Quorum
|
|
||||||
|
|
||||||
proctime := time.Since(bstart)
|
proctime := time.Since(bstart)
|
||||||
|
|
||||||
// Write the block to the chain and get the status.
|
// Write the block to the chain and get the status.
|
||||||
|
|
|
@ -592,20 +592,11 @@ func (w *worker) resultLoop() {
|
||||||
logs = append(logs, receipt.Logs...)
|
logs = append(logs, receipt.Logs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// write private transactions
|
|
||||||
privateStateRoot, err := task.privateState.Commit(w.config.IsEIP158(block.Number()))
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Failed committing private state root", "err", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if err := core.WritePrivateStateRoot(w.eth.ChainDb(), block.Root(), privateStateRoot); err != nil {
|
|
||||||
log.Error("Failed writing private state root", "err", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
allReceipts := mergeReceipts(task.receipts, task.privateReceipts)
|
allReceipts := mergeReceipts(task.receipts, task.privateReceipts)
|
||||||
|
|
||||||
// Commit block and state to database.
|
// Commit block and state to database.
|
||||||
stat, err := w.chain.WriteBlockWithState(block, allReceipts, task.state, nil)
|
stat, err := w.chain.WriteBlockWithState(block, allReceipts, task.state, task.privateState)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Failed writing block to chain", "err", err)
|
log.Error("Failed writing block to chain", "err", err)
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in New Issue