• protolambda's avatar
    op-node: op-node interop block verification (devnet-1 scope) (#11611) · ac19f2f9
    protolambda authored
    * op-node: experimental interop block verification
    
    * op-node: supervisor RPC init
    
    * op-e2e/actions: test interop safety checks
    
    * op-e2e/op-node: test fixes
    
    * op-node: update comments
    
    * op-node: unit-test interop deriver, trigger cross-safe updates on driver step, to poll for supervisor safety changes
    
    * op-node: add more comments, fix flag description
    
    * op-e2e: fix rebase, add missing argument
    ac19f2f9
payload_success.go 1.25 KB
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{})
}