diff --git a/chain/messagepool/repub.go b/chain/messagepool/repub.go index bde035985bb..d1b1116c5df 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 !allowNegativeChains && m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { + if !allowNegativeChains(ts.Height()) && m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { chain.Invalidate() continue loop } diff --git a/chain/messagepool/selection.go b/chain/messagepool/selection.go index 669b81b5454..4655c8f8852 100644 --- a/chain/messagepool/selection.go +++ b/chain/messagepool/selection.go @@ -14,13 +14,16 @@ import ( "github.com/filecoin-project/lotus/chain/messagepool/gasguess" "github.com/filecoin-project/lotus/chain/types" "github.com/filecoin-project/lotus/chain/vm" + "github.com/filecoin-project/specs-actors/actors/abi" ) var bigBlockGasLimit = big.NewInt(build.BlockGasLimit) // this is *temporary* mutilation until we have implemented uncapped miner penalties -- it will go // away in the next fork. -var allowNegativeChains = true +func allowNegativeChains(epoch abi.ChainEpoch) bool { + return epoch < 100000000000 +} const MaxBlocks = 15 @@ -104,7 +107,7 @@ func (mp *MessagePool) selectMessagesOptimal(curTs, ts *types.TipSet, tq float64 return chains[i].Before(chains[j]) }) - if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && 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 } @@ -157,7 +160,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 !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 { break } @@ -221,7 +224,7 @@ tailLoop: for gasLimit >= minGas && last < len(chains) { // trim if necessary if chains[last].gasLimit > gasLimit { - chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(curTs.Height())) } // push down if it hasn't been invalidated @@ -247,7 +250,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 { break tailLoop } @@ -288,7 +291,7 @@ tailLoop: } // dependencies fit, just trim it - chain.Trim(gasLimit-depGasLimit, mp, baseFee, allowNegativeChains) + chain.Trim(gasLimit-depGasLimit, mp, baseFee, allowNegativeChains(curTs.Height())) last += i continue tailLoop } @@ -353,7 +356,7 @@ func (mp *MessagePool) selectMessagesGreedy(curTs, ts *types.TipSet) ([]*types.S return chains[i].Before(chains[j]) }) - if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && 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 } @@ -364,7 +367,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 !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 { break } @@ -393,7 +396,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, allowNegativeChains) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(curTs.Height())) // push down if it hasn't been invalidated if chains[last].valid { @@ -413,7 +416,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(curTs.Height()) && chain.gasPerf < 0 { break tailLoop } @@ -475,7 +478,7 @@ func (mp *MessagePool) selectPriorityMessages(pending map[address.Address]map[ui return chains[i].Before(chains[j]) }) - if !allowNegativeChains && len(chains) != 0 && chains[0].gasPerf < 0 { + if !allowNegativeChains(ts.Height()) && 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 } @@ -483,7 +486,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 !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(ts.Height()) && chain.gasPerf < 0 { break } @@ -501,7 +504,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, allowNegativeChains) + chains[last].Trim(gasLimit, mp, baseFee, allowNegativeChains(ts.Height())) // push down if it hasn't been invalidated if chains[last].valid { @@ -521,7 +524,7 @@ tailLoop: } // if gasPerf < 0 we have no more profitable chains - if !allowNegativeChains && chain.gasPerf < 0 { + if !allowNegativeChains(ts.Height()) && chain.gasPerf < 0 { break tailLoop } diff --git a/chain/messagepool/selection_test.go b/chain/messagepool/selection_test.go index 4db4267bdcc..489a41eab4d 100644 --- a/chain/messagepool/selection_test.go +++ b/chain/messagepool/selection_test.go @@ -729,10 +729,7 @@ func TestPriorityMessageSelection2(t *testing.T) { } func TestPriorityMessageSelection3(t *testing.T) { - allowNegativeChains = false - defer func() { - allowNegativeChains = true - }() + t.Skip("reenable after removing allow negative") mp, tma := makeTestMpool()