Merge pull request #2426 from filecoin-project/feat/block-gas-limit
Add block gas limit verification
This commit is contained in:
commit
02176ec5f8
@ -950,15 +950,24 @@ func (syncer *Syncer) checkBlockMessages(ctx context.Context, b *types.FullBlock
|
|||||||
return xerrors.Errorf("failed to load base state tree: %w", err)
|
return xerrors.Errorf("failed to load base state tree: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pl := vm.PricelistByEpoch(baseTs.Height())
|
||||||
|
var sumGasLimit int64
|
||||||
checkMsg := func(msg types.ChainMsg) error {
|
checkMsg := func(msg types.ChainMsg) error {
|
||||||
m := msg.VMMessage()
|
m := msg.VMMessage()
|
||||||
|
|
||||||
// Phase 1: syntactic validation, as defined in the spec
|
// Phase 1: syntactic validation, as defined in the spec
|
||||||
minGas := vm.PricelistByEpoch(baseTs.Height()).OnChainMessage(msg.ChainLength())
|
minGas := pl.OnChainMessage(msg.ChainLength())
|
||||||
if err := m.ValidForBlockInclusion(minGas.Total()); err != nil {
|
if err := m.ValidForBlockInclusion(minGas.Total()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ValidForBlockInclusion checks if any single message does not exceed BlockGasLimit
|
||||||
|
// So below is overflow safe
|
||||||
|
sumGasLimit += m.GasLimit
|
||||||
|
if sumGasLimit > build.BlockGasLimit {
|
||||||
|
return xerrors.Errorf("block gas limit exceeded")
|
||||||
|
}
|
||||||
|
|
||||||
// Phase 2: (Partial) semantic validation:
|
// Phase 2: (Partial) semantic validation:
|
||||||
// the sender exists and is an account actor, and the nonces make sense
|
// the sender exists and is an account actor, and the nonces make sense
|
||||||
if _, ok := nonces[m.From]; !ok {
|
if _, ok := nonces[m.From]; !ok {
|
||||||
|
Loading…
Reference in New Issue
Block a user