From 17baa4a7dc4e8d52bbaf276f2ffa74aa9b77a9b8 Mon Sep 17 00:00:00 2001 From: bojie Date: Wed, 5 Dec 2018 16:24:35 +0800 Subject: app: return retry later instead of retry with sleep time (#78) --- dex/app.go | 53 ++++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/dex/app.go b/dex/app.go index 92e1a6aaa..5ce34668c 100644 --- a/dex/app.go +++ b/dex/app.go @@ -36,10 +36,6 @@ import ( "github.com/dexon-foundation/dexon/rlp" ) -const ( - verifyBlockMaxRetries = 4 -) - // DexconApp implements the DEXON consensus core application interface. type DexconApp struct { txPool *core.TxPool @@ -312,40 +308,35 @@ func (d *DexconApp) VerifyBlock(block *coreTypes.Block) coreTypes.BlockVerifySta return coreTypes.VerifyInvalidBlock } - // Wait until the witnessed root is seen on our local chain. - for i := 0; i < verifyBlockMaxRetries; i++ { - if d.blockchain.GetPendingHeight() < block.Witness.Height { - log.Debug("Pending height < witness height") - time.Sleep(500 * time.Millisecond) - continue - } + // Validate witness height. + if d.blockchain.GetPendingHeight() < block.Witness.Height { + log.Debug("Pending height < witness height") + return coreTypes.VerifyRetryLater + } - b := d.blockchain.GetPendingBlockByNumber(block.Witness.Height) + b := d.blockchain.GetPendingBlockByNumber(block.Witness.Height) + if b == nil { + b = d.blockchain.GetBlockByNumber(block.Witness.Height) if b == nil { - b = d.blockchain.GetBlockByNumber(block.Witness.Height) - if b == nil { - log.Error("Can not get block by height %v", block.Witness.Height) - return coreTypes.VerifyInvalidBlock - } - } - - if b.Root() != witnessData.Root { - log.Error("Witness root not correct expect %v but %v", b.Root(), witnessData.Root) + log.Error("Can not get block by height %v", block.Witness.Height) return coreTypes.VerifyInvalidBlock } + } - if b.ReceiptHash() != witnessData.ReceiptHash { - log.Error("Witness receipt hash not correct expect %v but %v", b.ReceiptHash(), witnessData.ReceiptHash) - return coreTypes.VerifyInvalidBlock - } + if b.Root() != witnessData.Root { + log.Error("Witness root not correct expect %v but %v", b.Root(), witnessData.Root) + return coreTypes.VerifyInvalidBlock + } - _, err = d.blockchain.StateAt(witnessData.Root) - if err != nil { - log.Error("Get state by root %v error: %v", witnessData.Root, err) - return coreTypes.VerifyInvalidBlock - } + if b.ReceiptHash() != witnessData.ReceiptHash { + log.Error("Witness receipt hash not correct expect %v but %v", b.ReceiptHash(), witnessData.ReceiptHash) + return coreTypes.VerifyInvalidBlock + } - break + _, err = d.blockchain.StateAt(witnessData.Root) + if err != nil { + log.Error("Get state by root %v error: %v", witnessData.Root, err) + return coreTypes.VerifyInvalidBlock } d.chainRLock(block.Position.ChainID) -- cgit