From 97fddc45d930cfe8d5427195353e310c30de7852 Mon Sep 17 00:00:00 2001 From: vyzo Date: Mon, 7 Sep 2020 22:15:17 +0300 Subject: [PATCH] temporarily allow negative perfoming chains Signed-off-by: Jakub Sztandera --- chain/messagepool/messagepool.go | 6 +++++- chain/messagepool/repub.go | 2 +- chain/messagepool/selection.go | 26 +++++++++++++------------- chain/messagepool/selection_test.go | 5 +++++ 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/chain/messagepool/messagepool.go b/chain/messagepool/messagepool.go index 111ed2848..0b9b22336 100644 --- a/chain/messagepool/messagepool.go +++ b/chain/messagepool/messagepool.go @@ -81,6 +81,10 @@ const ( localUpdates = "update" ) +// this is *temporary* mutilation until we have implemented uncapped miner penalties -- it will go +// away in the next fork. +var allowNegativeChains = true + func init() { // if the republish interval is too short compared to the pubsub timecache, adjust it minInterval := pubsub.TimeCacheDuration + time.Duration(build.PropagationDelaySecs) @@ -389,7 +393,7 @@ func (mp *MessagePool) verifyMsgBeforeAdd(m *types.SignedMessage, curTs *types.T // Note that for local messages, we always add them so that they can be accepted and republished // automatically. publish := local - if len(curTs.Blocks()) > 0 { + if !allowNegativeChains && len(curTs.Blocks()) > 0 { baseFee := curTs.Blocks()[0].ParentBaseFee baseFeeLowerBound := types.BigDiv(baseFee, baseFeeLowerBoundFactor) if m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { diff --git a/chain/messagepool/repub.go b/chain/messagepool/repub.go index 648466629..bde035985 100644 --- a/chain/messagepool/repub.go +++ b/chain/messagepool/repub.go @@ -100,7 +100,7 @@ loop: // check the baseFee lower bound -- only republish messages that can be included in the chain // within the next 20 blocks. for _, m := range chain.msgs { - if m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { + if !allowNegativeChains && m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { chain.Invalidate() continue loop } diff --git a/chain/messagepool/selection.go b/chain/messagepool/selection.go index 5b9a09f35..bd5a40705 100644 --- a/chain/messagepool/selection.go +++ b/chain/messagepool/selection.go @@ -100,7 +100,7 @@ func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64 return chains[i].Before(chains[j]) }) - if len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf) return result, nil } @@ -153,7 +153,7 @@ func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64 last := len(chains) for i, chain := range chains { // did we run out of performing chains? - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break } @@ -217,7 +217,7 @@ tailLoop: for gasLimit >= minGas && last < len(chains) { // trim if necessary if chains[last].gasLimit > gasLimit { - chains[last].Trim(gasLimit, mp, baseFee, false) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains) } // push down if it hasn't been invalidated @@ -243,7 +243,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break tailLoop } @@ -284,7 +284,7 @@ tailLoop: } // dependencies fit, just trim it - chain.Trim(gasLimit-depGasLimit, mp, baseFee, false) + chain.Trim(gasLimit-depGasLimit, mp, baseFee, allowNegativeChains) last += i continue tailLoop } @@ -349,7 +349,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S return chains[i].Before(chains[j]) }) - if len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf) return result, nil } @@ -360,7 +360,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S last := len(chains) for i, chain := range chains { // did we run out of performing chains? - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break } @@ -389,7 +389,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S tailLoop: for gasLimit >= minGas && last < len(chains) { // trim - chains[last].Trim(gasLimit, mp, baseFee, false) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains) // push down if it hasn't been invalidated if chains[last].valid { @@ -409,7 +409,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break tailLoop } @@ -471,7 +471,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui return chains[i].Before(chains[j]) }) - if len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { log.Warnw("all priority messages in mpool have negative gas performance", "bestGasPerf", chains[0].gasPerf) return nil, gasLimit } @@ -479,7 +479,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui // 3. Merge chains until the block limit, as long as they have non-negative gas performance last := len(chains) for i, chain := range chains { - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break } @@ -497,7 +497,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui tailLoop: for gasLimit >= minGas && last < len(chains) { // trim, discarding negative performing messages - chains[last].Trim(gasLimit, mp, baseFee, false) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains) // push down if it hasn't been invalidated if chains[last].valid { @@ -517,7 +517,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if chain.gasPerf < 0 { + if !allowNegativeChains && chain.gasPerf < 0 { break tailLoop } diff --git a/chain/messagepool/selection_test.go b/chain/messagepool/selection_test.go index 2f9833ee2..4db4267bd 100644 --- a/chain/messagepool/selection_test.go +++ b/chain/messagepool/selection_test.go @@ -729,6 +729,11 @@ func TestPriorityMessageSelection2(t *testing.T) { } func TestPriorityMessageSelection3(t *testing.T) { + allowNegativeChains = false + defer func() { + allowNegativeChains = true + }() + mp, tma := makeTestMpool() // the actors