rollupclient.go 2.41 KB
Newer Older
1 2 3 4
package sources

import (
	"context"
5

6 7
	"golang.org/x/exp/slog"

8
	"github.com/ethereum/go-ethereum/common"
9
	"github.com/ethereum/go-ethereum/common/hexutil"
10 11

	"github.com/ethereum-optimism/optimism/op-node/rollup"
Sabnock01's avatar
Sabnock01 committed
12
	"github.com/ethereum-optimism/optimism/op-service/client"
13
	"github.com/ethereum-optimism/optimism/op-service/eth"
14 15 16
)

type RollupClient struct {
17
	rpc client.RPC
18 19
}

20
func NewRollupClient(rpc client.RPC) *RollupClient {
21 22 23
	return &RollupClient{rpc}
}

24 25 26
func (r *RollupClient) OutputAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) {
	var output *eth.OutputResponse
	err := r.rpc.CallContext(ctx, &output, "optimism_outputAtBlock", hexutil.Uint64(blockNum))
27 28 29
	return output, err
}

30 31 32 33 34 35
func (r *RollupClient) SafeHeadAtL1Block(ctx context.Context, blockNum uint64) (*eth.SafeHeadResponse, error) {
	var output *eth.SafeHeadResponse
	err := r.rpc.CallContext(ctx, &output, "optimism_safeHeadAtL1Block", hexutil.Uint64(blockNum))
	return output, err
}

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
func (r *RollupClient) SyncStatus(ctx context.Context) (*eth.SyncStatus, error) {
	var output *eth.SyncStatus
	err := r.rpc.CallContext(ctx, &output, "optimism_syncStatus")
	return output, err
}

func (r *RollupClient) RollupConfig(ctx context.Context) (*rollup.Config, error) {
	var output *rollup.Config
	err := r.rpc.CallContext(ctx, &output, "optimism_rollupConfig")
	return output, err
}

func (r *RollupClient) Version(ctx context.Context) (string, error) {
	var output string
	err := r.rpc.CallContext(ctx, &output, "optimism_version")
	return output, err
}
53 54 55 56 57 58 59 60 61 62

func (r *RollupClient) StartSequencer(ctx context.Context, unsafeHead common.Hash) error {
	return r.rpc.CallContext(ctx, nil, "admin_startSequencer", unsafeHead)
}

func (r *RollupClient) StopSequencer(ctx context.Context) (common.Hash, error) {
	var result common.Hash
	err := r.rpc.CallContext(ctx, &result, "admin_stopSequencer")
	return result, err
}
63 64 65 66 67 68

func (r *RollupClient) SequencerActive(ctx context.Context) (bool, error) {
	var result bool
	err := r.rpc.CallContext(ctx, &result, "admin_sequencerActive")
	return result, err
}
69

70
func (r *RollupClient) PostUnsafePayload(ctx context.Context, payload *eth.ExecutionPayloadEnvelope) error {
71 72 73
	return r.rpc.CallContext(ctx, nil, "admin_postUnsafePayload", payload)
}

74
func (r *RollupClient) SetLogLevel(ctx context.Context, lvl slog.Level) error {
75
	return r.rpc.CallContext(ctx, nil, "admin_setLogLevel", lvl.String())
76
}
77 78 79 80

func (r *RollupClient) Close() {
	r.rpc.Close()
}