handle messages with invalid nonces after balance filtering
This commit is contained in:
parent
f5ae64bf94
commit
8337dd52fe
@ -312,17 +312,30 @@ func (m *Miner) createBlock(base *MiningBase, ticket *types.Ticket, proof types.
|
|||||||
|
|
||||||
func (m *Miner) selectMessages(ctx context.Context, base *MiningBase, msgs []*types.SignedMessage) ([]*types.SignedMessage, error) {
|
func (m *Miner) selectMessages(ctx context.Context, base *MiningBase, msgs []*types.SignedMessage) ([]*types.SignedMessage, error) {
|
||||||
out := make([]*types.SignedMessage, 0, len(msgs))
|
out := make([]*types.SignedMessage, 0, len(msgs))
|
||||||
|
inclNonces := make(map[address.Address]uint64)
|
||||||
for _, msg := range msgs {
|
for _, msg := range msgs {
|
||||||
act, err := m.api.StateGetActor(ctx, msg.Message.From, base.ts)
|
from := msg.Message.From
|
||||||
|
act, err := m.api.StateGetActor(ctx, from, base.ts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("failed to check message sender balance: %w", err)
|
return nil, xerrors.Errorf("failed to check message sender balance: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, ok := inclNonces[from]; !ok {
|
||||||
|
inclNonces[from] = act.Nonce
|
||||||
|
}
|
||||||
|
|
||||||
if act.Balance.LessThan(msg.Message.RequiredFunds()) {
|
if act.Balance.LessThan(msg.Message.RequiredFunds()) {
|
||||||
log.Warningf("message in mempool does not have enough funds: %s", msg.Cid())
|
log.Warningf("message in mempool does not have enough funds: %s", msg.Cid())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if msg.Message.Nonce > inclNonces[from] {
|
||||||
|
log.Warningf("message in mempool has too high of a nonce: %s", msg.Cid())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
inclNonces[from] = msg.Message.Nonce
|
||||||
|
|
||||||
out = append(out, msg)
|
out = append(out, msg)
|
||||||
}
|
}
|
||||||
return out, nil
|
return out, nil
|
||||||
|
Loading…
Reference in New Issue
Block a user