diff options
author | Bojie Wu <bojie@dexon.org> | 2018-10-09 13:28:45 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@byzantine-lab.io> | 2019-06-12 17:27:17 +0800 |
commit | f80216879307f6fa21b5937e3644e417226d9467 (patch) | |
tree | 0b3bcc141a50d0c844f22405561b39997926dbbc | |
parent | d87c861be3790e9b71e1511502832da3e01cfacd (diff) | |
download | go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar.gz go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar.bz2 go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar.lz go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar.xz go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.tar.zst go-tangerine-f80216879307f6fa21b5937e3644e417226d9467.zip |
app: fix bug when prepare transaction
-rw-r--r-- | dex/app.go | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/dex/app.go b/dex/app.go index 577135dc0..d5b7d3556 100644 --- a/dex/app.go +++ b/dex/app.go @@ -160,6 +160,8 @@ func (d *DexconApp) PreparePayload(position coreTypes.Position) (payload []byte, blockGasLimit := new(big.Int).SetUint64(core.CalcGasLimit(d.blockchain.CurrentBlock(), d.config.GasFloor, d.config.GasCeil)) blockGasUsed := new(big.Int) var allTxs types.Transactions + +addressMap: for address, txs := range txsMap { // every address's transactions will appear in fixed chain if !d.checkChain(address, chainNums, chainID) { @@ -217,8 +219,7 @@ func (d *DexconApp) PreparePayload(position coreTypes.Position) (payload []byte, blockGasUsed = new(big.Int).Add(blockGasUsed, new(big.Int).SetUint64(tx.Gas())) if blockGasLimit.Cmp(blockGasUsed) < 0 { - log.Error("Reach block gas limit", "limit", blockGasLimit, "gasUsed", blockGasUsed) - return nil, fmt.Errorf("reach block gas limit %v", blockGasLimit) + break addressMap } allTxs = append(allTxs, tx) @@ -238,9 +239,13 @@ func (d *DexconApp) PrepareWitness(consensusHeight uint64) (witness coreTypes.Wi if d.lastPendingHeight == 0 && consensusHeight == 0 { witnessBlock = d.blockchain.CurrentBlock() } else if d.lastPendingHeight >= consensusHeight { + d.insertMu.Lock() witnessBlock = d.blockchain.GetPendingBlockByHeight(d.lastPendingHeight) + d.insertMu.Unlock() } else if h := <-d.addNotify(consensusHeight); h >= consensusHeight { + d.insertMu.Lock() witnessBlock = d.blockchain.GetPendingBlockByHeight(h) + d.insertMu.Unlock() } else { log.Error("need pending block") return witness, fmt.Errorf("need pending block") |