test: add real re-org and p2p txs

This commit is contained in:
alex.sharov 2021-08-05 15:03:25 +07:00
parent 34828e0336
commit eed7f95aed
2 changed files with 34 additions and 9 deletions

View File

@ -220,9 +220,11 @@ func (p *TxPool) OnNewTxs(newTxs TxSlots) error {
}
notifyNewTxs = append(notifyNewTxs, newTxs.txs[i].idHash[:]...)
}
select {
case p.newTxs <- notifyNewTxs:
default:
if len(notifyNewTxs) > 0 {
select {
case p.newTxs <- notifyNewTxs:
default:
}
}
return nil
@ -282,9 +284,11 @@ func (p *TxPool) OnNewBlock(unwindTxs, minedTxs TxSlots, protocolBaseFee, blockB
}
notifyNewTxs = append(notifyNewTxs, unwindTxs.txs[i].idHash[:]...)
}
select {
case p.newTxs <- notifyNewTxs:
default:
if len(notifyNewTxs) > 0 {
select {
case p.newTxs <- notifyNewTxs:
default:
}
}
return nil
@ -339,6 +343,7 @@ func onNewBlock(senderInfo map[uint64]*senderInfo, unwindTxs TxSlots, minedTxs [
if len(unwindTxs.txs) > 0 {
//TODO: restore isLocal flag in unwindTxs
unsafeAddToPool(senderInfo, unwindTxs, pending, func(i *MetaTx) {
//fmt.Printf("add: %d,%d\n", i.Tx.senderID, i.Tx.nonce)
if _, ok := localsHistory.Get(i.Tx.idHash); ok {
//TODO: also check if sender is in list of local-senders
i.SubPool |= IsLocal
@ -357,6 +362,8 @@ func onNewBlock(senderInfo map[uint64]*senderInfo, unwindTxs TxSlots, minedTxs [
queued.EnforceInvariants()
promote(pending, baseFee, queued, func(i *MetaTx) {
//fmt.Printf("del1 nonce: %d, %t\n", i.Tx.senderID, senderInfo[i.Tx.senderID].nonce < i.Tx.nonce)
//fmt.Printf("del2 balance: %x,%x,%x\n", i.Tx.value, i.Tx.tip, senderInfo[i.Tx.senderID].balance)
delete(byHash, string(i.Tx.idHash[:]))
senderInfo[i.Tx.senderID].txNonce2Tx.Delete(&nonce2TxItem{i})
if i.SubPool&IsLocal != 0 {

View File

@ -329,9 +329,6 @@ func FuzzOnNewBlocks5(f *testing.F) {
_, ok = pool.byHash[string(minedTxs.txs[i].idHash[:])]
assert.False(ok)
}
newHashes := <-ch
//assert.Equal(len(unwindTxs.txs), newHashes.Len())
_ = newHashes
}
// go to first fork
@ -339,13 +336,34 @@ func FuzzOnNewBlocks5(f *testing.F) {
err := pool.OnNewBlock(unwindTxs, minedTxs1, protocolBaseFee, blockBaseFee)
assert.NoError(err)
check(unwindTxs, minedTxs1)
select {
case newHashes := <-ch:
assert.Greater(len(newHashes), 0)
//TODO: all notified hashes must be in given list
default:
//TODO: no notifications - means pools must be empty (unchanged)
}
//assert.Equal(len(unwindTxs.txs), newHashes.Len())
// unwind everything and switch to new fork (need unwind mined now)
err = pool.OnNewBlock(minedTxs1, minedTxs2, protocolBaseFee, blockBaseFee)
assert.NoError(err)
check(minedTxs1, minedTxs2)
select {
case newHashes := <-ch:
assert.Greater(len(newHashes), 0)
default:
}
// add some remote txs from p2p
err = pool.OnNewTxs(p2pReceived)
assert.NoError(err)
check(TxSlots{}, p2pReceived)
select {
case newHashes := <-ch:
assert.Greater(len(newHashes), 0)
default:
}
})
}