Skip to content

Commit

Permalink
feat: remove sequence sender (#69)
Browse files Browse the repository at this point in the history
Signed-off-by: Arpit Temani <[email protected]>
Co-authored-by: Stefan Negovanović <[email protected]>
  • Loading branch information
temaniarpit27 and Stefan-Ethernal authored Dec 27, 2024
1 parent 6b05a41 commit a80df0e
Show file tree
Hide file tree
Showing 71 changed files with 12 additions and 9,793 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ coverage.out
coverage.html
.idea
.idea/*

build/*
data
4 changes: 0 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,6 @@ stop: ## Stops all services
test-unit:
trap '$(STOP)' EXIT; MallocNanoZone=0 go test -count=1 -short -race -p 1 -covermode=atomic -coverprofile=coverage.out -coverpkg ./... -timeout 15m ./...

.PHONY: test-seq_sender
test-seq_sender:
trap '$(STOP)' EXIT; MallocNanoZone=0 go test -count=1 -short -race -p 1 -covermode=atomic -coverprofile=../coverage.out -timeout 200s ./sequencesender/...

.PHONY: lint
lint: ## Runs the linter
export "GOROOT=$$(go env GOROOT)" && $$(go env GOPATH)/bin/golangci-lint run --timeout 5m
Expand Down
176 changes: 0 additions & 176 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,13 @@ package main

import (
"context"
"crypto/ecdsa"
"fmt"
"math/big"
"os"
"os/signal"
"runtime"

dataCommitteeClient "github.com/0xPolygon/cdk-data-availability/client"
jRPC "github.com/0xPolygon/cdk-rpc/rpc"
ethtxman "github.com/0xPolygon/zkevm-ethtx-manager/etherman"
"github.com/0xPolygon/zkevm-ethtx-manager/etherman/etherscan"
"github.com/0xPolygon/zkevm-ethtx-manager/ethtxmanager"
ethtxlog "github.com/0xPolygon/zkevm-ethtx-manager/log"
"github.com/agglayer/aggkit"
Expand All @@ -26,19 +22,13 @@ import (
"github.com/agglayer/aggkit/claimsponsor"
aggkitcommon "github.com/agglayer/aggkit/common"
"github.com/agglayer/aggkit/config"
"github.com/agglayer/aggkit/dataavailability"
"github.com/agglayer/aggkit/dataavailability/datacommittee"
"github.com/agglayer/aggkit/etherman"
ethermanconfig "github.com/agglayer/aggkit/etherman/config"
"github.com/agglayer/aggkit/etherman/contracts"
"github.com/agglayer/aggkit/l1infotreesync"
"github.com/agglayer/aggkit/lastgersync"
"github.com/agglayer/aggkit/log"
"github.com/agglayer/aggkit/reorgdetector"
"github.com/agglayer/aggkit/rpc"
"github.com/agglayer/aggkit/sequencesender"
"github.com/agglayer/aggkit/sequencesender/txbuilder"
"github.com/agglayer/aggkit/translator"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/urfave/cli/v2"
)
Expand Down Expand Up @@ -88,12 +78,6 @@ func start(cliCtx *cli.Context) error {
var rpcServices []jRPC.Service
for _, component := range components {
switch component {
case aggkitcommon.SEQUENCE_SENDER:
cfg.SequenceSender.Log = cfg.Log
seqSender := createSequenceSender(*cfg, l1Client, l1InfoTreeSync)
// start sequence sender in a goroutine, checking for errors
go seqSender.Start(cliCtx.Context)

case aggkitcommon.AGGREGATOR:
aggregator := createAggregator(cliCtx.Context, *cfg, !cliCtx.Bool(config.FlagMigrations))
// start aggregator in a goroutine, checking for errors
Expand Down Expand Up @@ -213,118 +197,6 @@ func createAggregator(ctx context.Context, c config.Config, runMigrations bool)
return aggregator
}

func createSequenceSender(
cfg config.Config,
l1Client *ethclient.Client,
l1InfoTreeSync *l1infotreesync.L1InfoTreeSync,
) *sequencesender.SequenceSender {
logger := log.WithFields("module", aggkitcommon.SEQUENCE_SENDER)

// Check config
if cfg.SequenceSender.RPCURL == "" {
logger.Fatal("Required field RPCURL is empty in sequence sender config")
}

ethman, err := etherman.NewClient(ethermanconfig.Config{
EthermanConfig: ethtxman.Config{
URL: cfg.SequenceSender.EthTxManager.Etherman.URL,
MultiGasProvider: cfg.SequenceSender.EthTxManager.Etherman.MultiGasProvider,
L1ChainID: cfg.SequenceSender.EthTxManager.Etherman.L1ChainID,
Etherscan: etherscan.Config{
ApiKey: cfg.SequenceSender.EthTxManager.Etherman.Etherscan.ApiKey,
Url: cfg.SequenceSender.EthTxManager.Etherman.Etherscan.Url,
},
HTTPHeaders: cfg.SequenceSender.EthTxManager.Etherman.HTTPHeaders,
},
}, cfg.NetworkConfig.L1Config, cfg.Common)
if err != nil {
logger.Fatalf("Failed to create etherman. Err: %w, ", err)
}

auth, _, err := ethman.LoadAuthFromKeyStore(cfg.SequenceSender.PrivateKey.Path, cfg.SequenceSender.PrivateKey.Password)
if err != nil {
logger.Fatal(err)
}
cfg.SequenceSender.SenderAddress = auth.From
blockFinalityType := etherman.BlockNumberFinality(cfg.SequenceSender.BlockFinality)

blockFinality, err := blockFinalityType.ToBlockNum()
if err != nil {
logger.Fatalf("Failed to create block finality. Err: %w, ", err)
}
txBuilder, err := newTxBuilder(cfg, logger, ethman, l1Client, l1InfoTreeSync, blockFinality)
if err != nil {
logger.Fatal(err)
}
seqSender, err := sequencesender.New(cfg.SequenceSender, logger, ethman, txBuilder)
if err != nil {
logger.Fatal(err)
}

return seqSender
}

func newTxBuilder(
cfg config.Config,
logger *log.Logger,
ethman *etherman.Client,
l1Client *ethclient.Client,
l1InfoTreeSync *l1infotreesync.L1InfoTreeSync,
blockFinality *big.Int,
) (txbuilder.TxBuilder, error) {
auth, _, err := ethman.LoadAuthFromKeyStore(cfg.SequenceSender.PrivateKey.Path, cfg.SequenceSender.PrivateKey.Password)
if err != nil {
log.Fatal(err)
}
da, err := newDataAvailability(cfg, ethman)
if err != nil {
log.Fatal(err)
}
var txBuilder txbuilder.TxBuilder

switch contracts.VersionType(cfg.Common.ContractVersions) {
case contracts.VersionBanana:
if cfg.Common.IsValidiumMode {
txBuilder = txbuilder.NewTxBuilderBananaValidium(
logger,
ethman.Contracts.Banana.Rollup,
ethman.Contracts.Banana.GlobalExitRoot,
da,
*auth,
cfg.SequenceSender.MaxBatchesForL1,
l1InfoTreeSync,
l1Client,
blockFinality,
)
} else {
txBuilder = txbuilder.NewTxBuilderBananaZKEVM(
logger,
ethman.Contracts.Banana.Rollup,
ethman.Contracts.Banana.GlobalExitRoot,
*auth,
cfg.SequenceSender.MaxTxSizeForL1,
l1InfoTreeSync,
l1Client,
blockFinality,
)
}
case contracts.VersionElderberry:
if cfg.Common.IsValidiumMode {
txBuilder = txbuilder.NewTxBuilderElderberryValidium(
logger, ethman.Contracts.Elderberry.Rollup, da, *auth, cfg.SequenceSender.MaxBatchesForL1,
)
} else {
txBuilder = txbuilder.NewTxBuilderElderberryZKEVM(
logger, ethman.Contracts.Elderberry.Rollup, *auth, cfg.SequenceSender.MaxTxSizeForL1,
)
}
default:
err = fmt.Errorf("unknown contract version: %s", cfg.Common.ContractVersions)
}

return txBuilder, err
}

func createAggoracle(
cfg config.Config,
l1Client,
Expand Down Expand Up @@ -377,54 +249,6 @@ func createAggoracle(
return aggOracle
}

func newDataAvailability(c config.Config, etherman *etherman.Client) (*dataavailability.DataAvailability, error) {
if !c.Common.IsValidiumMode {
return nil, nil
}
logger := log.WithFields("module", "da-committee")
translator := translator.NewTranslatorImpl(logger)
logger.Infof("Translator rules: %v", c.Common.Translator)
translator.AddConfigRules(c.Common.Translator)

// Backend specific config
daProtocolName, err := etherman.GetDAProtocolName()
if err != nil {
return nil, fmt.Errorf("error getting data availability protocol name: %w", err)
}
var daBackend dataavailability.DABackender
switch daProtocolName {
case string(dataavailability.DataAvailabilityCommittee):
var (
pk *ecdsa.PrivateKey
err error
)
_, pk, err = etherman.LoadAuthFromKeyStore(c.SequenceSender.PrivateKey.Path, c.SequenceSender.PrivateKey.Password)
if err != nil {
return nil, err
}
dacAddr, err := etherman.GetDAProtocolAddr()
if err != nil {
return nil, fmt.Errorf("error getting trusted sequencer URI. Error: %w", err)
}

daBackend, err = datacommittee.New(
logger,
c.SequenceSender.EthTxManager.Etherman.URL,
dacAddr,
pk,
dataCommitteeClient.NewFactory(),
translator,
)
if err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("unexpected / unsupported DA protocol: %s", daProtocolName)
}

return dataavailability.New(daBackend)
}

func runAggregatorMigrations(dbPath string) {
runMigrations(dbPath, db.AggregatorMigrationName)
}
Expand Down
7 changes: 0 additions & 7 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"github.com/agglayer/aggkit/lastgersync"
"github.com/agglayer/aggkit/log"
"github.com/agglayer/aggkit/reorgdetector"
"github.com/agglayer/aggkit/sequencesender"
"github.com/mitchellh/mapstructure"
"github.com/pelletier/go-toml/v2"
"github.com/spf13/viper"
Expand Down Expand Up @@ -103,10 +102,6 @@ type DeprecatedField struct {

var (
deprecatedFieldsOnConfig = []DeprecatedField{
{
FieldNamePattern: "sequencesender.ethtxmanager.persistencefilename",
Reason: deprecatedFieldPersistenceFilename,
},
{
FieldNamePattern: "aggregator.synchronizer.db.",
Reason: deprecatedFieldSyncDB,
Expand Down Expand Up @@ -134,8 +129,6 @@ type Config struct {
Log log.Config
// Configuration of the genesis of the network. This is used to known the initial state of the network
NetworkConfig NetworkConfig
// Configuration of the sequence sender service
SequenceSender sequencesender.Config
// Common Config that affects all the services
Common common.Config
// Configuration of the reorg detector service to be used for the L1
Expand Down
7 changes: 1 addition & 6 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func TestLoadDefaultConfig(t *testing.T) {
}

const configWithDeprecatedFields = `
[SequenceSender.EthTxManager]
[Aggregator.EthTxManager]
nodepretatedfield = "value2"
persistencefilename = "value"
`
Expand Down Expand Up @@ -127,11 +127,6 @@ func TestLoadConfigWithForbiddenFields(t *testing.T) {
input: `[Aggregator.Synchronizer.DB]
name = "value"`,
},
{
name: "[SequenceSender.EthTxManager] PersistenceFilename",
input: `[SequenceSender.EthTxManager]
PersistenceFilename = "foo.json"`,
},
}

for _, c := range cases {
Expand Down
36 changes: 1 addition & 35 deletions config/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,40 +77,6 @@ NetworkID = 1
IsValidiumMode = {{IsValidiumMode}}
ContractVersions = "{{ContractVersions}}"
[SequenceSender]
WaitPeriodSendSequence = "15s"
LastBatchVirtualizationTimeMaxWaitPeriod = "10s"
L1BlockTimestampMargin = "30s"
MaxTxSizeForL1 = 131072
L2Coinbase = "{{L2Coinbase}}"
PrivateKey = { Path = "{{SequencerPrivateKeyPath}}", Password = "{{SequencerPrivateKeyPassword}}"}
SequencesTxFileName = "sequencesender.json"
GasOffset = 80000
WaitPeriodPurgeTxFile = "15m"
MaxPendingTx = 1
MaxBatchesForL1 = 300
BlockFinality = "FinalizedBlock"
RPCURL = "{{L2URL}}"
GetBatchWaitInterval = "10s"
[SequenceSender.EthTxManager]
FrequencyToMonitorTxs = "1s"
WaitTxToBeMined = "2m"
GetReceiptMaxTime = "250ms"
GetReceiptWaitInterval = "1s"
PrivateKeys = [
{Path = "{{SequencerPrivateKeyPath}}", Password = "{{SequencerPrivateKeyPassword}}"},
]
ForcedGas = 0
GasPriceMarginFactor = 1
MaxGasPriceLimit = 0
StoragePath = "ethtxmanager.sqlite"
ReadPendingL1Txs = false
SafeStatusL1NumberOfBlocks = 0
FinalizedStatusL1NumberOfBlocks = 0
[SequenceSender.EthTxManager.Etherman]
URL = "{{L1URL}}"
MultiGasProvider = false
L1ChainID = {{NetworkConfig.L1.L1ChainID}}
[Aggregator]
# GRPC server host
Host = "0.0.0.0"
Expand Down Expand Up @@ -239,7 +205,7 @@ WaitPeriodNextGER="100ms"
ForcedGas = 0
GasPriceMarginFactor = 1
MaxGasPriceLimit = 0
StoragePath = "{{PathRWData}}/ethtxmanager-sequencesender.sqlite"
StoragePath = "{{PathRWData}}/ethtxmanager-aggoracle.sqlite"
ReadPendingL1Txs = false
SafeStatusL1NumberOfBlocks = 5
FinalizedStatusL1NumberOfBlocks = 10
Expand Down
5 changes: 0 additions & 5 deletions crates/aggkit-config/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,9 @@ pub(crate) mod aggregator;
pub(crate) mod l1;
pub mod log;
pub(crate) mod network_config;
pub(crate) mod sequence_sender;
pub(crate) mod telemetry;

pub use log::Log;
use sequence_sender::SequenceSender;

/// The Agglayer configuration.
#[derive(Deserialize, Debug)]
Expand All @@ -32,7 +30,4 @@ pub struct Config {

#[serde(rename = "Aggregator", default)]
pub aggregator: aggregator::Aggregator,

#[serde(rename = "SequenceSender", default)]
pub sequence_sender: SequenceSender,
}
Loading

0 comments on commit a80df0e

Please sign in to comment.