mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-16 18:00:46 +00:00
check nonce special transaction before promote
This commit is contained in:
parent
9087c0852b
commit
bc027c4fc0
2 changed files with 3 additions and 16 deletions
|
|
@ -1348,7 +1348,7 @@ func (bc *BlockChain) getResultBlock(block *types.Block, verifiedM2 bool) (*Resu
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
proctime := time.Since(bstart)
|
proctime := time.Since(bstart)
|
||||||
log.Debug("Caculate new block", "number", block.Number(), "hash", block.Hash(), "uncles", len(block.Uncles()),
|
log.Debug("Calculate new block", "number", block.Number(), "hash", block.Hash(), "uncles", len(block.Uncles()),
|
||||||
"txs", len(block.Transactions()), "gas", block.GasUsed(), "elapsed", common.PrettyDuration(time.Since(bstart)), "process", process)
|
"txs", len(block.Transactions()), "gas", block.GasUsed(), "elapsed", common.PrettyDuration(time.Since(bstart)), "process", process)
|
||||||
return &ResultProcessBlock{receipts: receipts, logs: logs, state: state, proctime: proctime, usedGas: usedGas}, nil
|
return &ResultProcessBlock{receipts: receipts, logs: logs, state: state, proctime: proctime, usedGas: usedGas}, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -647,7 +647,7 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (bool, error) {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
from, _ := types.Sender(pool.signer, tx) // already validated
|
from, _ := types.Sender(pool.signer, tx) // already validated
|
||||||
if tx.IsSpecialTransaction() && pool.IsMasterNode != nil && pool.IsMasterNode(from) {
|
if tx.IsSpecialTransaction() && pool.IsMasterNode != nil && pool.IsMasterNode(from) && pool.pendingState.GetNonce(from) == tx.Nonce() {
|
||||||
return pool.promoteSpecialTx(from, tx)
|
return pool.promoteSpecialTx(from, tx)
|
||||||
}
|
}
|
||||||
// If the transaction pool is full, discard underpriced transactions
|
// If the transaction pool is full, discard underpriced transactions
|
||||||
|
|
@ -813,20 +813,7 @@ func (pool *TxPool) promoteSpecialTx(addr common.Address, tx *types.Transaction)
|
||||||
// Set the potentially new pending nonce and notify any subsystems of the new tx
|
// Set the potentially new pending nonce and notify any subsystems of the new tx
|
||||||
pool.beats[addr] = time.Now()
|
pool.beats[addr] = time.Now()
|
||||||
pool.pendingState.SetNonce(addr, tx.Nonce()+1)
|
pool.pendingState.SetNonce(addr, tx.Nonce()+1)
|
||||||
broadcastTxs := types.Transactions{}
|
go pool.txFeed.Send(TxPreEvent{tx})
|
||||||
for i := tx.Nonce() - 1; i > 0; i-- {
|
|
||||||
before := list.txs.Get(i)
|
|
||||||
if before == nil || before.IsSpecialTransaction() {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
broadcastTxs = append(broadcastTxs, before)
|
|
||||||
}
|
|
||||||
broadcastTxs = append(broadcastTxs, tx)
|
|
||||||
go func() {
|
|
||||||
for _, btx := range broadcastTxs {
|
|
||||||
pool.txFeed.Send(TxPreEvent{btx})
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue