diff --git a/packages/taiko-client/bindings/encoding/protocol_config.go b/packages/taiko-client/bindings/encoding/protocol_config.go deleted file mode 100644 index 037233a3f5..0000000000 --- a/packages/taiko-client/bindings/encoding/protocol_config.go +++ /dev/null @@ -1,79 +0,0 @@ -package encoding - -import ( - "math/big" - - "github.com/ethereum/go-ethereum/params" - - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings" -) - -var ( - livenessBond, _ = new(big.Int).SetString("125000000000000000000", 10) - InternlDevnetProtocolConfig = &bindings.TaikoDataConfig{ - ChainId: params.TaikoInternalL2ANetworkID.Uint64(), - BlockMaxProposals: 324_000, - BlockRingBufferSize: 360_000, - MaxBlocksToVerify: 16, - BlockMaxGasLimit: 240_000_000, - LivenessBond: livenessBond, - StateRootSyncInternal: 16, - MaxAnchorHeightOffset: 64, - OntakeForkHeight: 0, - BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ - AdjustmentQuotient: 8, - SharingPctg: 75, - GasIssuancePerSecond: 5_000_000, - MinGasExcess: 1_340_000_000, - MaxGasIssuancePerBlock: 600_000_000, - }, - } - HeklaProtocolConfig = &bindings.TaikoDataConfig{ - ChainId: params.HeklaNetworkID.Uint64(), - BlockMaxProposals: 324_000, - BlockRingBufferSize: 324_512, - MaxBlocksToVerify: 16, - BlockMaxGasLimit: 240_000_000, - LivenessBond: livenessBond, - StateRootSyncInternal: 16, - MaxAnchorHeightOffset: 64, - OntakeForkHeight: 840_512, - BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ - AdjustmentQuotient: 8, - SharingPctg: 75, - GasIssuancePerSecond: 5_000_000, - MinGasExcess: 1_340_000_000, - MaxGasIssuancePerBlock: 600_000_000, - }, - } - MainnetProtocolConfig = &bindings.TaikoDataConfig{ - ChainId: params.TaikoMainnetNetworkID.Uint64(), - BlockMaxProposals: 324_000, - BlockRingBufferSize: 360_000, - MaxBlocksToVerify: 16, - BlockMaxGasLimit: 240_000_000, - LivenessBond: livenessBond, - StateRootSyncInternal: 16, - MaxAnchorHeightOffset: 64, - OntakeForkHeight: 538_304, - BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ - AdjustmentQuotient: 8, - SharingPctg: 75, - GasIssuancePerSecond: 5_000_000, - MinGasExcess: 1_340_000_000, - MaxGasIssuancePerBlock: 600_000_000, - }, - } -) - -// GetProtocolConfig returns the protocol config for the given chain ID. -func GetProtocolConfig(chainID uint64) *bindings.TaikoDataConfig { - switch chainID { - case params.HeklaNetworkID.Uint64(): - return HeklaProtocolConfig - case params.TaikoMainnetNetworkID.Uint64(): - return MainnetProtocolConfig - default: - return InternlDevnetProtocolConfig - } -} diff --git a/packages/taiko-client/driver/chain_syncer/blob/syncer.go b/packages/taiko-client/driver/chain_syncer/blob/syncer.go index 53a49961a0..8320eb60c0 100644 --- a/packages/taiko-client/driver/chain_syncer/blob/syncer.go +++ b/packages/taiko-client/driver/chain_syncer/blob/syncer.go @@ -21,7 +21,6 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/metadata" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/chain_syncer/beaconsync" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/state" @@ -66,6 +65,11 @@ func NewSyncer( return nil, fmt.Errorf("failed to initialize anchor constructor: %w", err) } + protocolConfigs, err := rpc.GetProtocolConfigs(client.TaikoL1, &bind.CallOpts{Context: ctx}) + if err != nil { + return nil, err + } + return &Syncer{ ctx: ctx, rpc: client, @@ -73,7 +77,7 @@ func NewSyncer( progressTracker: progressTracker, anchorConstructor: constructor, txListDecompressor: txListDecompressor.NewTxListDecompressor( - uint64(encoding.GetProtocolConfig(client.L2.ChainID.Uint64()).BlockMaxGasLimit), + uint64(protocolConfigs.BlockMaxGasLimit), rpc.BlockMaxTxListBytes, client.L2.ChainID, ), diff --git a/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go b/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go index 7c9c654624..2c622d88dd 100644 --- a/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go +++ b/packages/taiko-client/driver/chain_syncer/blob/syncer_test.go @@ -15,7 +15,6 @@ import ( "github.com/stretchr/testify/suite" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/metadata" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/chain_syncer/beaconsync" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/state" @@ -162,8 +161,11 @@ func (s *BlobSyncerTestSuite) TestTreasuryIncome() { s.Greater(headAfter, headBefore) s.True(balanceAfter.Cmp(balance) > 0) + protocolConfigs, err := rpc.GetProtocolConfigs(s.RPCClient.TaikoL1, nil) + s.Nil(err) + var hasNoneAnchorTxs bool - chainConfig := config.NewChainConfig(encoding.GetProtocolConfig(s.RPCClient.L2.ChainID.Uint64())) + chainConfig := config.NewChainConfig(&protocolConfigs) for i := headBefore + 1; i <= headAfter; i++ { block, err := s.RPCClient.L2.BlockByNumber(context.Background(), new(big.Int).SetUint64(i)) s.Nil(err) diff --git a/packages/taiko-client/driver/driver.go b/packages/taiko-client/driver/driver.go index 51967df1d9..a5990139dc 100644 --- a/packages/taiko-client/driver/driver.go +++ b/packages/taiko-client/driver/driver.go @@ -15,7 +15,6 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" chainSyncer "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/chain_syncer" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/state" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" @@ -174,9 +173,15 @@ func (d *Driver) ChainSyncer() *chainSyncer.L2ChainSyncer { // reportProtocolStatus reports some protocol status intervally. func (d *Driver) reportProtocolStatus() { + protocolConfigs, err := rpc.GetProtocolConfigs(d.rpc.TaikoL1, &bind.CallOpts{Context: d.ctx}) + if err != nil { + log.Error("Failed to get protocol configs", "error", err) + return + } + var ( ticker = time.NewTicker(protocolStatusReportInterval) - maxNumBlocks = encoding.GetProtocolConfig(d.rpc.L2.ChainID.Uint64()).BlockMaxProposals + maxNumBlocks = protocolConfigs.BlockMaxProposals ) d.wg.Add(1) diff --git a/packages/taiko-client/driver/state/state.go b/packages/taiko-client/driver/state/state.go index 3f27585bcf..0efcc2ad91 100644 --- a/packages/taiko-client/driver/state/state.go +++ b/packages/taiko-client/driver/state/state.go @@ -6,8 +6,6 @@ import ( "sync" "sync/atomic" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -64,10 +62,15 @@ func (s *State) init(ctx context.Context) error { return err } + protocolConfigs, err := rpc.GetProtocolConfigs(s.rpc.TaikoL1, &bind.CallOpts{Context: ctx}) + if err != nil { + return err + } + s.GenesisL1Height = new(big.Int).SetUint64(stateVars.A.GenesisHeight) - log.Info("Genesis L1 height", "height", stateVars.A.GenesisHeight) + s.OnTakeForkHeight = new(big.Int).SetUint64(protocolConfigs.OntakeForkHeight) - s.OnTakeForkHeight = new(big.Int).SetUint64(encoding.GetProtocolConfig(s.rpc.L2.ChainID.Uint64()).OntakeForkHeight) + log.Info("Genesis L1 height", "height", stateVars.A.GenesisHeight) log.Info("OnTake fork height", "height", s.OnTakeForkHeight) // Set the L2 head's latest known L1 origin as current L1 sync cursor. diff --git a/packages/taiko-client/internal/testutils/helper.go b/packages/taiko-client/internal/testutils/helper.go index c163953b13..873f5ad74a 100644 --- a/packages/taiko-client/internal/testutils/helper.go +++ b/packages/taiko-client/internal/testutils/helper.go @@ -17,7 +17,6 @@ import ( "github.com/phayes/freeport" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/metadata" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" ) @@ -202,12 +201,15 @@ func (s *ClientTestSuite) ProposeValidBlock( ontakeForkHeight, err := s.RPCClient.TaikoL2.OntakeForkHeight(nil) s.Nil(err) + protocolConfigs, err := rpc.GetProtocolConfigs(s.RPCClient.TaikoL1, nil) + s.Nil(err) + baseFee, err := s.RPCClient.CalculateBaseFee( context.Background(), l2Head, l1Head.Number, l2Head.Number.Uint64()+1 >= ontakeForkHeight, - &encoding.InternlDevnetProtocolConfig.BaseFeeConfig, + &protocolConfigs.BaseFeeConfig, l1Head.Time, ) s.Nil(err) diff --git a/packages/taiko-client/pkg/rpc/methods.go b/packages/taiko-client/pkg/rpc/methods.go index 7a747c419e..35a96b6f2b 100644 --- a/packages/taiko-client/pkg/rpc/methods.go +++ b/packages/taiko-client/pkg/rpc/methods.go @@ -58,8 +58,13 @@ func (c *Client) ensureGenesisMatched(ctx context.Context) error { } ) + protocolConfigs, err := GetProtocolConfigs(c.TaikoL1, &bind.CallOpts{Context: ctxWithTimeout}) + if err != nil { + return err + } + // If chain actives ontake fork from genesis, we need to fetch the genesis block hash from `BlockVerifiedV2` event. - if encoding.GetProtocolConfig(c.L2.ChainID.Uint64()).OntakeForkHeight == 0 { + if protocolConfigs.OntakeForkHeight == 0 { // Fetch the genesis `BlockVerified2` event. iter, err := c.TaikoL1.FilterBlockVerifiedV2(filterOpts, []*big.Int{common.Big0}, nil) if err != nil { diff --git a/packages/taiko-client/pkg/rpc/utils.go b/packages/taiko-client/pkg/rpc/utils.go index 191f2ed0da..78f35b6202 100644 --- a/packages/taiko-client/pkg/rpc/utils.go +++ b/packages/taiko-client/pkg/rpc/utils.go @@ -33,6 +33,21 @@ var ( } ) +// GetProtocolConfigs gets the protocol configs from TaikoL1 contract. +func GetProtocolConfigs( + taikoL1Client *bindings.TaikoL1Client, + opts *bind.CallOpts, +) (bindings.TaikoDataConfig, error) { + var cancel context.CancelFunc + if opts == nil { + opts = &bind.CallOpts{Context: context.Background()} + } + opts.Context, cancel = CtxWithTimeoutOrDefault(opts.Context, defaultTimeout) + defer cancel() + + return taikoL1Client.GetConfig(opts) +} + // GetProtocolStateVariables gets the protocol states from TaikoL1 contract. func GetProtocolStateVariables( taikoL1Client *bindings.TaikoL1Client, diff --git a/packages/taiko-client/proposer/proposer.go b/packages/taiko-client/proposer/proposer.go index 171bcdb740..c57edf632d 100644 --- a/packages/taiko-client/proposer/proposer.go +++ b/packages/taiko-client/proposer/proposer.go @@ -85,8 +85,11 @@ func (p *Proposer) InitFromConfig( } // Protocol configs - p.protocolConfigs = encoding.GetProtocolConfig(p.rpc.L2.ChainID.Uint64()) - + protocolConfigs, err := rpc.GetProtocolConfigs(p.rpc.TaikoL1, &bind.CallOpts{Context: p.ctx}) + if err != nil { + return fmt.Errorf("failed to get protocol configs: %w", err) + } + p.protocolConfigs = &protocolConfigs log.Info("Protocol configs", "configs", p.protocolConfigs) if txMgr == nil { diff --git a/packages/taiko-client/proposer/transaction_builder/common_test.go b/packages/taiko-client/proposer/transaction_builder/common_test.go index a65e0a7c40..ec0bf0584a 100644 --- a/packages/taiko-client/proposer/transaction_builder/common_test.go +++ b/packages/taiko-client/proposer/transaction_builder/common_test.go @@ -10,9 +10,9 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/suite" - "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/testutils" "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/config" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" ) type TransactionBuilderTestSuite struct { @@ -27,8 +27,10 @@ func (s *TransactionBuilderTestSuite) SetupTest() { l1ProposerPrivKey, err := crypto.ToECDSA(common.FromHex(os.Getenv("L1_PROPOSER_PRIVATE_KEY"))) s.Nil(err) - protocolConfig := encoding.GetProtocolConfig(s.RPCClient.L2.ChainID.Uint64()) - chainConfig := config.NewChainConfig(protocolConfig) + protocolConfigs, err := rpc.GetProtocolConfigs(s.RPCClient.TaikoL1, nil) + s.Nil(err) + + chainConfig := config.NewChainConfig(&protocolConfigs) s.calldataTxBuilder = NewCalldataTransactionBuilder( s.RPCClient, diff --git a/packages/taiko-client/prover/prover.go b/packages/taiko-client/prover/prover.go index 36d7985465..3edc8f3636 100644 --- a/packages/taiko-client/prover/prover.go +++ b/packages/taiko-client/prover/prover.go @@ -44,7 +44,7 @@ type Prover struct { guardianProverHeartbeater guardianProverHeartbeater.BlockSenderHeartbeater // Contract configurations - protocolConfig *bindings.TaikoDataConfig + protocolConfigs *bindings.TaikoDataConfig // States sharedState *state.SharedState @@ -121,10 +121,14 @@ func InitFromConfig( } // Configs - p.protocolConfig = encoding.GetProtocolConfig(p.rpc.L2.ChainID.Uint64()) - log.Info("Protocol configs", "configs", p.protocolConfig) + protocolConfigs, err := rpc.GetProtocolConfigs(p.rpc.TaikoL1, &bind.CallOpts{Context: p.ctx}) + if err != nil { + return fmt.Errorf("failed to get protocol configs: %w", err) + } + p.protocolConfigs = &protocolConfigs + log.Info("Protocol configs", "configs", p.protocolConfigs) - chBufferSize := p.protocolConfig.BlockMaxProposals + chBufferSize := p.protocolConfigs.BlockMaxProposals p.proofGenerationCh = make(chan *proofProducer.ProofWithHeader, chBufferSize) p.assignmentExpiredCh = make(chan metadata.TaikoBlockMetaData, chBufferSize) p.proofSubmissionCh = make(chan *proofProducer.ProofRequestBody, p.cfg.Capacity) @@ -280,7 +284,7 @@ func (p *Prover) eventLoop() { defer forceProvingTicker.Stop() // Channels - chBufferSize := p.protocolConfig.BlockMaxProposals + chBufferSize := p.protocolConfigs.BlockMaxProposals blockProposedCh := make(chan *bindings.TaikoL1ClientBlockProposed, chBufferSize) blockVerifiedCh := make(chan *bindings.TaikoL1ClientBlockVerified, chBufferSize) transitionProvedCh := make(chan *bindings.TaikoL1ClientTransitionProved, chBufferSize)