core: force block process & fixed chain manager test
This commit is contained in:
parent
97a9753f87
commit
72d065d491
@ -149,6 +149,20 @@ func (self *BlockProcessor) ApplyTransactions(coinbase *state.StateObject, state
|
|||||||
return receipts, err
|
return receipts, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sm *BlockProcessor) RetryProcess(block *types.Block) (logs state.Logs, err error) {
|
||||||
|
// Processing a blocks may never happen simultaneously
|
||||||
|
sm.mutex.Lock()
|
||||||
|
defer sm.mutex.Unlock()
|
||||||
|
|
||||||
|
header := block.Header()
|
||||||
|
if !sm.bc.HasBlock(header.ParentHash) {
|
||||||
|
return nil, ParentError(header.ParentHash)
|
||||||
|
}
|
||||||
|
parent := sm.bc.GetBlock(header.ParentHash)
|
||||||
|
|
||||||
|
return sm.processWithParent(block, parent)
|
||||||
|
}
|
||||||
|
|
||||||
// Process block will attempt to process the given block's transactions and applies them
|
// Process block will attempt to process the given block's transactions and applies them
|
||||||
// on top of the block's parent state (given it exists) and will return wether it was
|
// on top of the block's parent state (given it exists) and will return wether it was
|
||||||
// successful or not.
|
// successful or not.
|
||||||
|
@ -322,7 +322,12 @@ func (self *ChainManager) Export(w io.Writer) error {
|
|||||||
last := self.currentBlock.NumberU64()
|
last := self.currentBlock.NumberU64()
|
||||||
|
|
||||||
for nr := uint64(0); nr <= last; nr++ {
|
for nr := uint64(0); nr <= last; nr++ {
|
||||||
if err := self.GetBlockByNumber(nr).EncodeRLP(w); err != nil {
|
block := self.GetBlockByNumber(nr)
|
||||||
|
if block == nil {
|
||||||
|
return fmt.Errorf("export failed on #%d: not found", nr)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := block.EncodeRLP(w); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,15 +69,16 @@ func printChain(bc *ChainManager) {
|
|||||||
func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) {
|
func testChain(chainB types.Blocks, bman *BlockProcessor) (*big.Int, error) {
|
||||||
td := new(big.Int)
|
td := new(big.Int)
|
||||||
for _, block := range chainB {
|
for _, block := range chainB {
|
||||||
td2, _, err := bman.bc.processor.Process(block)
|
_, err := bman.bc.processor.Process(block)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if IsKnownBlockErr(err) {
|
if IsKnownBlockErr(err) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
block.Td = td2
|
parent := bman.bc.GetBlock(block.ParentHash())
|
||||||
td = td2
|
block.Td = CalculateTD(block, parent)
|
||||||
|
td = block.Td
|
||||||
|
|
||||||
bman.bc.mu.Lock()
|
bman.bc.mu.Lock()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user