Prevent Pushing messages not valid for block inclusion

Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
This commit is contained in:
Jakub Sztandera 2020-07-29 18:30:08 +02:00
parent 5df0ee7935
commit c17c653eb1
No known key found for this signature in database
GPG Key ID: 9A9AF56F8B3879BA

View File

@ -28,6 +28,7 @@ import (
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/stmgr"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/chain/vm"
"github.com/filecoin-project/lotus/lib/sigs"
"github.com/filecoin-project/lotus/node/modules/dtypes"
@ -310,7 +311,22 @@ func (mp *MessagePool) addLocal(m *types.SignedMessage, msgb []byte) error {
return nil
}
func (mp *MessagePool) verifyMsgBeforePush(m *types.SignedMessage) error {
mp.curTsLk.Lock()
minGas := vm.PricelistByEpoch(mp.curTs.Height()).OnChainMessage(m.ChainLength())
mp.curTsLk.Unlock()
if err := m.VMMessage().ValidForBlockInclusion(minGas.Total()); err != nil {
return xerrors.Errorf("message will not be included in a block: %w", err)
}
return nil
}
func (mp *MessagePool) Push(m *types.SignedMessage) (cid.Cid, error) {
if err := mp.verifyMsgBeforePush(m); err != nil {
return cid.Undef, err
}
msgb, err := m.Serialize()
if err != nil {
return cid.Undef, err
@ -559,6 +575,10 @@ func (mp *MessagePool) PushWithNonce(ctx context.Context, addr address.Address,
return nil, err
}
if err := mp.verifyMsgBeforePush(msg); err != nil {
return nil, err
}
msgb, err := msg.Serialize()
if err != nil {
return nil, err