This repository was archived by the owner on Mar 8, 2025. It is now read-only.
forked from Layr-Labs/optimism-archived
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathpayload_success.go
51 lines (41 loc) · 1.59 KB
/
payload_success.go
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
41
42
43
44
45
46
47
48
49
50
51
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
Info eth.PayloadInfo
Envelope *eth.ExecutionPayloadEnvelope
Ref eth.L2BlockRef
}
func (ev PayloadSuccessEvent) String() string {
return "payload-success"
}
func (eq *EngDeriver) onPayloadSuccess(ev PayloadSuccessEvent) {
// Backup unsafeHead when new block is not built on original unsafe head.
if eq.ec.unsafeHead.Number >= ev.Ref.Number {
eq.ec.SetBackupUnsafeL2Head(eq.ec.unsafeHead, false)
}
eq.ec.SetUnsafeHead(ev.Ref)
// If derived from L1, then it can be considered (pending) safe
if ev.DerivedFrom != (eth.L1BlockRef{}) {
if ev.IsLastInSpan {
eq.ec.SetSafeHead(ev.Ref)
eq.emitter.Emit(SafeDerivedEvent{Safe: ev.Ref, DerivedFrom: ev.DerivedFrom})
}
eq.ec.SetPendingSafeL2Head(ev.Ref)
eq.emitter.Emit(PendingSafeUpdateEvent{
PendingSafe: eq.ec.PendingSafeL2Head(),
Unsafe: eq.ec.UnsafeL2Head(),
})
}
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{})
}