frontend.go 3.93 KB
Newer Older
1 2 3 4 5
package frontend

import (
	"context"

6
	"github.com/ethereum-optimism/optimism/op-service/eth"
7
	"github.com/ethereum-optimism/optimism/op-supervisor/supervisor/types"
8
	"github.com/ethereum/go-ethereum/common"
9 10 11 12 13
)

type AdminBackend interface {
	Start(ctx context.Context) error
	Stop(ctx context.Context) error
14
	AddL2RPC(ctx context.Context, rpc string, jwtSecret eth.Bytes32) error
15 16 17 18
}

type QueryBackend interface {
	CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error)
19
	CheckMessages(messages []types.Message, minSafety types.SafetyLevel) error
20
	CrossDerivedFrom(ctx context.Context, chainID types.ChainID, derived eth.BlockID) (derivedFrom eth.BlockRef, err error)
21 22 23
	UnsafeView(ctx context.Context, chainID types.ChainID, unsafe types.ReferenceView) (types.ReferenceView, error)
	SafeView(ctx context.Context, chainID types.ChainID, safe types.ReferenceView) (types.ReferenceView, error)
	Finalized(ctx context.Context, chainID types.ChainID) (eth.BlockID, error)
24
	FinalizedL1() eth.BlockRef
25 26 27
}

type UpdatesBackend interface {
28 29
	UpdateLocalUnsafe(ctx context.Context, chainID types.ChainID, head eth.BlockRef) error
	UpdateLocalSafe(ctx context.Context, chainID types.ChainID, derivedFrom eth.BlockRef, lastDerived eth.BlockRef) error
30 31 32 33 34
}

type Backend interface {
	AdminBackend
	QueryBackend
35
	UpdatesBackend
36 37 38 39 40 41
}

type QueryFrontend struct {
	Supervisor QueryBackend
}

42 43
var _ QueryBackend = (*QueryFrontend)(nil)

44 45 46 47 48 49
// CheckMessage checks the safety-level of an individual message.
// The payloadHash references the hash of the message-payload of the message.
func (q *QueryFrontend) CheckMessage(identifier types.Identifier, payloadHash common.Hash) (types.SafetyLevel, error) {
	return q.Supervisor.CheckMessage(identifier, payloadHash)
}

50
// CheckMessages checks the safety-level of a collection of messages,
51 52 53 54 55 56 57
// and returns if the minimum safety-level is met for all messages.
func (q *QueryFrontend) CheckMessages(
	messages []types.Message,
	minSafety types.SafetyLevel) error {
	return q.Supervisor.CheckMessages(messages, minSafety)
}

58
func (q *QueryFrontend) UnsafeView(ctx context.Context, chainID types.ChainID, unsafe types.ReferenceView) (types.ReferenceView, error) {
59
	return q.Supervisor.UnsafeView(ctx, chainID, unsafe)
60 61 62
}

func (q *QueryFrontend) SafeView(ctx context.Context, chainID types.ChainID, safe types.ReferenceView) (types.ReferenceView, error) {
63
	return q.Supervisor.SafeView(ctx, chainID, safe)
64 65 66
}

func (q *QueryFrontend) Finalized(ctx context.Context, chainID types.ChainID) (eth.BlockID, error) {
67
	return q.Supervisor.Finalized(ctx, chainID)
68 69
}

70 71 72 73
func (q *QueryFrontend) FinalizedL1() eth.BlockRef {
	return q.Supervisor.FinalizedL1()
}

74 75
func (q *QueryFrontend) CrossDerivedFrom(ctx context.Context, chainID types.ChainID, derived eth.BlockID) (derivedFrom eth.BlockRef, err error) {
	return q.Supervisor.CrossDerivedFrom(ctx, chainID, derived)
76 77 78 79 80 81
}

type AdminFrontend struct {
	Supervisor Backend
}

82 83
var _ AdminBackend = (*AdminFrontend)(nil)

84 85 86 87 88 89 90 91 92
// Start starts the service, if it was previously stopped.
func (a *AdminFrontend) Start(ctx context.Context) error {
	return a.Supervisor.Start(ctx)
}

// Stop stops the service, if it was previously started.
func (a *AdminFrontend) Stop(ctx context.Context) error {
	return a.Supervisor.Stop(ctx)
}
93 94

// AddL2RPC adds a new L2 chain to the supervisor backend
95 96
func (a *AdminFrontend) AddL2RPC(ctx context.Context, rpc string, jwtSecret eth.Bytes32) error {
	return a.Supervisor.AddL2RPC(ctx, rpc, jwtSecret)
97
}
98 99 100 101 102

type UpdatesFrontend struct {
	Supervisor UpdatesBackend
}

103 104 105 106
var _ UpdatesBackend = (*UpdatesFrontend)(nil)

func (u *UpdatesFrontend) UpdateLocalUnsafe(ctx context.Context, chainID types.ChainID, head eth.BlockRef) error {
	return u.Supervisor.UpdateLocalUnsafe(ctx, chainID, head)
107 108
}

109 110
func (u *UpdatesFrontend) UpdateLocalSafe(ctx context.Context, chainID types.ChainID, derivedFrom eth.BlockRef, lastDerived eth.BlockRef) error {
	return u.Supervisor.UpdateLocalSafe(ctx, chainID, derivedFrom, lastDerived)
111
}