diff options
author | bojie <bojie@dexon.org> | 2018-12-05 16:24:35 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 13:49:59 +0800 |
commit | 823b938b663b7165080f37fecaa0bbc4b99b3ffc (patch) | |
tree | 8779d340bdbe896819d6cce6bde1995909195ad0 | |
parent | e9215a6b296c009f150f29b8881282c5c82b4fca (diff) | |
download | dexon-823b938b663b7165080f37fecaa0bbc4b99b3ffc.tar.gz dexon-823b938b663b7165080f37fecaa0bbc4b99b3ffc.tar.zst dexon-823b938b663b7165080f37fecaa0bbc4b99b3ffc.zip |
app: return retry later instead of retry with sleep time (#78)
-rw-r--r-- | dex/app.go | 53 |
1 files 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) |