1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package engine
import (
"github.com/ethereum-optimism/optimism/op-service/eth"
)
type PayloadSuccessEvent struct {
// if payload should be promoted to safe (must also be pending safe, see DerivedFrom)
IsLastInSpan bool
// payload is promoted to pending-safe if non-zero
DerivedFrom eth.L1BlockRef
Envelope *eth.ExecutionPayloadEnvelope
Ref eth.L2BlockRef
}
func (ev PayloadSuccessEvent) String() string {
return "payload-success"
}
func (eq *EngDeriver) onPayloadSuccess(ev PayloadSuccessEvent) {
eq.emitter.Emit(PromoteUnsafeEvent{Ref: ev.Ref})
// If derived from L1, then it can be considered (pending) safe
if ev.DerivedFrom != (eth.L1BlockRef{}) {
eq.emitter.Emit(PromotePendingSafeEvent{
Ref: ev.Ref,
Safe: ev.IsLastInSpan,
DerivedFrom: ev.DerivedFrom,
})
}
payload := ev.Envelope.ExecutionPayload
eq.log.Info("Inserted block", "hash", payload.BlockHash, "number", uint64(payload.BlockNumber),
"state_root", payload.StateRoot, "timestamp", uint64(payload.Timestamp), "parent", payload.ParentHash,
"prev_randao", payload.PrevRandao, "fee_recipient", payload.FeeRecipient,
"txs", len(payload.Transactions), "last_in_span", ev.IsLastInSpan, "derived_from", ev.DerivedFrom)
eq.emitter.Emit(TryUpdateEngineEvent{})
}