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()
|
||||
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()
|
||||
localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64())
|
||||
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()
|
||||
|
||||
// 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 bc.cacheConfig.Disabled {
|
||||
|
@ -1269,17 +1275,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks) (int, []interface{}, []*ty
|
|||
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)
|
||||
// /Quorum
|
||||
|
||||
proctime := time.Since(bstart)
|
||||
|
||||
// Write the block to the chain and get the status.
|
||||
|
|
|
@ -592,20 +592,11 @@ func (w *worker) resultLoop() {
|
|||
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)
|
||||
|
||||
// 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 {
|
||||
log.Error("Failed writing block to chain", "err", err)
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue