Skip to content

Commit

Permalink
feat: update RPC clients
Browse files Browse the repository at this point in the history
  • Loading branch information
davidtaikocha committed Jan 10, 2025
1 parent c35a54a commit 67e37d7
Showing 1 changed file with 103 additions and 40 deletions.
143 changes: 103 additions & 40 deletions packages/taiko-client/pkg/rpc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,22 +118,62 @@ func NewClient(ctx context.Context, cfg *ClientConfig) (*Client, error) {
return nil, err
}

// If not providing L2EngineEndpoint or JwtSecret, then the L2Engine client
// won't be initialized.
var l2AuthClient *EngineClient
if len(cfg.L2EngineEndpoint) != 0 && len(cfg.JwtSecret) != 0 {
l2AuthClient, err = NewJWTEngineClient(cfg.L2EngineEndpoint, cfg.JwtSecret)
if err != nil {
return nil, err
}
}

client := &Client{
L1: l1Client,
L1Beacon: l1BeaconClient,
L2: l2Client,
L2CheckPoint: l2CheckPoint,
L2Engine: l2AuthClient,
}

// Initialize all smart contract clients.
if err := client.initOntakeClients(cfg); err != nil {
return nil, err
}
if err := client.initPacayaClients(cfg); err != nil {
return nil, err
}

// Ensure that the genesis block hash of L1 and L2 match.
ctxWithTimeout, cancel := CtxWithTimeoutOrDefault(ctx, defaultTimeout)
defer cancel()
if err := client.ensureGenesisMatched(ctxWithTimeout); err != nil {
return nil, err
}

taikoL1, err := ontakeBindings.NewTaikoL1Client(cfg.TaikoL1Address, l1Client)
return client, nil
}

// initOntakeClients initializes all Ontake smart contract clients.
func (c *Client) initOntakeClients(cfg *ClientConfig) error {
taikoL1, err := ontakeBindings.NewTaikoL1Client(cfg.TaikoL1Address, c.L1)
if err != nil {
return nil, err
return err
}

libProposing, err := ontakeBindings.NewLibProposing(cfg.TaikoL1Address, l1Client)
forkManager, err := ontakeBindings.NewForkManager(cfg.TaikoL1Address, c.L1)
if err != nil {
return nil, err
return err
}

taikoL2, err := ontakeBindings.NewTaikoL2Client(cfg.TaikoL2Address, l2Client)
libProposing, err := ontakeBindings.NewLibProposing(cfg.TaikoL1Address, c.L1)
if err != nil {
return nil, err
return err
}

taikoL2, err := ontakeBindings.NewTaikoL2Client(cfg.TaikoL2Address, c.L2)
if err != nil {
return err
}

var (
Expand All @@ -143,62 +183,85 @@ func NewClient(ctx context.Context, cfg *ClientConfig) (*Client, error) {
proverSet *ontakeBindings.ProverSet
)
if cfg.TaikoTokenAddress.Hex() != ZeroAddress.Hex() {
if taikoToken, err = ontakeBindings.NewTaikoToken(cfg.TaikoTokenAddress, l1Client); err != nil {
return nil, err
if taikoToken, err = ontakeBindings.NewTaikoToken(cfg.TaikoTokenAddress, c.L1); err != nil {
return err
}
}
if cfg.GuardianProverMinorityAddress.Hex() != ZeroAddress.Hex() {
if guardianProverMinority, err = ontakeBindings.NewGuardianProver(
cfg.GuardianProverMinorityAddress,
l1Client,
c.L1,
); err != nil {
return nil, err
return err
}
}
if cfg.GuardianProverMajorityAddress.Hex() != ZeroAddress.Hex() {
if guardianProverMajority, err = ontakeBindings.NewGuardianProver(
cfg.GuardianProverMajorityAddress,
l1Client,
c.L1,
); err != nil {
return nil, err
return err
}
}
if cfg.ProverSetAddress.Hex() != ZeroAddress.Hex() {
if proverSet, err = ontakeBindings.NewProverSet(cfg.ProverSetAddress, l1Client); err != nil {
return nil, err
if proverSet, err = ontakeBindings.NewProverSet(cfg.ProverSetAddress, c.L1); err != nil {
return err
}
}

// If not providing L2EngineEndpoint or JwtSecret, then the L2Engine client
// won't be initialized.
var l2AuthClient *EngineClient
if len(cfg.L2EngineEndpoint) != 0 && len(cfg.JwtSecret) != 0 {
l2AuthClient, err = NewJWTEngineClient(cfg.L2EngineEndpoint, cfg.JwtSecret)
if err != nil {
return nil, err
}
c.OntakeClients = &OntakeClients{
TaikoL1: taikoL1,
LibProposing: libProposing,
TaikoL2: taikoL2,
TaikoToken: taikoToken,
GuardianProverMajority: guardianProverMajority,
GuardianProverMinority: guardianProverMinority,
ProverSet: proverSet,
ForkManager: forkManager,
}

client := &Client{
L1: l1Client,
L1Beacon: l1BeaconClient,
L2: l2Client,
L2CheckPoint: l2CheckPoint,
L2Engine: l2AuthClient,
OntakeClients: &OntakeClients{
TaikoL1: taikoL1,
LibProposing: libProposing,
TaikoL2: taikoL2,
TaikoToken: taikoToken,
GuardianProverMajority: guardianProverMajority,
GuardianProverMinority: guardianProverMinority,
ProverSet: proverSet,
},
return nil
}

// initPacayaClients initializes all Pacaya smart contract clients.
func (c *Client) initPacayaClients(cfg *ClientConfig) error {
taikoInbox, err := pacayaBindings.NewTaikoInboxClient(cfg.TaikoL1Address, c.L1)
if err != nil {
return err
}

if err := client.ensureGenesisMatched(ctxWithTimeout); err != nil {
return nil, err
forkManager, err := pacayaBindings.NewForkManager(cfg.TaikoL1Address, c.L1)
if err != nil {
return err
}

return client, nil
taikoAnchor, err := pacayaBindings.NewTaikoAnchorClient(cfg.TaikoL2Address, c.L2)
if err != nil {
return err
}

var (
taikoToken *pacayaBindings.TaikoToken
proverSet *pacayaBindings.ProverSet
)
if cfg.TaikoTokenAddress.Hex() != ZeroAddress.Hex() {
if taikoToken, err = pacayaBindings.NewTaikoToken(cfg.TaikoTokenAddress, c.L1); err != nil {
return err
}
}
if cfg.ProverSetAddress.Hex() != ZeroAddress.Hex() {
if proverSet, err = pacayaBindings.NewProverSet(cfg.ProverSetAddress, c.L1); err != nil {
return err
}
}

c.PacayaClients = &PacayaClients{
TaikoInbox: taikoInbox,
TaikoAnchor: taikoAnchor,
TaikoToken: taikoToken,
ProverSet: proverSet,
ForkManager: forkManager,
}

return nil
}

0 comments on commit 67e37d7

Please sign in to comment.