From d798b17237c2b56a2c6aa72197e9df48537d60cd Mon Sep 17 00:00:00 2001 From: Jeffery Walsh Date: Mon, 1 Jul 2024 17:32:59 -0700 Subject: [PATCH] preconf api as its own service --- packages/taiko-client/cmd/flags/common.go | 15 +-- packages/taiko-client/cmd/flags/preconfapi.go | 24 +++++ packages/taiko-client/cmd/flags/proposer.go | 8 -- packages/taiko-client/cmd/main.go | 8 ++ packages/taiko-client/preconfapi/api.go | 69 ++++++++++++++ .../taiko-client/preconfapi/builder/blob.go | 92 +++++++++++++++++++ .../preconfapi/builder/calldata.go | 39 ++++++++ .../preconfapi/builder/interface.go | 19 ++++ packages/taiko-client/preconfapi/config.go | 25 +++++ .../{proposer => preconfapi}/server/api.go | 18 +--- .../{proposer => preconfapi}/server/server.go | 31 +++---- .../server/server_test.go | 41 +++------ packages/taiko-client/proposer/config.go | 2 - packages/taiko-client/proposer/config_test.go | 4 - packages/taiko-client/proposer/proposer.go | 23 ----- .../taiko-client/proposer/server/api_test.go | 19 ---- .../proposer/transaction_builder/blob.go | 64 ------------- .../proposer/transaction_builder/calldata.go | 14 --- .../proposer/transaction_builder/interface.go | 10 -- 19 files changed, 310 insertions(+), 215 deletions(-) create mode 100644 packages/taiko-client/cmd/flags/preconfapi.go create mode 100644 packages/taiko-client/preconfapi/api.go create mode 100644 packages/taiko-client/preconfapi/builder/blob.go create mode 100644 packages/taiko-client/preconfapi/builder/calldata.go create mode 100644 packages/taiko-client/preconfapi/builder/interface.go create mode 100644 packages/taiko-client/preconfapi/config.go rename packages/taiko-client/{proposer => preconfapi}/server/api.go (84%) rename packages/taiko-client/{proposer => preconfapi}/server/server.go (69%) rename packages/taiko-client/{proposer => preconfapi}/server/server_test.go (52%) delete mode 100644 packages/taiko-client/proposer/server/api_test.go diff --git a/packages/taiko-client/cmd/flags/common.go b/packages/taiko-client/cmd/flags/common.go index da6c424712..a5d361f677 100644 --- a/packages/taiko-client/cmd/flags/common.go +++ b/packages/taiko-client/cmd/flags/common.go @@ -10,13 +10,14 @@ import ( ) var ( - commonCategory = "COMMON" - metricsCategory = "METRICS" - loggingCategory = "LOGGING" - driverCategory = "DRIVER" - proposerCategory = "PROPOSER" - proverCategory = "PROVER" - txmgrCategory = "TX_MANAGER" + commonCategory = "COMMON" + metricsCategory = "METRICS" + loggingCategory = "LOGGING" + driverCategory = "DRIVER" + proposerCategory = "PROPOSER" + proverCategory = "PROVER" + txmgrCategory = "TX_MANAGER" + preconfApiCategory = "PRECONF_API" ) // Required flags used by all client software. diff --git a/packages/taiko-client/cmd/flags/preconfapi.go b/packages/taiko-client/cmd/flags/preconfapi.go new file mode 100644 index 0000000000..e5423ee657 --- /dev/null +++ b/packages/taiko-client/cmd/flags/preconfapi.go @@ -0,0 +1,24 @@ +package flags + +import ( + "github.com/urfave/cli/v2" +) + +// Required flags used by preconfirmations api. +var ( + PreconfAPIHTTPServerPort = &cli.Uint64Flag{ + Name: "preconfapi.port", + Usage: "Port to expose for http server", + Category: preconfApiCategory, + Value: 9871, + EnvVars: []string{"PRECONFAPI_PORT"}, + } +) + +// PreconfAPIFlags contains all preconfirmations API flags. +var PreconfAPIFlags = []cli.Flag{ + TaikoL1Address, + TxGasLimit, + PreconfAPIHTTPServerPort, + BlobAllowed, +} diff --git a/packages/taiko-client/cmd/flags/proposer.go b/packages/taiko-client/cmd/flags/proposer.go index 07c1d1053b..33d530f1cc 100644 --- a/packages/taiko-client/cmd/flags/proposer.go +++ b/packages/taiko-client/cmd/flags/proposer.go @@ -146,13 +146,6 @@ var ( Category: proposerCategory, EnvVars: []string{"PRECONFIRMATION_RPC"}, } - ProposerHTTPServerPort = &cli.Uint64Flag{ - Name: "proposer.port", - Usage: "Port to expose for http server", - Category: proverCategory, - Value: 9871, - EnvVars: []string{"PROPOSER_PORT"}, - } ) // ProposerFlags All proposer flags. @@ -180,5 +173,4 @@ var ProposerFlags = MergeFlags(CommonFlags, []cli.Flag{ BlobAllowed, L1BlockBuilderTip, PreconfirmationRPC, - ProposerHTTPServerPort, }, TxmgrFlags) diff --git a/packages/taiko-client/cmd/main.go b/packages/taiko-client/cmd/main.go index cfba0443e0..f27b00990d 100644 --- a/packages/taiko-client/cmd/main.go +++ b/packages/taiko-client/cmd/main.go @@ -10,6 +10,7 @@ import ( "github.com/taikoxyz/taiko-mono/packages/taiko-client/cmd/utils" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver" "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/version" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi" "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer" "github.com/taikoxyz/taiko-mono/packages/taiko-client/prover" ) @@ -48,6 +49,13 @@ func main() { Description: "Taiko prover software", Action: utils.SubcommandAction(new(prover.Prover)), }, + { + Name: "preconfapi", + Flags: flags.PreconfAPIFlags, + Usage: "Starts the preconfirmation API software", + Description: "Taiko preconfirmation API software", + Action: utils.SubcommandAction(new(preconfapi.PreconfAPI)), + }, } if err := app.Run(os.Args); err != nil { diff --git a/packages/taiko-client/preconfapi/api.go b/packages/taiko-client/preconfapi/api.go new file mode 100644 index 0000000000..97b1805dae --- /dev/null +++ b/packages/taiko-client/preconfapi/api.go @@ -0,0 +1,69 @@ +package preconfapi + +import ( + "context" + "errors" + "fmt" + "net/http" + + "github.com/ethereum/go-ethereum/log" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/builder" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/server" + "github.com/urfave/cli/v2" +) + +type PreconfAPI struct { + *Config + server *server.PreconfAPIServer +} + +// InitFromCli New initializes the given proposer instance based on the command line flags. +func (p *PreconfAPI) InitFromCli(ctx context.Context, c *cli.Context) error { + cfg, err := NewConfigFromCliContext(c) + if err != nil { + return err + } + + return p.InitFromConfig(ctx, cfg) +} + +func (p *PreconfAPI) InitFromConfig(ctx context.Context, cfg *Config) (err error) { + var txBuilder builder.TxBuilder + if cfg.BlobAllowed { + txBuilder = builder.NewBlobTransactionBuilder( + cfg.TaikoL1Address, + cfg.ProposeBlockTxGasLimit, + ) + } else { + // TODO: calldata builder + } + + // Prover server + if p.server, err = server.New(&server.NewPreconfAPIServerOpts{ + TxBuilder: txBuilder, + }); err != nil { + return err + } + + return nil +} + +func (p *PreconfAPI) Start() error { + go func() { + if err := p.server.Start(fmt.Sprintf(":%v", p.HTTPPort)); !errors.Is(err, http.ErrServerClosed) { + log.Crit("Failed to start http server", "error", err) + } + }() + return nil +} + +// Close closes the proposer instance. +func (p *PreconfAPI) Close(ctx context.Context) { + if err := p.server.Shutdown(ctx); err != nil { + log.Error("Failed to shut down prover server", "error", err) + } +} + +func (p *PreconfAPI) Name() string { + return "preconfapi" +} diff --git a/packages/taiko-client/preconfapi/builder/blob.go b/packages/taiko-client/preconfapi/builder/blob.go new file mode 100644 index 0000000000..0d9b9b02d2 --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/blob.go @@ -0,0 +1,92 @@ +package builder + +import ( + "context" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + + "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/utils" +) + +// BlobTransactionBuilder is responsible for building a TaikoL1.proposeBlock transaction with txList +// bytes saved in blob. +type BlobTransactionBuilder struct { + taikoL1Address common.Address + gasLimit uint64 +} + +// NewBlobTransactionBuilder creates a new BlobTransactionBuilder instance based on giving configurations. +func NewBlobTransactionBuilder( + taikoL1Address common.Address, + gasLimit uint64, +) *BlobTransactionBuilder { + return &BlobTransactionBuilder{ + taikoL1Address, + gasLimit, + } +} + +// BuildUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction, intended for preconfirmations. +func (b *BlobTransactionBuilder) BuildUnsigned( + ctx context.Context, + txListBytes []byte, + l1StateBlockNumber uint32, + timestamp uint64, + coinbase common.Address, + extraData [32]byte, +) (*types.Transaction, error) { + compressedTxListBytes, err := utils.Compress(txListBytes) + if err != nil { + return nil, err + } + + var blob = ð.Blob{} + if err := blob.FromData(compressedTxListBytes); err != nil { + return nil, err + } + + var ( + to = &b.taikoL1Address + data []byte + ) + + // ABI encode the TaikoL1.proposeBlock parameters. + encodedParams, err := encoding.EncodeBlockParams(&encoding.BlockParams{ + ExtraData: extraData, + Coinbase: coinbase, + Signature: []byte{}, // no longer checked + L1StateBlockNumber: l1StateBlockNumber, + Timestamp: timestamp, + }) + if err != nil { + return nil, err + } + + data, err = encoding.TaikoL1ABI.Pack("proposeBlock", encodedParams, []byte{}) + if err != nil { + return nil, err + } + + sidecar, blobHashes, err := txmgr.MakeSidecar([]*eth.Blob{blob}) + if err != nil { + return nil, err + } + + blobTx := &types.BlobTx{ + To: *to, + Value: nil, // maxFee / prover selecting no longer happens + Gas: b.gasLimit, + Data: data, + Sidecar: sidecar, + BlobHashes: blobHashes, + } + + tx := types.NewTx(blobTx) + + return tx, nil +} diff --git a/packages/taiko-client/preconfapi/builder/calldata.go b/packages/taiko-client/preconfapi/builder/calldata.go new file mode 100644 index 0000000000..1bb69656e7 --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/calldata.go @@ -0,0 +1,39 @@ +package builder + +import ( + "context" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +// CalldataTransactionBuilder is responsible for building a TaikoL1.proposeBlock transaction with txList +// bytes saved in blob. +type CalldataTransactionBuilder struct { + taikoL1Address common.Address + gasLimit uint64 +} + +// NewCalldataTransactionBuilder creates a new CalldataTransactionBuilder instance based on giving configurations. +func NewCalldataTransactionBuilder( + taikoL1Address common.Address, + gasLimit uint64, +) *CalldataTransactionBuilder { + return &CalldataTransactionBuilder{ + taikoL1Address, + gasLimit, + } +} + +// BuildUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction, intended for preconfirmations. +func (b *CalldataTransactionBuilder) BuildUnsigned( + _ context.Context, + _ []byte, + _ uint32, + _ uint64, + _ common.Address, + _ [32]byte, +) (*types.Transaction, error) { + return &types.Transaction{}, nil +} diff --git a/packages/taiko-client/preconfapi/builder/interface.go b/packages/taiko-client/preconfapi/builder/interface.go new file mode 100644 index 0000000000..62a1d91cbb --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/interface.go @@ -0,0 +1,19 @@ +package builder + +import ( + "context" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +type TxBuilder interface { + BuildUnsigned( + ctx context.Context, + txListBytes []byte, + l1StateBlockNumber uint32, + timestamp uint64, + coinbase common.Address, + extraData [32]byte, + ) (*types.Transaction, error) +} diff --git a/packages/taiko-client/preconfapi/config.go b/packages/taiko-client/preconfapi/config.go new file mode 100644 index 0000000000..f7d1b24f44 --- /dev/null +++ b/packages/taiko-client/preconfapi/config.go @@ -0,0 +1,25 @@ +package preconfapi + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/cmd/flags" + "github.com/urfave/cli/v2" +) + +type Config struct { + TaikoL1Address common.Address + BlobAllowed bool + HTTPPort uint64 + ProposeBlockTxGasLimit uint64 +} + +// NewConfigFromCliContext initializes a Config instance from +// command line flags. +func NewConfigFromCliContext(c *cli.Context) (*Config, error) { + return &Config{ + TaikoL1Address: common.HexToAddress(c.String(flags.TaikoL1Address.Name)), + BlobAllowed: c.Bool(flags.BlobAllowed.Name), + HTTPPort: c.Uint64(flags.PreconfAPIHTTPServerPort.Name), + ProposeBlockTxGasLimit: c.Uint64(flags.TxGasLimit.Name), + }, nil +} diff --git a/packages/taiko-client/proposer/server/api.go b/packages/taiko-client/preconfapi/server/api.go similarity index 84% rename from packages/taiko-client/proposer/server/api.go rename to packages/taiko-client/preconfapi/server/api.go index 82acc90689..573b12e681 100644 --- a/packages/taiko-client/proposer/server/api.go +++ b/packages/taiko-client/preconfapi/server/api.go @@ -25,22 +25,6 @@ import ( // @license.name MIT // @license.url https://github.com/taikoxyz/taiko-mono/packages/taiko-client/blob/main/LICENSE.md -// Status represents the current proposer server status. -type Status struct { -} - -// GetStatus handles a query to the current proposer server status. -// -// @Summary Get current proposer server status -// @ID get-status -// @Accept json -// @Produce json -// @Success 200 {object} Status -// @Router /status [get] -func (s *ProposerServer) GetStatus(c echo.Context) error { - return c.JSON(http.StatusOK, &Status{}) -} - type buildBlockRequest struct { L1StateBlockNumber uint32 `json:"l1StateBlockNumber"` Timestamp uint64 `json:"timestamp"` @@ -62,7 +46,7 @@ type buildBlockResponse struct { // @Produce json // @Success 200 {object} BuildBlockResponse // @Router /block/build [get] -func (s *ProposerServer) BuildBlock(c echo.Context) error { +func (s *PreconfAPIServer) BuildBlock(c echo.Context) error { req := &buildBlockRequest{} if err := c.Bind(req); err != nil { return c.JSON(http.StatusUnprocessableEntity, err) diff --git a/packages/taiko-client/proposer/server/server.go b/packages/taiko-client/preconfapi/server/server.go similarity index 69% rename from packages/taiko-client/proposer/server/server.go rename to packages/taiko-client/preconfapi/server/server.go index c1ab8267bb..34e06380c5 100644 --- a/packages/taiko-client/proposer/server/server.go +++ b/packages/taiko-client/preconfapi/server/server.go @@ -9,7 +9,7 @@ import ( "github.com/labstack/echo/v4/middleware" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" - builder "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer/transaction_builder" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/builder" ) // @title Taiko Proposer Server API @@ -22,24 +22,22 @@ import ( // @license.name MIT // @license.url https://github.com/taikoxyz/taiko-mono/blob/main/LICENSE.md -// ProposerServer represents a proposer server instance. -type ProposerServer struct { +// PreconfAPIServer represents a proposer server instance. +type PreconfAPIServer struct { echo *echo.Echo rpc *rpc.Client - txBuilder builder.ProposeBlockTransactionBuilder + txBuilder builder.TxBuilder } -// NewProposerServerOpts contains all configurations for creating a prover server instance. -type NewProposerServerOpts struct { - RPC *rpc.Client - TxBuilder builder.ProposeBlockTransactionBuilder +// NewPreconfAPIServerOpts contains all configurations for creating a prover server instance. +type NewPreconfAPIServerOpts struct { + TxBuilder builder.TxBuilder } // New creates a new prover server instance. -func New(opts *NewProposerServerOpts) (*ProposerServer, error) { - srv := &ProposerServer{ +func New(opts *NewPreconfAPIServerOpts) (*PreconfAPIServer, error) { + srv := &PreconfAPIServer{ echo: echo.New(), - rpc: opts.RPC, txBuilder: opts.TxBuilder, } @@ -51,17 +49,17 @@ func New(opts *NewProposerServerOpts) (*ProposerServer, error) { } // Start starts the HTTP server. -func (s *ProposerServer) Start(address string) error { +func (s *PreconfAPIServer) Start(address string) error { return s.echo.Start(address) } // Shutdown shuts down the HTTP server. -func (s *ProposerServer) Shutdown(ctx context.Context) error { +func (s *PreconfAPIServer) Shutdown(ctx context.Context) error { return s.echo.Shutdown(ctx) } // Health endpoints for probes. -func (s *ProposerServer) Health(c echo.Context) error { +func (s *PreconfAPIServer) Health(c echo.Context) error { return c.NoContent(http.StatusOK) } @@ -76,7 +74,7 @@ func LogSkipper(c echo.Context) bool { } // configureMiddleware configures the server middlewares. -func (s *ProposerServer) configureMiddleware() { +func (s *PreconfAPIServer) configureMiddleware() { s.echo.Use(middleware.RequestID()) s.echo.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{ @@ -90,9 +88,8 @@ func (s *ProposerServer) configureMiddleware() { } // configureRoutes contains all routes which will be used by prover server. -func (s *ProposerServer) configureRoutes() { +func (s *PreconfAPIServer) configureRoutes() { s.echo.GET("/", s.Health) s.echo.GET("/healthz", s.Health) - s.echo.GET("/status", s.GetStatus) s.echo.GET("/block/build", s.BuildBlock) } diff --git a/packages/taiko-client/proposer/server/server_test.go b/packages/taiko-client/preconfapi/server/server_test.go similarity index 52% rename from packages/taiko-client/proposer/server/server_test.go rename to packages/taiko-client/preconfapi/server/server_test.go index 2693c6cd5c..e7e14c00c1 100644 --- a/packages/taiko-client/proposer/server/server_test.go +++ b/packages/taiko-client/preconfapi/server/server_test.go @@ -6,42 +6,23 @@ import ( "net/http" "net/http/httptest" "net/url" - "os" "testing" - "time" "github.com/cenkalti/backoff/v4" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/go-resty/resty/v2" "github.com/phayes/freeport" "github.com/stretchr/testify/suite" - - "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" ) -type ProposerServerTestSuite struct { +type PreconfAPIServerTestSuite struct { suite.Suite - s *ProposerServer + s *PreconfAPIServer testServer *httptest.Server } -func (s *ProposerServerTestSuite) SetupTest() { - rpcClient, err := rpc.NewClient(context.Background(), &rpc.ClientConfig{ - L1Endpoint: os.Getenv("L1_NODE_WS_ENDPOINT"), - L2Endpoint: os.Getenv("L2_EXECUTION_ENGINE_WS_ENDPOINT"), - TaikoL1Address: common.HexToAddress(os.Getenv("TAIKO_L1_ADDRESS")), - TaikoL2Address: common.HexToAddress(os.Getenv("TAIKO_L2_ADDRESS")), - TaikoTokenAddress: common.HexToAddress(os.Getenv("TAIKO_TOKEN_ADDRESS")), - L2EngineEndpoint: os.Getenv("L2_EXECUTION_ENGINE_AUTH_ENDPOINT"), - JwtSecret: os.Getenv("JWT_SECRET"), - Timeout: 5 * time.Second, - }) - s.Nil(err) - - p, err := New(&NewProposerServerOpts{ - RPC: rpcClient, - }) +func (s *PreconfAPIServerTestSuite) SetupTest() { + p, err := New(&NewPreconfAPIServerOpts{}) s.Nil(err) p.echo.HideBanner = true @@ -51,19 +32,19 @@ func (s *ProposerServerTestSuite) SetupTest() { s.testServer = httptest.NewServer(p.echo) } -func (s *ProposerServerTestSuite) TestHealth() { +func (s *PreconfAPIServerTestSuite) TestHealth() { resp := s.sendReq("/healthz") defer resp.Body.Close() s.Equal(http.StatusOK, resp.StatusCode) } -func (s *ProposerServerTestSuite) TestRoot() { +func (s *PreconfAPIServerTestSuite) TestRoot() { resp := s.sendReq("/") defer resp.Body.Close() s.Equal(http.StatusOK, resp.StatusCode) } -func (s *ProposerServerTestSuite) TestStartShutdown() { +func (s *PreconfAPIServerTestSuite) TestStartShutdown() { port, err := freeport.GetFreePort() s.Nil(err) @@ -92,15 +73,15 @@ func (s *ProposerServerTestSuite) TestStartShutdown() { s.Nil(s.s.Shutdown(context.Background())) } -func (s *ProposerServerTestSuite) TearDownTest() { +func (s *PreconfAPIServerTestSuite) TearDownTest() { s.testServer.Close() } -func TestProposerServerTestSuite(t *testing.T) { - suite.Run(t, new(ProposerServerTestSuite)) +func TestPreconfAPIServerTestSuite(t *testing.T) { + suite.Run(t, new(PreconfAPIServerTestSuite)) } -func (s *ProposerServerTestSuite) sendReq(path string) *http.Response { +func (s *PreconfAPIServerTestSuite) sendReq(path string) *http.Response { res, err := http.Get(s.testServer.URL + path) s.Nil(err) return res diff --git a/packages/taiko-client/proposer/config.go b/packages/taiko-client/proposer/config.go index f24027ea6b..f2fb4c94af 100644 --- a/packages/taiko-client/proposer/config.go +++ b/packages/taiko-client/proposer/config.go @@ -45,7 +45,6 @@ type Config struct { TxmgrConfigs *txmgr.CLIConfig L1BlockBuilderTip *big.Int PreconfirmationRPC string - HTTPServerPort uint64 } // NewConfigFromCliContext initializes a Config instance from @@ -137,6 +136,5 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) { l1ProposerPrivKey, c, ), - HTTPServerPort: c.Uint64(flags.ProposerHTTPServerPort.Name), }, nil } diff --git a/packages/taiko-client/proposer/config_test.go b/packages/taiko-client/proposer/config_test.go index a4a37f5694..6fd9b587a5 100644 --- a/packages/taiko-client/proposer/config_test.go +++ b/packages/taiko-client/proposer/config_test.go @@ -26,7 +26,6 @@ var ( tierFee = 100.0 proposeInterval = "10s" rpcTimeout = "5s" - httpPort = "9344" ) func (s *ProposerTestSuite) TestNewConfigFromCliContext() { @@ -56,7 +55,6 @@ func (s *ProposerTestSuite) TestNewConfigFromCliContext() { s.Equal(uint64(15), c.TierFeePriceBump.Uint64()) s.Equal(uint64(5), c.MaxTierFeePriceBumps) s.Equal(true, c.IncludeParentMetaHash) - s.Equal(uint64(9344), c.HTTPServerPort) for i, e := range strings.Split(proverEndpoints, ",") { s.Equal(c.ProverEndpoints[i].String(), e) @@ -85,7 +83,6 @@ func (s *ProposerTestSuite) TestNewConfigFromCliContext() { "--" + flags.TierFeePriceBump.Name, "15", "--" + flags.MaxTierFeePriceBumps.Name, "5", "--" + flags.ProposeBlockIncludeParentMetaHash.Name, "true", - "--" + flags.ProposerHTTPServerPort.Name, httpPort, })) } @@ -146,7 +143,6 @@ func (s *ProposerTestSuite) SetupApp() *cli.App { &cli.Uint64Flag{Name: flags.TierFeePriceBump.Name}, &cli.Uint64Flag{Name: flags.MaxTierFeePriceBumps.Name}, &cli.BoolFlag{Name: flags.ProposeBlockIncludeParentMetaHash.Name}, - &cli.StringFlag{Name: flags.ProposerHTTPServerPort.Name}, } app.Flags = append(app.Flags, flags.TxmgrFlags...) app.Action = func(ctx *cli.Context) error { diff --git a/packages/taiko-client/proposer/proposer.go b/packages/taiko-client/proposer/proposer.go index b22827babf..3127a1eef0 100644 --- a/packages/taiko-client/proposer/proposer.go +++ b/packages/taiko-client/proposer/proposer.go @@ -3,11 +3,9 @@ package proposer import ( "bytes" "context" - "errors" "fmt" "math/big" "math/rand" - "net/http" "sync" "time" @@ -27,7 +25,6 @@ import ( "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/utils" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" selector "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer/prover_selector" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer/server" builder "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer/transaction_builder" ) @@ -56,9 +53,6 @@ type Proposer struct { // Protocol configurations protocolConfigs *bindings.TaikoDataConfig - // Proposer API for block builders - server *server.ProposerServer - lastProposedAt time.Time txmgr *txmgr.SimpleTxManager @@ -163,14 +157,6 @@ func (p *Proposer) InitFromConfig(ctx context.Context, cfg *Config, txMgr *txmgr ) } - // Prover server - if p.server, err = server.New(&server.NewProposerServerOpts{ - RPC: p.rpc, - TxBuilder: p.txBuilder, - }); err != nil { - return err - } - return nil } @@ -179,11 +165,6 @@ func (p *Proposer) Start() error { p.wg.Add(1) go p.eventLoop() - go func() { - if err := p.server.Start(fmt.Sprintf(":%v", p.HTTPServerPort)); !errors.Is(err, http.ErrServerClosed) { - log.Crit("Failed to start http server", "error", err) - } - }() return nil } @@ -215,10 +196,6 @@ func (p *Proposer) eventLoop() { // Close closes the proposer instance. func (p *Proposer) Close(ctx context.Context) { - if err := p.server.Shutdown(ctx); err != nil { - log.Error("Failed to shut down prover server", "error", err) - } - p.wg.Wait() } diff --git a/packages/taiko-client/proposer/server/api_test.go b/packages/taiko-client/proposer/server/api_test.go deleted file mode 100644 index 916fd19e3f..0000000000 --- a/packages/taiko-client/proposer/server/api_test.go +++ /dev/null @@ -1,19 +0,0 @@ -package server - -import ( - "encoding/json" - "io" - "net/http" -) - -func (s *ProposerServerTestSuite) TestGetStatusSuccess() { - res := s.sendReq("/status") - s.Equal(http.StatusOK, res.StatusCode) - - status := new(Status) - - defer res.Body.Close() - b, err := io.ReadAll(res.Body) - s.Nil(err) - s.Nil(json.Unmarshal(b, &status)) -} diff --git a/packages/taiko-client/proposer/transaction_builder/blob.go b/packages/taiko-client/proposer/transaction_builder/blob.go index bf50cd53eb..fe39634ebd 100644 --- a/packages/taiko-client/proposer/transaction_builder/blob.go +++ b/packages/taiko-client/proposer/transaction_builder/blob.go @@ -9,12 +9,10 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/utils" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" selector "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer/prover_selector" ) @@ -138,65 +136,3 @@ func (b *BlobTransactionBuilder) Build( Value: maxFee, }, nil } - -// BuildUnsigned implements the ProposeBlockTransactionBuilder interface to -// return an unsigned transaction, intended for preconfirmations. -func (b *BlobTransactionBuilder) BuildUnsigned( - ctx context.Context, - txListBytes []byte, - l1StateBlockNumber uint32, - timestamp uint64, - coinbase common.Address, - extraData [32]byte, -) (*types.Transaction, error) { - compressedTxListBytes, err := utils.Compress(txListBytes) - if err != nil { - return nil, err - } - - var blob = ð.Blob{} - if err := blob.FromData(compressedTxListBytes); err != nil { - return nil, err - } - - var ( - to = &b.taikoL1Address - data []byte - ) - - // ABI encode the TaikoL1.proposeBlock parameters. - encodedParams, err := encoding.EncodeBlockParams(&encoding.BlockParams{ - ExtraData: extraData, - Coinbase: coinbase, - Signature: []byte{}, // no longer checked - L1StateBlockNumber: l1StateBlockNumber, - Timestamp: timestamp, - }) - if err != nil { - return nil, err - } - - data, err = encoding.TaikoL1ABI.Pack("proposeBlock", encodedParams, []byte{}) - if err != nil { - return nil, err - } - - sidecar, blobHashes, err := txmgr.MakeSidecar([]*eth.Blob{blob}) - if err != nil { - return nil, err - } - - blobTx := &types.BlobTx{ - To: *to, - Value: nil, // maxFee / prover selecting no longer happens - Gas: b.gasLimit, - Data: data, - Sidecar: sidecar, - BlobHashes: blobHashes, - } - - tx := types.NewTx(blobTx) - - return tx, nil - -} diff --git a/packages/taiko-client/proposer/transaction_builder/calldata.go b/packages/taiko-client/proposer/transaction_builder/calldata.go index f3fbfb2c9a..23fdf5ea0a 100644 --- a/packages/taiko-client/proposer/transaction_builder/calldata.go +++ b/packages/taiko-client/proposer/transaction_builder/calldata.go @@ -7,7 +7,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" @@ -122,16 +121,3 @@ func (b *CalldataTransactionBuilder) Build( Value: maxFee, }, nil } - -// BuildUnsigned implements the ProposeBlockTransactionBuilder interface. -// TODO: we wont be using this in the upcoming first iteration of the testnet. Leave empty. -func (b *CalldataTransactionBuilder) BuildUnsigned( - ctx context.Context, - txListBytes []byte, - l1StateBlockNumber uint32, - timestamp uint64, - coinbase common.Address, - extraData [32]byte, -) (*types.Transaction, error) { - return &types.Transaction{}, nil -} diff --git a/packages/taiko-client/proposer/transaction_builder/interface.go b/packages/taiko-client/proposer/transaction_builder/interface.go index 5e98095d42..6d7badbf4f 100644 --- a/packages/taiko-client/proposer/transaction_builder/interface.go +++ b/packages/taiko-client/proposer/transaction_builder/interface.go @@ -4,8 +4,6 @@ import ( "context" "github.com/ethereum-optimism/optimism/op-service/txmgr" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" ) @@ -20,12 +18,4 @@ type ProposeBlockTransactionBuilder interface { timestamp uint64, parentMetaHash [32]byte, ) (*txmgr.TxCandidate, error) - BuildUnsigned( - ctx context.Context, - txListBytes []byte, - l1StateBlockNumber uint32, - timestamp uint64, - coinbase common.Address, - extraData [32]byte, - ) (*types.Transaction, error) }