Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(taiko-client): add preconf whitelist + update method to check operator #18978

Merged
merged 13 commits into from
Feb 21, 2025
8 changes: 8 additions & 0 deletions packages/taiko-client/cmd/flags/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,13 @@ var (
Value: false,
EnvVars: []string{"PRECONFIRMATION_SERVER_SIGNATURE_CHECK"},
}
PreconfWhitelistAddress = &cli.StringFlag{
Name: "preconfWhitelist",
Usage: "PreconfWhitelist L1 `address`",
Required: false,
Category: driverCategory,
EnvVars: []string{"PRECONF_WHITELIST"},
}
)

// DriverFlags All driver flags.
Expand All @@ -98,4 +105,5 @@ var DriverFlags = MergeFlags(CommonFlags, []cli.Flag{
PreconfBlockServerJWTSecret,
PreconfBlockServerCORSOrigins,
PreconfBlockServerCheckSig,
PreconfWhitelistAddress,
}, p2pFlags.P2PFlags("PRECONFIRMATION"))
19 changes: 10 additions & 9 deletions packages/taiko-client/driver/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,15 +92,16 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
// Check P2P network flags and create the P2P configurations.
var (
clientConfig = &rpc.ClientConfig{
L1Endpoint: c.String(flags.L1WSEndpoint.Name),
L1BeaconEndpoint: beaconEndpoint,
L2Endpoint: c.String(flags.L2WSEndpoint.Name),
L2CheckPoint: l2CheckPoint,
TaikoL1Address: common.HexToAddress(c.String(flags.TaikoL1Address.Name)),
TaikoL2Address: common.HexToAddress(c.String(flags.TaikoL2Address.Name)),
L2EngineEndpoint: c.String(flags.L2AuthEndpoint.Name),
JwtSecret: string(jwtSecret),
Timeout: c.Duration(flags.RPCTimeout.Name),
L1Endpoint: c.String(flags.L1WSEndpoint.Name),
L1BeaconEndpoint: beaconEndpoint,
L2Endpoint: c.String(flags.L2WSEndpoint.Name),
L2CheckPoint: l2CheckPoint,
TaikoL1Address: common.HexToAddress(c.String(flags.TaikoL1Address.Name)),
TaikoL2Address: common.HexToAddress(c.String(flags.TaikoL2Address.Name)),
PreconfWhitelistAddress: common.HexToAddress(c.String(flags.PreconfWhitelistAddress.Name)),
L2EngineEndpoint: c.String(flags.L2AuthEndpoint.Name),
JwtSecret: string(jwtSecret),
Timeout: c.Duration(flags.RPCTimeout.Name),
}
p2pConfigs *p2p.Config
signerConfigs p2p.SignerSetup
Expand Down
2 changes: 1 addition & 1 deletion packages/taiko-client/driver/preconf_blocks/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (

// ValidateSignature validates the signature of the request body.
func (b *BuildPreconfBlockRequestBody) ValidateSignature() (bool, error) {
payload, err := rlp.EncodeToBytes(b)
payload, err := rlp.EncodeToBytes(b.ExecutableData)
if err != nil {
return false, err
}
Expand Down
4 changes: 3 additions & 1 deletion packages/taiko-client/driver/preconf_blocks/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,11 @@ func (s *PreconfBlockAPIServer) OnUnsafeL2Payload(
func (s *PreconfBlockAPIServer) P2PSequencerAddress() common.Address {
operatorAddress, err := s.rpc.GetPreconfWhiteListOperator(nil)
if err != nil || operatorAddress == (common.Address{}) {
log.Warn("Failed to get current preconf whitelist operator address, skip signature verification", "error", err)
log.Warn("Failed to get current preconf whitelist operator address", "error", err)
return common.Address{}
}

log.Info("Current operator address for epoch as P2P sequencer", "address", operatorAddress.Hex())

return operatorAddress
}
11 changes: 11 additions & 0 deletions packages/taiko-client/pkg/rpc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type PacayaClients struct {
ProverSet *pacayaBindings.ProverSet
ForkRouter *pacayaBindings.ForkRouter
ComposeVerifier *pacayaBindings.ComposeVerifier
PreconfWhitelist *pacayaBindings.PreconfWhitelist
ForkHeight uint64
}

Expand Down Expand Up @@ -78,6 +79,7 @@ type ClientConfig struct {
TaikoL2Address common.Address
TaikoTokenAddress common.Address
ForcedInclusionStoreAddress common.Address
PreconfWhitelistAddress common.Address
GuardianProverMinorityAddress common.Address
GuardianProverMajorityAddress common.Address
ProverSetAddress common.Address
Expand Down Expand Up @@ -264,6 +266,7 @@ func (c *Client) initPacayaClients(cfg *ClientConfig) error {
proverSet *pacayaBindings.ProverSet
taikoWrapper *pacayaBindings.TaikoWrapperClient
forcedInclusionStore *pacayaBindings.ForcedInclusionStore
preconfWhitelist *pacayaBindings.PreconfWhitelist
)
if cfg.TaikoTokenAddress.Hex() != ZeroAddress.Hex() {
if taikoToken, err = pacayaBindings.NewTaikoToken(cfg.TaikoTokenAddress, c.L1); err != nil {
Expand Down Expand Up @@ -303,6 +306,13 @@ func (c *Client) initPacayaClients(cfg *ClientConfig) error {
}
}

if cfg.PreconfWhitelistAddress.Hex() != ZeroAddress.Hex() {
preconfWhitelist, err = pacayaBindings.NewPreconfWhitelist(cfg.PreconfWhitelistAddress, c.L1)
if err != nil {
return err
}
}

c.PacayaClients = &PacayaClients{
TaikoInbox: taikoInbox,
TaikoAnchor: taikoAnchor,
Expand All @@ -312,6 +322,7 @@ func (c *Client) initPacayaClients(cfg *ClientConfig) error {
TaikoWrapper: taikoWrapper,
ForcedInclusionStore: forcedInclusionStore,
ComposeVerifier: composeVerifier,
PreconfWhitelist: preconfWhitelist,
}

return nil
Expand Down
9 changes: 8 additions & 1 deletion packages/taiko-client/pkg/rpc/methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -1109,7 +1109,14 @@ func (c *Client) GetProofVerifierPacaya(opts *bind.CallOpts) (common.Address, er

// GetPreconfWhiteListOperator resolves the current preconf whitelist operator address.
func (c *Client) GetPreconfWhiteListOperator(opts *bind.CallOpts) (common.Address, error) {
return common.Address{}, nil
var cancel context.CancelFunc
if opts == nil {
opts = &bind.CallOpts{Context: context.Background()}
}
opts.Context, cancel = CtxWithTimeoutOrDefault(opts.Context, defaultTimeout)
defer cancel()

return c.PacayaClients.PreconfWhitelist.GetOperatorForCurrentEpoch(opts)
}

// GetLastVerifiedTransitionPacaya gets the last verified transition from TaikoInbox contract.
Expand Down