From 005e04cac27c0b4f5f3b99bb716de0bb2c18867c Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:18:43 +0200 Subject: [PATCH 1/6] feat: add banana validium --- config/config_test.go | 4 +- config/default.go | 2 +- etherman/etherman.go | 8 +- etherman/sequence_batches_decode_banana.go | 93 ++++++++++ ...sequence_batches_decode_banana_validium.go | 164 ++++++++++++++++++ ...nce_batches_decode_banana_validium_test.go | 5 + etherman/types.go | 10 +- go.mod | 1 + go.sum | 2 + .../banana/processor_l1_sequence_batches.go | 69 ++++++++ synchronizer/actions/banana/types.go | 20 +++ .../processor_l1_sequence_batches.go | 2 +- synchronizer/actions/forksids.go | 3 + synchronizer/internal/synchronizer_impl.go | 2 + translator/config.go | 2 +- 15 files changed, 381 insertions(+), 6 deletions(-) create mode 100644 etherman/sequence_batches_decode_banana.go create mode 100644 etherman/sequence_batches_decode_banana_validium.go create mode 100644 etherman/sequence_batches_decode_banana_validium_test.go create mode 100644 synchronizer/actions/banana/processor_l1_sequence_batches.go create mode 100644 synchronizer/actions/banana/types.go diff --git a/config/config_test.go b/config/config_test.go index 5e631ba..b66a5de 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -60,6 +60,8 @@ func TestLoadConfigCommentedUnknownFieldOk(t *testing.T) { } func TestLoadConfigValdiumTranslatorOk(t *testing.T) { fileExtension := "toml" - _, err := config.LoadFileFromString(string(ConfigFileValidiumTranslatorTest), fileExtension) + cfg, err := config.LoadFileFromString(string(ConfigFileValidiumTranslatorTest), fileExtension) require.NoError(t, err) + require.NotNil(t, cfg) + require.Equal(t, 3, len(cfg.Etherman.Validium.Translator.FullMatchRules)) } diff --git a/config/default.go b/config/default.go index aff2381..ab5d680 100644 --- a/config/default.go +++ b/config/default.go @@ -35,7 +35,7 @@ const DefaultValues = ` RetryOnDACErrorInterval = "1m" DataSourcePriority = ["trusted", "external"] [Etherman.Validium.Translator] - FullMatchRules = [] + FullMatchRules = [{Old="http://zkevm-dac-001:8484", New="http://127.0.0.1:32794"}] [Etherman.Validium.RateLimit] NumRequests = 900 Interval = "1s" diff --git a/etherman/etherman.go b/etherman/etherman.go index 0e0187b..de85073 100644 --- a/etherman/etherman.go +++ b/etherman/etherman.go @@ -262,7 +262,13 @@ func NewClient(cfg Config) (*Client, error) { log.Errorf("error creating NewDecodeSequenceBatchesElderberryValidium client. Error: %w", err) return nil, err } - batchDecoders = append(batchDecoders, decodeEtrogValidium, decodeElderberryValidium) + + decodeBananaValidium, err := NewSequenceBatchesDecoderBananaValidium(validium.DataAvailabilityClient) + if err != nil { + log.Errorf("error creating NewSequenceBatchesDecoderBananaValidium client. Error: %w", err) + return nil, err + } + batchDecoders = append(batchDecoders, decodeEtrogValidium, decodeElderberryValidium, decodeBananaValidium) } client := &Client{ EthClient: ethClient, diff --git a/etherman/sequence_batches_decode_banana.go b/etherman/sequence_batches_decode_banana.go new file mode 100644 index 0000000..9bb4185 --- /dev/null +++ b/etherman/sequence_batches_decode_banana.go @@ -0,0 +1,93 @@ +package etherman + +import ( + "fmt" + + "github.com/0xPolygon/cdk-contracts-tooling/contracts/banana/polygonvalidiumetrog" + "github.com/ethereum/go-ethereum/common" +) + +var ( + /* + struct BatchData { + bytes transactions; + bytes32 forcedGlobalExitRoot; + uint64 forcedTimestamp; + bytes32 forcedBlockHashL1; + } + + function sequenceBatches( + BatchData[] calldata batches, + uint32 indexL1InfoRoot, + uint64 maxSequenceTimestamp, + bytes32 expectedFinalAccInputHash, + address l2Coinbase + ) + b910e0f97e3128707f02262ec5c90481c982744e80bd892a4449261f745e95d0 + sequenceBatches((bytes,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address) + + */ + methodIDSequenceBatchesBanana = []byte{0xdb, 0x5b, 0x0e, 0xd7} // 165e8a8d sequenceBatches((bytes,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address) + methodIDSequenceBatchesBananaName = "sequenceBatchesBanana" +) + +type DecodeSequenceBatchesDecodeBanana struct { + SequenceBatchesBase +} + +func NewDecodeSequenceBatchesDecodeBanana() (*DecodeSequenceBatchesDecodeBanana, error) { + base, err := NewSequenceBatchesBase(methodIDSequenceBatchesBanana, methodIDSequenceBatchesBananaName, polygonvalidiumetrog.PolygonvalidiumetrogABI) + if err != nil { + return nil, err + } + return &DecodeSequenceBatchesDecodeBanana{*base}, nil +} + +func (s *DecodeSequenceBatchesDecodeBanana) DecodeSequenceBatches(txData []byte, lastBatchNumber uint64, sequencer common.Address, txHash common.Hash, nonce uint64, l1InfoRoot common.Hash) ([]SequencedBatch, error) { + //decoded, err := decodeSequenceCallData(s.SmcABI(), txData) + _, err := decodeSequenceCallData(s.SmcABI(), txData) + if err != nil { + return nil, err + } + return nil, fmt.Errorf("not implemented") + /* + data := decoded.Data + bytedata := decoded.InputByteData + var sequences []polygonvalidiumetrog.PolygonRollupBaseEtrogBatchData + err = json.Unmarshal(bytedata, &sequences) + if err != nil { + return nil, err + } + maxSequenceTimestamp := data[1].(uint64) + initSequencedBatchNumber := data[2].(uint64) + coinbase := (data[3]).(common.Address) + sequencedBatches := make([]SequencedBatch, len(sequences)) + + SequencedBatchMetadata := &SequencedBatchMetadata{ + CallFunctionName: s.NameMethodID(txData[:4]), + RollupFlavor: RollupFlavorZkEVM, + ForkName: "elderberry", + } + + for i, seq := range sequences { + elderberry := SequencedBatchElderberryData{ + MaxSequenceTimestamp: maxSequenceTimestamp, + InitSequencedBatchNumber: initSequencedBatchNumber, + } + bn := lastBatchNumber - uint64(len(sequences)-(i+1)) + s := seq + sequencedBatches[i] = SequencedBatch{ + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + PolygonRollupBaseEtrogBatchData: &s, + SequencedBatchElderberryData: &elderberry, + Metadata: SequencedBatchMetadata, + } + } + return sequencedBatches, nil + */ +} diff --git a/etherman/sequence_batches_decode_banana_validium.go b/etherman/sequence_batches_decode_banana_validium.go new file mode 100644 index 0000000..c37993a --- /dev/null +++ b/etherman/sequence_batches_decode_banana_validium.go @@ -0,0 +1,164 @@ +package etherman + +import ( + "encoding/json" + "fmt" + + "github.com/0xPolygon/cdk-contracts-tooling/contracts/banana/polygonvalidiumetrog" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/dataavailability" + elderberrypolygonzkevm "github.com/0xPolygonHermez/zkevm-synchronizer-l1/etherman/smartcontracts/polygonzkevm" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" + "github.com/ethereum/go-ethereum/common" +) + +var ( + /* + // contract: v8.0.0-rc.1-fork.12 + https://github.com/0xPolygonHermez/zkevm-contracts/blob/a5eacc6e51d7456c12efcabdfc1c37457f2219b2/contracts/v2/consensus/validium/PolygonValidiumEtrog.sol#L29 + struct ValidiumBatchData { + bytes32 transactionsHash; + bytes32 forcedGlobalExitRoot; + uint64 forcedTimestamp; + bytes32 forcedBlockHashL1; + } + //https://github.com/0xPolygonHermez/zkevm-contracts/blob/a9b4f742f66bd4f3bcd98a3a188422480ffe0d4e/contracts/v2/consensus/validium/PolygonValidiumEtrog.sol#L91 + function sequenceBatchesValidium( + ValidiumBatchData[] calldata batches, + uint32 indexL1InfoRoot, + uint64 maxSequenceTimestamp, + bytes32 expectedFinalAccInputHash, + address l2Coinbase, + bytes calldata dataAvailabilityMessage + ) + 165e8a8d50cd47dabdf9bde8bf707c673d2379d465bd458693e23b75ab3a4424 + sequenceBatchesValidium((bytes32,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address,bytes) + + */ + methodIDSequenceBatchesBananaValidium = []byte{0x16, 0x5e, 0x8a, 0x8d} // 165e8a8d sequenceBatchesValidium((bytes32,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address,bytes) + methodIDSequenceBatchesBananaValidiumName = "sequenceBatchesBananaValidium" +) + +type SequenceBatchesDecoderBananaValidium struct { + SequenceBatchesBase + da dataavailability.BatchDataProvider +} + +func NewSequenceBatchesDecoderBananaValidium(da dataavailability.BatchDataProvider) (*SequenceBatchesDecoderBananaValidium, error) { + base, err := NewSequenceBatchesBase(methodIDSequenceBatchesBananaValidium, + methodIDSequenceBatchesBananaValidiumName, polygonvalidiumetrog.PolygonvalidiumetrogABI) + if err != nil { + return nil, err + } + return &SequenceBatchesDecoderBananaValidium{*base, da}, nil +} + +func (s *SequenceBatchesDecoderBananaValidium) DecodeSequenceBatches(txData []byte, lastBatchNumber uint64, sequencer common.Address, txHash common.Hash, nonce uint64, l1InfoRoot common.Hash) ([]SequencedBatch, error) { + log.Debugf("%s batchNum: %d Data:%s", methodIDSequenceBatchesBananaValidiumName, lastBatchNumber+1, common.Bytes2Hex(txData)) + if s.da == nil { + return nil, fmt.Errorf("data availability backend not set") + } + decoded, err := decodeSequenceCallData(s.SmcABI(), txData) + if err != nil { + return nil, err + } + data := decoded.Data + bytedata := decoded.InputByteData + var sequencesValidium []polygonvalidiumetrog.PolygonValidiumEtrogValidiumBatchData + err = json.Unmarshal(bytedata, &sequencesValidium) + if err != nil { + return nil, err + } + + counterL1InfoRoot := data[1].(uint32) + maxSequenceTimestamp := data[2].(uint64) + //expectedFinalAccInputHash := data[3].(common.Hash) + expectedFinalAccInputHashraw := data[3].([common.HashLength]byte) + expectedFinalAccInputHash := common.Hash(expectedFinalAccInputHashraw) + coinbase := data[4].(common.Address) + dataAvailabilityMsg := data[5].([]byte) + bananaData := BananaSequenceData{ + CounterL1InfoRoot: counterL1InfoRoot, + MaxSequenceTimestamp: maxSequenceTimestamp, + ExpectedFinalAccInputHash: expectedFinalAccInputHash, + DataAvailabilityMsg: dataAvailabilityMsg, + } + batchInfos := createBatchInfoBanana(sequencesValidium, lastBatchNumber) + + batchData, err := retrieveBatchData(s.da, batchInfos, dataAvailabilityMsg) + if err != nil { + return nil, err + } + + log.Debugf("Decoded Banana sequenceBatchesValidium: counterL1InfoRoot:%d maxSequenceTimestamp:%d expectedFinalAccInputHash:%s coinbase:%s dataAvailabilityMsg:%s", + counterL1InfoRoot, maxSequenceTimestamp, expectedFinalAccInputHash, coinbase.Hex(), dataAvailabilityMsg) + + SequencedBatchMetadata := &SequencedBatchMetadata{ + CallFunctionName: s.NameMethodID(txData[:4]), + ForkName: "banana", + RollupFlavor: RollupFlavorValidium, + } + sequencedBatches := createSequencedBatchListBanana(sequencesValidium, batchInfos, batchData, l1InfoRoot, sequencer, txHash, nonce, coinbase, maxSequenceTimestamp, SequencedBatchMetadata) + + return sequencedBatches, nil + +} + +func createBatchInfoBanana(sequencesValidium []polygonvalidiumetrog.PolygonValidiumEtrogValidiumBatchData, lastBatchNumber uint64) []batchInfo { + // Pair the batch number, hash, and if it is forced. This will allow + // retrieval from different sources, and keep them in original order. + + var batchInfos []batchInfo + for i, d := range sequencesValidium { + bn := lastBatchNumber - uint64(len(sequencesValidium)-(i+1)) + forced := d.ForcedTimestamp > 0 + h := d.TransactionsHash + batchInfos = append(batchInfos, batchInfo{num: bn, hash: h, isForced: forced}) + } + return batchInfos +} + +func createSequencedBatchListBanana(sequencesValidium []polygonvalidiumetrog.PolygonValidiumEtrogValidiumBatchData, batchInfos []batchInfo, batchData []dataavailability.BatchL2Data, + l1InfoRoot common.Hash, sequencer common.Address, txHash common.Hash, nonce uint64, coinbase common.Address, + maxSequenceTimestamp uint64, + metaData *SequencedBatchMetadata) []SequencedBatch { + sequencedBatches := make([]SequencedBatch, len(sequencesValidium)) + for i, info := range batchInfos { + bn := info.num + s := elderberrypolygonzkevm.PolygonRollupBaseEtrogBatchData{ + Transactions: batchData[i].Data, + ForcedGlobalExitRoot: sequencesValidium[i].ForcedGlobalExitRoot, + ForcedTimestamp: sequencesValidium[i].ForcedTimestamp, + ForcedBlockHashL1: sequencesValidium[i].ForcedBlockHashL1, + } + if metaData != nil { + switch batchData[i].Source { + case dataavailability.External: + metaData.SourceBatchData = SourceBatchDataValidiumDAExternal + case dataavailability.Trusted: + metaData.SourceBatchData = SourceBatchDataValidiumDATrusted + + metaData.SourceBatchData = string(batchData[i].Source) + } + } + batch := SequencedBatch{ + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + PolygonRollupBaseEtrogBatchData: &s, + Metadata: metaData, + } + + /* + elderberry := &SequencedBatchElderberryData{ + MaxSequenceTimestamp: maxSequenceTimestamp, + InitSequencedBatchNumber: initSequencedBatchNumber, + } + batch.SequencedBatchElderberryData = elderberry + */ + sequencedBatches[i] = batch + } + return sequencedBatches +} diff --git a/etherman/sequence_batches_decode_banana_validium_test.go b/etherman/sequence_batches_decode_banana_validium_test.go new file mode 100644 index 0000000..d33bd5e --- /dev/null +++ b/etherman/sequence_batches_decode_banana_validium_test.go @@ -0,0 +1,5 @@ +package etherman + +const ( + txDataBananaValidiumHex = "165e8a8d00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000066c43b8e443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b0000000000000000000000005b06837a43bdc3dd9f114558daf4b26ed49842ed00000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000003d09d1238668f9e4dd74d503f15a90c8fc230069b5ace4a3327896b50bf809db5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df729b193d68d2b455c59f7040687d4dc2d147557442aeef4c10cc5769d47ade00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014df0077a11ccf22bd14d1ec3e209ba5d8e065ce73556fdc8fb9c19b83af4ec30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a60000000000000000000000" +) diff --git a/etherman/types.go b/etherman/types.go index 5f7f6cd..d3ed8a4 100644 --- a/etherman/types.go +++ b/etherman/types.go @@ -75,6 +75,13 @@ func (s *SequencedBatchMetadata) String() string { return fmt.Sprintf("SourceBatchData: %s RollupFlavor: %s CallFunctionName: %s ForkName: %s", s.SourceBatchData, s.RollupFlavor, s.CallFunctionName, s.ForkName) } +type BananaSequenceData struct { + CounterL1InfoRoot uint32 + MaxSequenceTimestamp uint64 + ExpectedFinalAccInputHash common.Hash + DataAvailabilityMsg []byte +} + // SequencedBatch represents virtual batch type SequencedBatch struct { BatchNumber uint64 @@ -89,7 +96,8 @@ type SequencedBatch struct { *polygonzkevm.PolygonRollupBaseEtrogBatchData // Struct used in Elderberry *SequencedBatchElderberryData - Metadata *SequencedBatchMetadata + BananaData BananaSequenceData + Metadata *SequencedBatchMetadata } func (s *SequencedBatch) String() string { diff --git a/go.mod b/go.mod index 00bac66..0fc6b09 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( ) require ( + github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240819092536-5a65d4761b2f // indirect github.com/DataDog/zstd v1.5.2 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/StackExchange/wmi v1.2.1 // indirect diff --git a/go.sum b/go.sum index 2cfbfc8..54be03f 100644 --- a/go.sum +++ b/go.sum @@ -37,6 +37,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240819092536-5a65d4761b2f h1:i9oCNDG4N7ha3fNkEKbito/HF3o4gjnW6//cpTwnp8E= +github.com/0xPolygon/cdk-contracts-tooling v0.0.0-20240819092536-5a65d4761b2f/go.mod h1:mFlcEjsm2YBBsu8atHJ3zyVnwM+Z/fMXpVmIJge+WVU= github.com/0xPolygon/cdk-data-availability v0.0.7 h1:i5v2I8uEgHSZ5BjnJs3Dsy1XpKdSvfZbON9D16gSCUg= github.com/0xPolygon/cdk-data-availability v0.0.7/go.mod h1:qF+xt2gYwBab8XPh3fr6pnNUMEJq/32rmJN0D630hmY= github.com/0xPolygon/cdk-data-availability v0.0.8-0.20240712072318-72ae67613cbf h1:VWxVYeDhDURGp8pHR4kq3jwoXRazVHsQLMMIqYsO+Fw= diff --git a/synchronizer/actions/banana/processor_l1_sequence_batches.go b/synchronizer/actions/banana/processor_l1_sequence_batches.go new file mode 100644 index 0000000..788e5e8 --- /dev/null +++ b/synchronizer/actions/banana/processor_l1_sequence_batches.go @@ -0,0 +1,69 @@ +package banana + +import ( + "context" + "time" + + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/etherman" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/state/entities" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions" + "github.com/ethereum/go-ethereum/common" +) + +type ProcessorL1SequenceBatchesBanana struct { + actions.ProcessorBase[ProcessorL1SequenceBatchesBanana] + state stateOnSequencedBatchesInterface +} + +// NewProcessorL1SequenceBatchesElderberry returns instance of a processor for SequenceBatchesOrder +func NewProcessorL1SequenceBatchesBanana(state stateOnSequencedBatchesInterface) *ProcessorL1SequenceBatchesBanana { + return &ProcessorL1SequenceBatchesBanana{ + ProcessorBase: actions.ProcessorBase[ProcessorL1SequenceBatchesBanana]{ + SupportedEvent: []etherman.EventOrder{etherman.SequenceBatchesOrder}, + SupportedForkdIds: &actions.ForksIdOnlyBanana}, + state: state, + } +} + +func (g *ProcessorL1SequenceBatchesBanana) Process(ctx context.Context, forkId actions.ForkIdType, order etherman.Order, l1Block *etherman.Block, dbTx entities.Tx) error { + if l1Block == nil || len(l1Block.SequencedBatches) <= order.Pos { + return actions.ErrInvalidParams + } + + if len(l1Block.SequencedBatches[order.Pos]) == 0 { + log.Warnf("No sequenced batches for position") + return nil + } + err := g.ProcessSequenceBatches(ctx, forkId, l1Block.SequencedBatches[order.Pos], l1Block.BlockNumber, l1Block.ReceivedAt, dbTx) + return err +} + +// ProcessSequenceBatches process sequence of batches +func (p *ProcessorL1SequenceBatchesBanana) ProcessSequenceBatches(ctx context.Context, forkId ForkIdType, sequencedBatches []etherman.SequencedBatch, blockNumber uint64, l1BlockTimestamp time.Time, dbTx stateTxType) error { + if len(sequencedBatches) == 0 { + log.Warn("Empty sequencedBatches array detected, ignoring...") + return nil + } + l1inforoot := common.Hash{} + if sequencedBatches[0].L1InfoRoot != nil { + l1inforoot = *sequencedBatches[0].L1InfoRoot + } + seq := SequenceOfBatches{} + seqSource := string(etherman.SequenceBatchesOrder) + if sequencedBatches[0].Metadata != nil { + seqSource = seqSource + "/" + sequencedBatches[0].Metadata.RollupFlavor + "/" + sequencedBatches[0].Metadata.ForkName + } + seq.Sequence = *entities.NewSequencedBatches( + sequencedBatches[0].BatchNumber, sequencedBatches[len(sequencedBatches)-1].BatchNumber, + blockNumber, uint64(forkId), + l1BlockTimestamp, time.Now(), + l1inforoot, seqSource) + + for _, sequencedBatch := range sequencedBatches { + virtualBatch := entities.NewVirtualBatchFromL1(blockNumber, seq.Sequence.FromBatchNumber, + seq.Sequence.ForkID, sequencedBatch) + seq.Batches = append(seq.Batches, virtualBatch) + } + return p.state.OnSequencedBatchesOnL1(ctx, seq, dbTx) +} diff --git a/synchronizer/actions/banana/types.go b/synchronizer/actions/banana/types.go new file mode 100644 index 0000000..2d09264 --- /dev/null +++ b/synchronizer/actions/banana/types.go @@ -0,0 +1,20 @@ +package banana + +import ( + "context" + + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/state/entities" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/state/model" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions" +) + +type L1InfoTreeLeaf = entities.L1InfoTreeLeaf +type stateTxType = entities.Tx +type ForkIdType = actions.ForkIdType +type VirtualBatch = entities.VirtualBatch +type SequencedBatches = entities.SequencedBatches +type SequenceOfBatches = model.SequenceOfBatches + +type stateOnSequencedBatchesInterface interface { + OnSequencedBatchesOnL1(ctx context.Context, seq SequenceOfBatches, dbTx stateTxType) error +} diff --git a/synchronizer/actions/elderberry/processor_l1_sequence_batches.go b/synchronizer/actions/elderberry/processor_l1_sequence_batches.go index 731699d..90098e9 100644 --- a/synchronizer/actions/elderberry/processor_l1_sequence_batches.go +++ b/synchronizer/actions/elderberry/processor_l1_sequence_batches.go @@ -34,7 +34,7 @@ func NewProcessorL1SequenceBatchesElderberry(previousProcessor PreviousProcessor return &ProcessorL1SequenceBatchesElderberry{ ProcessorBase: actions.ProcessorBase[ProcessorL1SequenceBatchesElderberry]{ SupportedEvent: []etherman.EventOrder{etherman.SequenceBatchesOrder}, - SupportedForkdIds: &actions.ForksIdElderberryAndBanana}, + SupportedForkdIds: &actions.ForksIdOnlyElderberry}, previousProcessor: previousProcessor, } } diff --git a/synchronizer/actions/forksids.go b/synchronizer/actions/forksids.go index eda0ecf..1309572 100644 --- a/synchronizer/actions/forksids.go +++ b/synchronizer/actions/forksids.go @@ -27,6 +27,9 @@ var ( // ForksIdAll support all forkIds ForksIdAll = []ForkIdType{WildcardForkId} + // ForksIdOnlyBanana support only banana forkId + ForksIdOnlyBanana = []ForkIdType{ForkIDBanana} + // ForksIdOnlyEtrogAndElderberry support ETROG and ELDERBERRY ForksIdOnlyEtrogAndElderberry = []ForkIdType{ForkIDEtrog, ForkIDElderberry, ForkID9, ForkID10, ForkID11} diff --git a/synchronizer/internal/synchronizer_impl.go b/synchronizer/internal/synchronizer_impl.go index 12e093f..742abee 100644 --- a/synchronizer/internal/synchronizer_impl.go +++ b/synchronizer/internal/synchronizer_impl.go @@ -9,6 +9,7 @@ import ( "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/state/entities" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/state/model" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions/banana" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions/elderberry" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions/etrog" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/synchronizer/actions/incaberry" @@ -142,6 +143,7 @@ func newL1EventProcessor(state syncinterfaces.StateInterface) *processor_manager builder.Register(etrog.NewProcessorL1InitialSequenceBatches(state)) builder.Register(elderberry.NewProcessorL1SequenceBatchesElderberry(etrogSequenceBatchesProcessor)) builder.Register(etrog.NewProcessorL1UpdateEtrogSequence(state)) + builder.Register(banana.NewProcessorL1SequenceBatchesBanana(state)) return builder.Build() } diff --git a/translator/config.go b/translator/config.go index 68aacd7..f4a3703 100644 --- a/translator/config.go +++ b/translator/config.go @@ -7,5 +7,5 @@ type ConfigRuleFullMatch struct { } type Config struct { - FullMatchRules []ConfigRuleFullMatch `mapstructure:"UniversalFullRules"` + FullMatchRules []ConfigRuleFullMatch `mapstructure:"FullMatchRules"` } From 2bac9199344b099c1a596c54f1dec26965db605b Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:26:27 +0200 Subject: [PATCH 2/6] feat: fix unittest --- config/default.go | 2 +- config/default_test.go | 2 +- .../sequence_batches_decode_banana_validium.go | 14 ++++++++------ version.go | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/config/default.go b/config/default.go index ab5d680..aff2381 100644 --- a/config/default.go +++ b/config/default.go @@ -35,7 +35,7 @@ const DefaultValues = ` RetryOnDACErrorInterval = "1m" DataSourcePriority = ["trusted", "external"] [Etherman.Validium.Translator] - FullMatchRules = [{Old="http://zkevm-dac-001:8484", New="http://127.0.0.1:32794"}] + FullMatchRules = [] [Etherman.Validium.RateLimit] NumRequests = 900 Interval = "1s" diff --git a/config/default_test.go b/config/default_test.go index 764ddce..c784d43 100644 --- a/config/default_test.go +++ b/config/default_test.go @@ -53,7 +53,7 @@ func TestDefault(t *testing.T) { Enabled: false, TrustedSequencerURL: "", DataSourcePriority: []dataavailability.DataSourcePriority{dataavailability.Trusted, dataavailability.External}, - Translator: translator.Config{}, + Translator: translator.Config{FullMatchRules: []translator.ConfigRuleFullMatch{}}, RetryOnDACErrorInterval: types.Duration{Duration: time.Minute}, RateLimit: utils.NewRateLimitConfig(900, time.Second), }, diff --git a/etherman/sequence_batches_decode_banana_validium.go b/etherman/sequence_batches_decode_banana_validium.go index c37993a..2ef1de4 100644 --- a/etherman/sequence_batches_decode_banana_validium.go +++ b/etherman/sequence_batches_decode_banana_validium.go @@ -76,12 +76,14 @@ func (s *SequenceBatchesDecoderBananaValidium) DecodeSequenceBatches(txData []by expectedFinalAccInputHash := common.Hash(expectedFinalAccInputHashraw) coinbase := data[4].(common.Address) dataAvailabilityMsg := data[5].([]byte) - bananaData := BananaSequenceData{ - CounterL1InfoRoot: counterL1InfoRoot, - MaxSequenceTimestamp: maxSequenceTimestamp, - ExpectedFinalAccInputHash: expectedFinalAccInputHash, - DataAvailabilityMsg: dataAvailabilityMsg, - } + /* + bananaData := BananaSequenceData{ + CounterL1InfoRoot: counterL1InfoRoot, + MaxSequenceTimestamp: maxSequenceTimestamp, + ExpectedFinalAccInputHash: expectedFinalAccInputHash, + DataAvailabilityMsg: dataAvailabilityMsg, + } + */ batchInfos := createBatchInfoBanana(sequencesValidium, lastBatchNumber) batchData, err := retrieveBatchData(s.da, batchInfos, dataAvailabilityMsg) diff --git a/version.go b/version.go index 939a422..b111d94 100644 --- a/version.go +++ b/version.go @@ -7,7 +7,7 @@ import ( ) var ( - Version = "v0.6.5" + Version = "v0.6.6" ) // PrintVersion prints version info into the provided io.Writer. From 936d4647306f8275c6875e2a7d810ca6c90738ba Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Tue, 20 Aug 2024 16:37:12 +0200 Subject: [PATCH 3/6] feat: fix lint --- etherman/sequence_batches_decode_banana_validium_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/etherman/sequence_batches_decode_banana_validium_test.go b/etherman/sequence_batches_decode_banana_validium_test.go index d33bd5e..8387e6d 100644 --- a/etherman/sequence_batches_decode_banana_validium_test.go +++ b/etherman/sequence_batches_decode_banana_validium_test.go @@ -1,5 +1,7 @@ package etherman +/* const ( txDataBananaValidiumHex = "165e8a8d00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000066c43b8e443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b0000000000000000000000005b06837a43bdc3dd9f114558daf4b26ed49842ed00000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000003d09d1238668f9e4dd74d503f15a90c8fc230069b5ace4a3327896b50bf809db5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df729b193d68d2b455c59f7040687d4dc2d147557442aeef4c10cc5769d47ade00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014df0077a11ccf22bd14d1ec3e209ba5d8e065ce73556fdc8fb9c19b83af4ec30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a60000000000000000000000" ) +*/ From 5977675beba125727e0abeae6620f7b6d4f79ce7 Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:39:11 +0200 Subject: [PATCH 4/6] add zkevm banana batches --- etherman/etherman.go | 29 +++-- etherman/sequence_batches_decode_banana.go | 112 +++++++++++------- .../sequence_batches_decode_banana_test.go | 50 ++++++++ ...sequence_batches_decode_banana_validium.go | 54 ++++----- ...nce_batches_decode_banana_validium_test.go | 77 +++++++++++- .../sequence_batches_decode_elderberry.go | 25 ++-- ...sequence_batches_decode_elderberry_test.go | 8 +- ...batches_decode_elderberry_validium_test.go | 8 +- etherman/sequence_batches_decode_etrog.go | 23 ++-- .../sequence_batches_decode_etrog_test.go | 8 +- etherman/sequence_batches_decode_shared.go | 18 +-- etherman/types.go | 56 +++++++-- .../processor_l1_initial_sequence_batches.go | 4 +- .../processor_l1_update_etrog_sequence.go | 12 +- 14 files changed, 336 insertions(+), 148 deletions(-) create mode 100644 etherman/sequence_batches_decode_banana_test.go diff --git a/etherman/etherman.go b/etherman/etherman.go index de85073..66e192b 100644 --- a/etherman/etherman.go +++ b/etherman/etherman.go @@ -242,7 +242,13 @@ func NewClient(cfg Config) (*Client, error) { return nil, err } - batchDecoders := []SequenceBatchesDecoder{decodeEtrog, decodeElderberry} + decodeBanana, err := NewDecodeSequenceBatchesBanana() + if err != nil { + log.Errorf("error creating NewDecodeSequenceBatchesBanana client. Error: %w", err) + return nil, err + } + + batchDecoders := []SequenceBatchesDecoder{decodeEtrog, decodeElderberry, decodeBanana} if cfg.Validium.Enabled { log.Infof("Validium is enabled") validium, err = NewEthermanValidium(cfg, ethClient) @@ -870,7 +876,7 @@ func (etherMan *Client) updateEtrogSequence(ctx context.Context, vLog types.Log, SequencerAddr: updateEtrogSequence.Sequencer, TxHash: vLog.TxHash, Nonce: msg.Nonce, - PolygonRollupBaseEtrogBatchData: &polygonzkevm.PolygonRollupBaseEtrogBatchData{ + EtrogSequenceData: &EtrogSequenceData{ Transactions: updateEtrogSequence.Transactions, ForcedGlobalExitRoot: updateEtrogSequence.LastGlobalExitRoot, ForcedTimestamp: fullBlock.Time(), @@ -928,7 +934,7 @@ func (etherMan *Client) initialSequenceBatches(ctx context.Context, vLog types.L SequencerAddr: initialSequenceBatches.Sequencer, TxHash: vLog.TxHash, Nonce: msg.Nonce, - PolygonRollupBaseEtrogBatchData: &polygonzkevm.PolygonRollupBaseEtrogBatchData{ + EtrogSequenceData: &EtrogSequenceData{ Transactions: initialSequenceBatches.Transactions, ForcedGlobalExitRoot: initialSequenceBatches.LastGlobalExitRoot, ForcedTimestamp: fullBlock.Time(), @@ -1519,12 +1525,17 @@ func decodeSequencedForceBatches(txData []byte, lastBatchNumber uint64, sequence for i, force := range forceBatches { bn := lastBatchNumber - uint64(len(forceBatches)-(i+1)) sequencedForcedBatches[i] = SequencedForceBatch{ - BatchNumber: bn, - Coinbase: sequencer, - TxHash: txHash, - Timestamp: time.Unix(int64(block.Time()), 0), - Nonce: nonce, - PolygonRollupBaseEtrogBatchData: force, + BatchNumber: bn, + Coinbase: sequencer, + TxHash: txHash, + Timestamp: time.Unix(int64(block.Time()), 0), + Nonce: nonce, + EtrogSequenceData: EtrogSequenceData{ + Transactions: force.Transactions, + ForcedGlobalExitRoot: force.ForcedGlobalExitRoot, + ForcedTimestamp: force.ForcedTimestamp, + ForcedBlockHashL1: force.ForcedBlockHashL1, + }, } } return sequencedForcedBatches, nil diff --git a/etherman/sequence_batches_decode_banana.go b/etherman/sequence_batches_decode_banana.go index 9bb4185..6d4d21b 100644 --- a/etherman/sequence_batches_decode_banana.go +++ b/etherman/sequence_batches_decode_banana.go @@ -1,10 +1,12 @@ package etherman import ( - "fmt" + "encoding/json" "github.com/0xPolygon/cdk-contracts-tooling/contracts/banana/polygonvalidiumetrog" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) var ( @@ -27,67 +29,85 @@ var ( sequenceBatches((bytes,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address) */ - methodIDSequenceBatchesBanana = []byte{0xdb, 0x5b, 0x0e, 0xd7} // 165e8a8d sequenceBatches((bytes,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address) + methodIDSequenceBatchesBanana = crypto.Keccak256Hash([]byte("sequenceBatches((bytes,bytes32,uint64,bytes32)[],uint32,uint64,bytes32,address)")).Bytes()[:4] // b910e0f9 methodIDSequenceBatchesBananaName = "sequenceBatchesBanana" ) -type DecodeSequenceBatchesDecodeBanana struct { +type DecodeSequenceBatchesBanana struct { SequenceBatchesBase } -func NewDecodeSequenceBatchesDecodeBanana() (*DecodeSequenceBatchesDecodeBanana, error) { +func NewDecodeSequenceBatchesBanana() (*DecodeSequenceBatchesBanana, error) { base, err := NewSequenceBatchesBase(methodIDSequenceBatchesBanana, methodIDSequenceBatchesBananaName, polygonvalidiumetrog.PolygonvalidiumetrogABI) if err != nil { return nil, err } - return &DecodeSequenceBatchesDecodeBanana{*base}, nil + return &DecodeSequenceBatchesBanana{*base}, nil } -func (s *DecodeSequenceBatchesDecodeBanana) DecodeSequenceBatches(txData []byte, lastBatchNumber uint64, sequencer common.Address, txHash common.Hash, nonce uint64, l1InfoRoot common.Hash) ([]SequencedBatch, error) { - //decoded, err := decodeSequenceCallData(s.SmcABI(), txData) - _, err := decodeSequenceCallData(s.SmcABI(), txData) +func (s *DecodeSequenceBatchesBanana) DecodeSequenceBatches(txData []byte, lastBatchNumber uint64, sequencer common.Address, txHash common.Hash, nonce uint64, l1InfoRoot common.Hash) ([]SequencedBatch, error) { + decoded, err := decodeSequenceCallData(s.SmcABI(), txData) + if err != nil { + return nil, err + } + data := decoded.Data + bytedata := decoded.InputByteData + var sequences []polygonvalidiumetrog.PolygonRollupBaseEtrogBatchData + err = json.Unmarshal(bytedata, &sequences) if err != nil { return nil, err } - return nil, fmt.Errorf("not implemented") - /* - data := decoded.Data - bytedata := decoded.InputByteData - var sequences []polygonvalidiumetrog.PolygonRollupBaseEtrogBatchData - err = json.Unmarshal(bytedata, &sequences) - if err != nil { - return nil, err - } - maxSequenceTimestamp := data[1].(uint64) - initSequencedBatchNumber := data[2].(uint64) - coinbase := (data[3]).(common.Address) - sequencedBatches := make([]SequencedBatch, len(sequences)) - SequencedBatchMetadata := &SequencedBatchMetadata{ - CallFunctionName: s.NameMethodID(txData[:4]), - RollupFlavor: RollupFlavorZkEVM, - ForkName: "elderberry", - } + counterL1InfoRoot := data[1].(uint32) + maxSequenceTimestamp := data[2].(uint64) + //expectedFinalAccInputHash := data[3].(common.Hash) + expectedFinalAccInputHashraw := data[3].([common.HashLength]byte) + expectedFinalAccInputHash := common.Hash(expectedFinalAccInputHashraw) + coinbase := data[4].(common.Address) + + bananaData := BananaSequenceData{ + CounterL1InfoRoot: counterL1InfoRoot, + MaxSequenceTimestamp: maxSequenceTimestamp, + ExpectedFinalAccInputHash: expectedFinalAccInputHash, + DataAvailabilityMsg: []byte{}, + } + SequencedBatchMetadata := &SequencedBatchMetadata{ + CallFunctionName: s.NameMethodID(txData[:4]), + ForkName: "banana", + RollupFlavor: RollupFlavorZkEVM, + } + + log.Debugf("Decoded %s: event(lastBatchNumber:%d, sequencer:%s, txHash:%s, nonce:%d, l1InfoRoot:%s) bananaData:%s", + methodIDSequenceBatchesBananaName, + lastBatchNumber, sequencer.String(), txHash.String(), nonce, l1InfoRoot.String(), + bananaData.String()) + log.Debugf("%s batchNum: %d Data:%s", methodIDSequenceBatchesBananaName, lastBatchNumber+1, common.Bytes2Hex(txData)) + for i, d := range sequences { + log.Debugf("%s BatchData[%d]: %s", methodIDSequenceBatchesBananaName, i, common.Bytes2Hex(d.Transactions)) + } + sequencedBatches := make([]SequencedBatch, len(sequences)) + + for i, seq := range sequences { - for i, seq := range sequences { - elderberry := SequencedBatchElderberryData{ - MaxSequenceTimestamp: maxSequenceTimestamp, - InitSequencedBatchNumber: initSequencedBatchNumber, - } - bn := lastBatchNumber - uint64(len(sequences)-(i+1)) - s := seq - sequencedBatches[i] = SequencedBatch{ - BatchNumber: bn, - L1InfoRoot: &l1InfoRoot, - SequencerAddr: sequencer, - TxHash: txHash, - Nonce: nonce, - Coinbase: coinbase, - PolygonRollupBaseEtrogBatchData: &s, - SequencedBatchElderberryData: &elderberry, - Metadata: SequencedBatchMetadata, - } + bn := lastBatchNumber - uint64(len(sequences)-(i+1)) + s := EtrogSequenceData{ + Transactions: seq.Transactions, + ForcedGlobalExitRoot: seq.ForcedGlobalExitRoot, + ForcedTimestamp: seq.ForcedTimestamp, + ForcedBlockHashL1: seq.ForcedBlockHashL1, } - return sequencedBatches, nil - */ + sequencedBatches[i] = SequencedBatch{ + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + EtrogSequenceData: &s, + BananaData: &bananaData, + Metadata: SequencedBatchMetadata, + } + } + return sequencedBatches, nil + } diff --git a/etherman/sequence_batches_decode_banana_test.go b/etherman/sequence_batches_decode_banana_test.go new file mode 100644 index 0000000..82a9015 --- /dev/null +++ b/etherman/sequence_batches_decode_banana_test.go @@ -0,0 +1,50 @@ +package etherman + +import ( + "encoding/hex" + "testing" + + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/require" +) + +const ( + txDataBananaHex = "b910e0f900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000066c4b6531317f62f023ccd827099d9070ac5eb453040af849485827b42eb6ac92fe112530000000000000000000000005b06837a43bdc3dd9f114558daf4b26ed49842ed00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120b0000007a000000000b00000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120b00000006000000000b000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b0b00000006000000000b00000006000000000b00000006000000000000000000" + expedtedSeqBanana = `BatchNumber: 2 +L1InfoRoot: 0xa958fee09bf3c4d782ab6839f81c8f40316521e19ba088b9c1a580c9a1438506 +SequencerAddr: 0x5b06837A43bdC3dD9F114558DAf4B26ed49842Ed +TxHash: 0x2b3fa84d57739604e5fbbc921fca588842923c64e28e0636609ee7ba1bea8c64 +Nonce: 1 +Coinbase: 0x5b06837A43bdC3dD9F114558DAf4B26ed49842Ed +PolygonZkEVMBatchData: nil +___EtrogSequenceData:ForcedTimestamp: 0 +___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:Transactions: 0b0000007a000000000b0000000600000000 +SequencedBatchElderberryData: nil +BananaData: CounterL1InfoRoot: 1 MaxSequenceTimestamp: 1724167763 ExpectedFinalAccInputHash: 0x1317f62f023ccd827099d9070ac5eb453040af849485827b42eb6ac92fe11253 DataAvailabilityMsg(0): +Metadata: SourceBatchData: RollupFlavor: kEVM CallFunctionName: sequenceBatchesBanana ForkName: banana +` +) + +func TestSequencedBatchBananaDecode(t *testing.T) { + sut, err := NewDecodeSequenceBatchesBanana() + require.NoError(t, err) + require.NotNil(t, sut) + txData, err := hex.DecodeString(txDataBananaHex) + require.NoError(t, err) + lastBatchNumber := uint64(4) + sequencer := common.HexToAddress("0x5b06837A43bdC3dD9F114558DAf4B26ed49842Ed") + txHash := common.HexToHash("0x2b3fa84d57739604e5fbbc921fca588842923c64e28e0636609ee7ba1bea8c64") + nonce := uint64(1) + l1InfoRoot := common.HexToHash("0xa958fee09bf3c4d782ab6839f81c8f40316521e19ba088b9c1a580c9a1438506") + + res, err := sut.DecodeSequenceBatches(txData, lastBatchNumber, sequencer, txHash, nonce, l1InfoRoot) + require.NoError(t, err) + require.NotNil(t, res) + res0 := res[0].String() + log.Debug(res0) + require.Equal(t, expedtedSeqBanana, res0) + +} diff --git a/etherman/sequence_batches_decode_banana_validium.go b/etherman/sequence_batches_decode_banana_validium.go index 2ef1de4..097f996 100644 --- a/etherman/sequence_batches_decode_banana_validium.go +++ b/etherman/sequence_batches_decode_banana_validium.go @@ -6,7 +6,6 @@ import ( "github.com/0xPolygon/cdk-contracts-tooling/contracts/banana/polygonvalidiumetrog" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/dataavailability" - elderberrypolygonzkevm "github.com/0xPolygonHermez/zkevm-synchronizer-l1/etherman/smartcontracts/polygonzkevm" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" "github.com/ethereum/go-ethereum/common" ) @@ -53,7 +52,7 @@ func NewSequenceBatchesDecoderBananaValidium(da dataavailability.BatchDataProvid } func (s *SequenceBatchesDecoderBananaValidium) DecodeSequenceBatches(txData []byte, lastBatchNumber uint64, sequencer common.Address, txHash common.Hash, nonce uint64, l1InfoRoot common.Hash) ([]SequencedBatch, error) { - log.Debugf("%s batchNum: %d Data:%s", methodIDSequenceBatchesBananaValidiumName, lastBatchNumber+1, common.Bytes2Hex(txData)) + if s.da == nil { return nil, fmt.Errorf("data availability backend not set") } @@ -76,14 +75,14 @@ func (s *SequenceBatchesDecoderBananaValidium) DecodeSequenceBatches(txData []by expectedFinalAccInputHash := common.Hash(expectedFinalAccInputHashraw) coinbase := data[4].(common.Address) dataAvailabilityMsg := data[5].([]byte) - /* - bananaData := BananaSequenceData{ - CounterL1InfoRoot: counterL1InfoRoot, - MaxSequenceTimestamp: maxSequenceTimestamp, - ExpectedFinalAccInputHash: expectedFinalAccInputHash, - DataAvailabilityMsg: dataAvailabilityMsg, - } - */ + + bananaData := BananaSequenceData{ + CounterL1InfoRoot: counterL1InfoRoot, + MaxSequenceTimestamp: maxSequenceTimestamp, + ExpectedFinalAccInputHash: expectedFinalAccInputHash, + DataAvailabilityMsg: dataAvailabilityMsg, + } + batchInfos := createBatchInfoBanana(sequencesValidium, lastBatchNumber) batchData, err := retrieveBatchData(s.da, batchInfos, dataAvailabilityMsg) @@ -93,13 +92,16 @@ func (s *SequenceBatchesDecoderBananaValidium) DecodeSequenceBatches(txData []by log.Debugf("Decoded Banana sequenceBatchesValidium: counterL1InfoRoot:%d maxSequenceTimestamp:%d expectedFinalAccInputHash:%s coinbase:%s dataAvailabilityMsg:%s", counterL1InfoRoot, maxSequenceTimestamp, expectedFinalAccInputHash, coinbase.Hex(), dataAvailabilityMsg) - + log.Debugf("%s batchNum: %d Data:%s", methodIDSequenceBatchesBananaValidiumName, lastBatchNumber+1, common.Bytes2Hex(txData)) + for i, d := range batchData { + log.Debugf("%s BatchData[%d]: %s", methodIDSequenceBatchesBananaValidiumName, i, common.Bytes2Hex(d.Data)) + } SequencedBatchMetadata := &SequencedBatchMetadata{ CallFunctionName: s.NameMethodID(txData[:4]), ForkName: "banana", RollupFlavor: RollupFlavorValidium, } - sequencedBatches := createSequencedBatchListBanana(sequencesValidium, batchInfos, batchData, l1InfoRoot, sequencer, txHash, nonce, coinbase, maxSequenceTimestamp, SequencedBatchMetadata) + sequencedBatches := createSequencedBatchListBanana(sequencesValidium, batchInfos, batchData, l1InfoRoot, sequencer, txHash, nonce, coinbase, maxSequenceTimestamp, bananaData, SequencedBatchMetadata) return sequencedBatches, nil @@ -122,11 +124,12 @@ func createBatchInfoBanana(sequencesValidium []polygonvalidiumetrog.PolygonValid func createSequencedBatchListBanana(sequencesValidium []polygonvalidiumetrog.PolygonValidiumEtrogValidiumBatchData, batchInfos []batchInfo, batchData []dataavailability.BatchL2Data, l1InfoRoot common.Hash, sequencer common.Address, txHash common.Hash, nonce uint64, coinbase common.Address, maxSequenceTimestamp uint64, + bananaSequenceData BananaSequenceData, metaData *SequencedBatchMetadata) []SequencedBatch { sequencedBatches := make([]SequencedBatch, len(sequencesValidium)) for i, info := range batchInfos { bn := info.num - s := elderberrypolygonzkevm.PolygonRollupBaseEtrogBatchData{ + s := EtrogSequenceData{ Transactions: batchData[i].Data, ForcedGlobalExitRoot: sequencesValidium[i].ForcedGlobalExitRoot, ForcedTimestamp: sequencesValidium[i].ForcedTimestamp, @@ -143,23 +146,16 @@ func createSequencedBatchListBanana(sequencesValidium []polygonvalidiumetrog.Pol } } batch := SequencedBatch{ - BatchNumber: bn, - L1InfoRoot: &l1InfoRoot, - SequencerAddr: sequencer, - TxHash: txHash, - Nonce: nonce, - Coinbase: coinbase, - PolygonRollupBaseEtrogBatchData: &s, - Metadata: metaData, + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + EtrogSequenceData: &s, + BananaData: &bananaSequenceData, + Metadata: metaData, } - - /* - elderberry := &SequencedBatchElderberryData{ - MaxSequenceTimestamp: maxSequenceTimestamp, - InitSequencedBatchNumber: initSequencedBatchNumber, - } - batch.SequencedBatchElderberryData = elderberry - */ sequencedBatches[i] = batch } return sequencedBatches diff --git a/etherman/sequence_batches_decode_banana_validium_test.go b/etherman/sequence_batches_decode_banana_validium_test.go index 8387e6d..702c570 100644 --- a/etherman/sequence_batches_decode_banana_validium_test.go +++ b/etherman/sequence_batches_decode_banana_validium_test.go @@ -1,7 +1,78 @@ package etherman -/* +import ( + "encoding/hex" + "testing" + + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/dataavailability" + mock_dataavailability "github.com/0xPolygonHermez/zkevm-synchronizer-l1/dataavailability/mocks" + "github.com/0xPolygonHermez/zkevm-synchronizer-l1/log" + "github.com/ethereum/go-ethereum/common" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" +) + const ( - txDataBananaValidiumHex = "165e8a8d00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000066c43b8e443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b0000000000000000000000005b06837a43bdc3dd9f114558daf4b26ed49842ed00000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000003d09d1238668f9e4dd74d503f15a90c8fc230069b5ace4a3327896b50bf809db5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df729b193d68d2b455c59f7040687d4dc2d147557442aeef4c10cc5769d47ade00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014df0077a11ccf22bd14d1ec3e209ba5d8e065ce73556fdc8fb9c19b83af4ec30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a60000000000000000000000" + txDataBananaValidiumHex = "165e8a8d00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000066c43b8e443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b0000000000000000000000005b06837a43bdc3dd9f114558daf4b26ed49842ed00000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000003d09d1238668f9e4dd74d503f15a90c8fc230069b5ace4a3327896b50bf809db5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df729b193d68d2b455c59f7040687d4dc2d147557442aeef4c10cc5769d47ade00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014df0077a11ccf22bd14d1ec3e209ba5d8e065ce73556fdc8fb9c19b83af4ec30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a60000000000000000000000" + expectedSeqBananaValidium = `BatchNumber: 2 +L1InfoRoot: 0xa59ece237550cae22559a6654efccbd8fc33fb7b56ed11983c97e211ddd17346 +SequencerAddr: 0x353800524721e11B453f73f523dD8840c215a213 +TxHash: 0x2cd4d0310ae93fe9e068fa3cc1d7bcb1b6ea66374f48efb2b389bb5a64105a15 +Nonce: 1 +Coinbase: 0x5b06837A43bdC3dD9F114558DAf4B26ed49842Ed +PolygonZkEVMBatchData: nil +___EtrogSequenceData:ForcedTimestamp: 0 +___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:Transactions: 01020304 +SequencedBatchElderberryData: nil +BananaData: CounterL1InfoRoot: 1 MaxSequenceTimestamp: 1724136334 ExpectedFinalAccInputHash: 0x443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b DataAvailabilityMsg(85): f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a6 +Metadata: SourceBatchData: DA/External RollupFlavor: Validium CallFunctionName: sequenceBatchesBananaValidium ForkName: banana +` +) + +var ( + batchDataBananaValidiumHex = [...]string{ + "0b0000008b000000000b00000006000000000b0000000600000000", + "0b00000000000000000b0000000600000000", + "0b00000006000000000b00000006000000000b0000000600000000", + } ) -*/ + +func TestSequencedBatchBananaValidiumDecode(t *testing.T) { + mockDA := mock_dataavailability.NewBatchDataProvider(t) + sut, err := NewSequenceBatchesDecoderBananaValidium(mockDA) + require.NoError(t, err) + require.NotNil(t, sut) + + txData, err := hex.DecodeString(txDataBananaValidiumHex) + resultGetBatchL2Data := []dataavailability.BatchL2Data{ + { + Data: []byte{0x01, 0x02, 0x03, 0x04}, + Source: dataavailability.External, + }, + { + Data: []byte{0x01, 0x02, 0x03, 0x04}, + Source: dataavailability.External, + }, + { + Data: []byte{0x01, 0x02, 0x03, 0x04}, + Source: dataavailability.External, + }, + } + mockDA.EXPECT().GetBatchL2Data([]uint64{2, 3, 4}, mock.Anything, mock.Anything).Return(resultGetBatchL2Data, nil) + + require.NoError(t, err) + res, err := sut.DecodeSequenceBatches(txData, uint64(4), + common.HexToAddress("0x353800524721e11B453f73f523dD8840c215a213"), + common.HexToHash("0x2cd4d0310ae93fe9e068fa3cc1d7bcb1b6ea66374f48efb2b389bb5a64105a15"), + uint64(1), + common.HexToHash("0xa59ece237550cae22559a6654efccbd8fc33fb7b56ed11983c97e211ddd17346")) + + require.NoError(t, err) + require.NotNil(t, res) + res0 := res[0].String() + log.Debug(res0) + require.Equal(t, expectedSeqBananaValidium, res0) + +} diff --git a/etherman/sequence_batches_decode_elderberry.go b/etherman/sequence_batches_decode_elderberry.go index 9499efd..927cadc 100644 --- a/etherman/sequence_batches_decode_elderberry.go +++ b/etherman/sequence_batches_decode_elderberry.go @@ -49,17 +49,22 @@ func (s *SequenceBatchesDecodeElderberry) DecodeSequenceBatches(txData []byte, l InitSequencedBatchNumber: initSequencedBatchNumber, } bn := lastBatchNumber - uint64(len(sequences)-(i+1)) - s := seq + s := EtrogSequenceData{ + Transactions: seq.Transactions, + ForcedGlobalExitRoot: seq.ForcedGlobalExitRoot, + ForcedTimestamp: seq.ForcedTimestamp, + ForcedBlockHashL1: seq.ForcedBlockHashL1, + } sequencedBatches[i] = SequencedBatch{ - BatchNumber: bn, - L1InfoRoot: &l1InfoRoot, - SequencerAddr: sequencer, - TxHash: txHash, - Nonce: nonce, - Coinbase: coinbase, - PolygonRollupBaseEtrogBatchData: &s, - SequencedBatchElderberryData: &elderberry, - Metadata: SequencedBatchMetadata, + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + EtrogSequenceData: &s, + SequencedBatchElderberryData: &elderberry, + Metadata: SequencedBatchMetadata, } } return sequencedBatches, nil diff --git a/etherman/sequence_batches_decode_elderberry_test.go b/etherman/sequence_batches_decode_elderberry_test.go index 06b1a8c..37cda60 100644 --- a/etherman/sequence_batches_decode_elderberry_test.go +++ b/etherman/sequence_batches_decode_elderberry_test.go @@ -17,10 +17,10 @@ TxHash: 0x44b7aacaf535bd947803c88c18e63358c8ddd44fbb24950efbb5abb50f938cef Nonce: 1 Coinbase: 0x7597b12B953Bffe1457d89E7E4fe3dA149b45D88 PolygonZkEVMBatchData: nil -___PolygonRollupBaseEtrogBatchData:ForcedTimestamp: 0 -___PolygonRollupBaseEtrogBatchData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:Transactions: 0b00000890000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000117000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000 +___EtrogSequenceData:ForcedTimestamp: 0 +___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:Transactions: 0b00000890000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000117000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000 ___SequencedBatchElderberryData:MaxSequenceTimestamp 1710766241 ___SequencedBatchElderberryData:InitSequencedBatchNumber 1 Metadata: SourceBatchData: RollupFlavor: kEVM CallFunctionName: sequenceBatchesElderberry ForkName: elderberry diff --git a/etherman/sequence_batches_decode_elderberry_validium_test.go b/etherman/sequence_batches_decode_elderberry_validium_test.go index 9f68fd3..6c974cf 100644 --- a/etherman/sequence_batches_decode_elderberry_validium_test.go +++ b/etherman/sequence_batches_decode_elderberry_validium_test.go @@ -20,10 +20,10 @@ TxHash: 0x2cd4d0310ae93fe9e068fa3cc1d7bcb1b6ea66374f48efb2b389bb5a64105a15 Nonce: 1 Coinbase: 0x353800524721e11B453f73f523dD8840c215a213 PolygonZkEVMBatchData: nil -___PolygonRollupBaseEtrogBatchData:ForcedTimestamp: 0 -___PolygonRollupBaseEtrogBatchData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:Transactions: 01020304 +___EtrogSequenceData:ForcedTimestamp: 0 +___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:Transactions: 01020304 ___SequencedBatchElderberryData:MaxSequenceTimestamp 1718652049 ___SequencedBatchElderberryData:InitSequencedBatchNumber 1 Metadata: SourceBatchData: DA/External RollupFlavor: Validium CallFunctionName: sequenceBatchesElderberryValidium ForkName: elderberry diff --git a/etherman/sequence_batches_decode_etrog.go b/etherman/sequence_batches_decode_etrog.go index 278dc9a..4f71d07 100644 --- a/etherman/sequence_batches_decode_etrog.go +++ b/etherman/sequence_batches_decode_etrog.go @@ -43,16 +43,21 @@ func (s *SequenceBatchesDecodeEtrog) DecodeSequenceBatches(txData []byte, lastBa sequencedBatches := make([]SequencedBatch, len(sequences)) for i, seq := range sequences { bn := lastBatchNumber - uint64(len(sequences)-(i+1)) - s := seq + s := EtrogSequenceData{ + Transactions: seq.Transactions, + ForcedGlobalExitRoot: seq.ForcedGlobalExitRoot, + ForcedTimestamp: seq.ForcedTimestamp, + ForcedBlockHashL1: seq.ForcedBlockHashL1, + } sequencedBatches[i] = SequencedBatch{ - BatchNumber: bn, - L1InfoRoot: &l1InfoRoot, - SequencerAddr: sequencer, - TxHash: txHash, - Nonce: nonce, - Coinbase: coinbase, - PolygonRollupBaseEtrogBatchData: &s, - Metadata: SequencedBatchMetadata, + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + EtrogSequenceData: &s, + Metadata: SequencedBatchMetadata, } } return sequencedBatches, nil diff --git a/etherman/sequence_batches_decode_etrog_test.go b/etherman/sequence_batches_decode_etrog_test.go index 4e55f8f..48e0253 100644 --- a/etherman/sequence_batches_decode_etrog_test.go +++ b/etherman/sequence_batches_decode_etrog_test.go @@ -17,10 +17,10 @@ TxHash: 0x4cfe3c40423272d4c7e9e62ef04fe0daf4f93b7c74fd2ce85681439540fed351 Nonce: 5345 Coinbase: 0x761d53b47334bEe6612c0Bd1467FB881435375B2 PolygonZkEVMBatchData: nil -___PolygonRollupBaseEtrogBatchData:ForcedTimestamp: 0 -___PolygonRollupBaseEtrogBatchData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 -___PolygonRollupBaseEtrogBatchData:Transactions: 0b000009ff000000010b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000039a00000002ed82c566840646c02082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80807253da669b2120e437c571610d9cee00c858cf3372aae4c3ed62dacc195046e74e0c486c4729a93e98dc545e988cbed672ceef55fd053838d2c3453c2ca5d0881bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c5678402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80802443e6ad6896c53bfab5158bad2b3e0e8f394327429d385c2ed06073d5ddee10255a3f04b133d6a429ede9034133c06d7d45488b25b8c94cbc3864bf6b55c1bd1cff0b0000000300000000ec82c56883e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80801347492658eccdf8d8ce2661e9839cd5a0bf686811458684f0c76d15d3883dc900f419b1913459aacedfe1302b0e33c666ac38eab89d316f554a8915251466911bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000030b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c5698402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808072f2383ad4072fdd10136146e34a07afab3e31cccc3f224d35819b6c1426e93c6c5d790d959ea3cc771c47e1c86bb5f3890f688375595db43991145645f83f2b1bff0b0000000300000000ec82c56a83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080cb06fde9c2e439c24a3554d650ccfe2358ca938658b631b8076bf5208463353f247273123ef18bf21d3d063c22f3968cdca6993e7e98ddc469a57b4d3b6e83b51bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9016c8204fb83e975a0828ac994dbc6981a11fc2b000c635bfa7c47676b25c87d3980b9014401d5062a00000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a8080aa674af1f2cbfaa5b0ac761695d070e09f95582158e124d955f89b3f0330bffc4b37067f0bc428f198d82e611cef239ff84a8ba6e47473cd3a371f7a08af8ef71cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56b8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080772be78177b949f59bdeffcbf72da39b12f3410423b4ebce136ef3b4813788be3e70ebbd1ac8d332a920511c791dc03e517d717fad57961c2ea78eedb52c3fb71bff0b0000000300000000ec82c56c83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808011c1e4ba436f71fa5fcc69f0fb2ab263269c969686478e65833627e1ab90514b765d3b23bf19c939816f79a6b2d945566459eca8da9284a426be9d3f336964d01bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9016c8204fc83e975a0828ac994dbc6981a11fc2b000c635bfa7c47676b25c87d3980b9014401d5062a00000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a80807ebe71b3d331d4acb7c9c7b26ea5ce1001f3ed1271bdbc3ce1ea7fb3611720ce42b838370ac3e44a2d410a7c31a130b80dc90b7fb26684764ecb6cf6876456541cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9014d8204fd83e975a0830166bc94dbc6981a11fc2b000c635bfa7c47676b25c87d3980b90124134008d300000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a8080761e47d90088b5e3a29a6b0292392daec129e2c189d55702e1e2a196ae3818b817114adb404ebd3ee2bd6e71531248538b4cd9f5df893927664f981073dfa5eb1cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56d8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080124ca004395f26c37f8e53ce02b34cf8b95a8d990f84bd7f2e8dbdb8f5bffee3402dc6ac9423e119b62d79a99adc7f93ced8ae4d2c4f387305109d2b54d6018e1bff0b0000000300000000ec82c56e83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080931bca68ce1452bb5fe34529902fbc9e49b3a04750a449d90f83ef39ef157d8d05b0f1518b97a40b44233b6e0425bae1a4a395907839ccced43ef21f3c5b1aac1bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56f8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080192f437e24128dfc37ef76825916ef3292a7b7ec1e7f477e529a1c7ccac9aa3425330c0a821fee7a6f5f081652d4e88a0f892450a0da532d6c86e353c781739c1bff0b0000000300000000ec82c57083e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808014a58636aa8041924d8b9063e19a846ae7426c154e5b86bebd8ddb41f9e948a9200a05a4fcf78f8be3e260ec08bffedbf2edbd2331dba829059912c3783228441bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000 +___EtrogSequenceData:ForcedTimestamp: 0 +___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 +___EtrogSequenceData:Transactions: 0b000009ff000000010b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000039a00000002ed82c566840646c02082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80807253da669b2120e437c571610d9cee00c858cf3372aae4c3ed62dacc195046e74e0c486c4729a93e98dc545e988cbed672ceef55fd053838d2c3453c2ca5d0881bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c5678402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80802443e6ad6896c53bfab5158bad2b3e0e8f394327429d385c2ed06073d5ddee10255a3f04b133d6a429ede9034133c06d7d45488b25b8c94cbc3864bf6b55c1bd1cff0b0000000300000000ec82c56883e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a80801347492658eccdf8d8ce2661e9839cd5a0bf686811458684f0c76d15d3883dc900f419b1913459aacedfe1302b0e33c666ac38eab89d316f554a8915251466911bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000030b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c5698402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808072f2383ad4072fdd10136146e34a07afab3e31cccc3f224d35819b6c1426e93c6c5d790d959ea3cc771c47e1c86bb5f3890f688375595db43991145645f83f2b1bff0b0000000300000000ec82c56a83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080cb06fde9c2e439c24a3554d650ccfe2358ca938658b631b8076bf5208463353f247273123ef18bf21d3d063c22f3968cdca6993e7e98ddc469a57b4d3b6e83b51bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9016c8204fb83e975a0828ac994dbc6981a11fc2b000c635bfa7c47676b25c87d3980b9014401d5062a00000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a8080aa674af1f2cbfaa5b0ac761695d070e09f95582158e124d955f89b3f0330bffc4b37067f0bc428f198d82e611cef239ff84a8ba6e47473cd3a371f7a08af8ef71cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56b8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080772be78177b949f59bdeffcbf72da39b12f3410423b4ebce136ef3b4813788be3e70ebbd1ac8d332a920511c791dc03e517d717fad57961c2ea78eedb52c3fb71bff0b0000000300000000ec82c56c83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808011c1e4ba436f71fa5fcc69f0fb2ab263269c969686478e65833627e1ab90514b765d3b23bf19c939816f79a6b2d945566459eca8da9284a426be9d3f336964d01bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9016c8204fc83e975a0828ac994dbc6981a11fc2b000c635bfa7c47676b25c87d3980b9014401d5062a00000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a80807ebe71b3d331d4acb7c9c7b26ea5ce1001f3ed1271bdbc3ce1ea7fb3611720ce42b838370ac3e44a2d410a7c31a130b80dc90b7fb26684764ecb6cf6876456541cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000f9014d8204fd83e975a0830166bc94dbc6981a11fc2b000c635bfa7c47676b25c87d3980b90124134008d300000000000000000000000085ceb41028b1a5ed2b88e395145344837308b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004499a88ec4000000000000000000000000528e26b25a34a4a5d0dbda1d57d318153d2ed5820000000000000000000000001f4479ccb333fcba58e68f04e38f3ab070983b310000000000000000000000000000000000000000000000000000000082098a8080761e47d90088b5e3a29a6b0292392daec129e2c189d55702e1e2a196ae3818b817114adb404ebd3ee2bd6e71531248538b4cd9f5df893927664f981073dfa5eb1cff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56d8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080124ca004395f26c37f8e53ce02b34cf8b95a8d990f84bd7f2e8dbdb8f5bffee3402dc6ac9423e119b62d79a99adc7f93ced8ae4d2c4f387305109d2b54d6018e1bff0b0000000300000000ec82c56e83e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080931bca68ce1452bb5fe34529902fbc9e49b3a04750a449d90f83ef39ef157d8d05b0f1518b97a40b44233b6e0425bae1a4a395907839ccced43ef21f3c5b1aac1bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000ed82c56f8402bc60e082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a8080192f437e24128dfc37ef76825916ef3292a7b7ec1e7f477e529a1c7ccac9aa3425330c0a821fee7a6f5f081652d4e88a0f892450a0da532d6c86e353c781739c1bff0b0000000300000000ec82c57083e975a082520894417a7ba2d8d0060ae6c54fd098590db854b9c1d58609184e72a0008082098a808014a58636aa8041924d8b9063e19a846ae7426c154e5b86bebd8ddb41f9e948a9200a05a4fcf78f8be3e260ec08bffedbf2edbd2331dba829059912c3783228441bff0b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b00000003000000000b0000000300000000 SequencedBatchElderberryData: nil Metadata: SourceBatchData: RollupFlavor: kEVM CallFunctionName: sequenceBatchesEtrog ForkName: etrog ` diff --git a/etherman/sequence_batches_decode_shared.go b/etherman/sequence_batches_decode_shared.go index 272b019..e550565 100644 --- a/etherman/sequence_batches_decode_shared.go +++ b/etherman/sequence_batches_decode_shared.go @@ -96,7 +96,7 @@ func createSequencedBatchList(sequencesValidium []polygonzkevm.PolygonValidiumEt sequencedBatches := make([]SequencedBatch, len(sequencesValidium)) for i, info := range batchInfos { bn := info.num - s := polygonzkevm.PolygonRollupBaseEtrogBatchData{ + s := EtrogSequenceData{ Transactions: batchData[i].Data, ForcedGlobalExitRoot: sequencesValidium[i].ForcedGlobalExitRoot, ForcedTimestamp: sequencesValidium[i].ForcedTimestamp, @@ -113,14 +113,14 @@ func createSequencedBatchList(sequencesValidium []polygonzkevm.PolygonValidiumEt } } batch := SequencedBatch{ - BatchNumber: bn, - L1InfoRoot: &l1InfoRoot, - SequencerAddr: sequencer, - TxHash: txHash, - Nonce: nonce, - Coinbase: coinbase, - PolygonRollupBaseEtrogBatchData: &s, - Metadata: metaData, + BatchNumber: bn, + L1InfoRoot: &l1InfoRoot, + SequencerAddr: sequencer, + TxHash: txHash, + Nonce: nonce, + Coinbase: coinbase, + EtrogSequenceData: &s, + Metadata: metaData, } elderberry := &SequencedBatchElderberryData{ diff --git a/etherman/types.go b/etherman/types.go index d3ed8a4..4b453c8 100644 --- a/etherman/types.go +++ b/etherman/types.go @@ -2,11 +2,11 @@ package etherman import ( "encoding/hex" + "encoding/json" "fmt" "time" "github.com/0xPolygonHermez/zkevm-synchronizer-l1/etherman/smartcontracts/oldpolygonzkevm" - "github.com/0xPolygonHermez/zkevm-synchronizer-l1/etherman/smartcontracts/polygonzkevm" "github.com/ethereum/go-ethereum/common" ) @@ -82,6 +82,31 @@ type BananaSequenceData struct { DataAvailabilityMsg []byte } +func (b *BananaSequenceData) String() string { + res := fmt.Sprintf("CounterL1InfoRoot: %d MaxSequenceTimestamp: %d ExpectedFinalAccInputHash: %s", b.CounterL1InfoRoot, b.MaxSequenceTimestamp, b.ExpectedFinalAccInputHash.String()) + daMsg := fmt.Sprintf("DataAvailabilityMsg(%d):", len(b.DataAvailabilityMsg)) + if len(b.DataAvailabilityMsg) > 0 { + daMsg += " " + hex.EncodeToString(b.DataAvailabilityMsg) + } + return res + " " + daMsg +} + +func (b *BananaSequenceData) ToJson() string { + jsonData, err := json.Marshal(b) + if err != nil { + return "error" + } + return string(jsonData) +} + +// EtrogSequenceData also apply to Elderberry +type EtrogSequenceData struct { + Transactions []byte + ForcedGlobalExitRoot common.Hash + ForcedTimestamp uint64 + ForcedBlockHashL1 common.Hash +} + // SequencedBatch represents virtual batch type SequencedBatch struct { BatchNumber uint64 @@ -93,10 +118,11 @@ type SequencedBatch struct { // Struct used in preEtrog forks *oldpolygonzkevm.PolygonZkEVMBatchData // Struct used in Etrog + Elderberry - *polygonzkevm.PolygonRollupBaseEtrogBatchData + //*polygonzkevm.PolygonRollupBaseEtrogBatchData + *EtrogSequenceData // Struct used in Elderberry *SequencedBatchElderberryData - BananaData BananaSequenceData + BananaData *BananaSequenceData Metadata *SequencedBatchMetadata } @@ -112,14 +138,14 @@ func (s *SequencedBatch) String() string { } else { res += "PolygonZkEVMBatchData: nil\n" } - if s.PolygonRollupBaseEtrogBatchData != nil { - res += fmt.Sprintf("___PolygonRollupBaseEtrogBatchData:ForcedTimestamp: %d\n", s.PolygonRollupBaseEtrogBatchData.ForcedTimestamp) - res += fmt.Sprintf("___PolygonRollupBaseEtrogBatchData:ForcedGlobalExitRoot: %s\n", hex.EncodeToString(s.PolygonRollupBaseEtrogBatchData.ForcedGlobalExitRoot[:])) - res += fmt.Sprintf("___PolygonRollupBaseEtrogBatchData:ForcedBlockHashL1: %s\n", hex.EncodeToString(s.PolygonRollupBaseEtrogBatchData.ForcedBlockHashL1[:])) - res += fmt.Sprintf("___PolygonRollupBaseEtrogBatchData:Transactions: %s\n", hex.EncodeToString(s.PolygonRollupBaseEtrogBatchData.Transactions)) + if s.EtrogSequenceData != nil { + res += fmt.Sprintf("___EtrogSequenceData:ForcedTimestamp: %d\n", s.EtrogSequenceData.ForcedTimestamp) + res += fmt.Sprintf("___EtrogSequenceData:ForcedGlobalExitRoot: %s\n", hex.EncodeToString(s.EtrogSequenceData.ForcedGlobalExitRoot[:])) + res += fmt.Sprintf("___EtrogSequenceData:ForcedBlockHashL1: %s\n", hex.EncodeToString(s.EtrogSequenceData.ForcedBlockHashL1[:])) + res += fmt.Sprintf("___EtrogSequenceData:Transactions: %s\n", hex.EncodeToString(s.EtrogSequenceData.Transactions)) } else { - res += "PolygonRollupBaseEtrogBatchData: nil\n" + res += "EtrogSequenceData: nil\n" } if s.SequencedBatchElderberryData != nil { res += fmt.Sprintf("___SequencedBatchElderberryData:MaxSequenceTimestamp %d\n", s.SequencedBatchElderberryData.MaxSequenceTimestamp) @@ -128,12 +154,16 @@ func (s *SequencedBatch) String() string { } else { res += "SequencedBatchElderberryData: nil\n" } + if s.BananaData != nil { + res += fmt.Sprintf("BananaData: %s\n", s.BananaData.String()) + } if s.Metadata != nil { res += fmt.Sprintf("Metadata: %s\n", s.Metadata.String()) } else { res += "Metadata: nil\n" } + return res } @@ -141,8 +171,8 @@ func (s *SequencedBatch) BatchL2Data() []byte { if s.PolygonZkEVMBatchData != nil { return s.PolygonZkEVMBatchData.Transactions } - if s.PolygonRollupBaseEtrogBatchData != nil { - return s.PolygonRollupBaseEtrogBatchData.Transactions + if s.EtrogSequenceData != nil { + return s.EtrogSequenceData.Transactions } return nil } @@ -154,7 +184,7 @@ type UpdateEtrogSequence struct { TxHash common.Hash Nonce uint64 // Struct used in Etrog - *polygonzkevm.PolygonRollupBaseEtrogBatchData + *EtrogSequenceData } // ForcedBatch represents a ForcedBatch @@ -183,7 +213,7 @@ type SequencedForceBatch struct { TxHash common.Hash Timestamp time.Time Nonce uint64 - polygonzkevm.PolygonRollupBaseEtrogBatchData + EtrogSequenceData } // ForkID is a sturct to track the ForkID event. diff --git a/synchronizer/actions/etrog/processor_l1_initial_sequence_batches.go b/synchronizer/actions/etrog/processor_l1_initial_sequence_batches.go index d66599c..2f4be71 100644 --- a/synchronizer/actions/etrog/processor_l1_initial_sequence_batches.go +++ b/synchronizer/actions/etrog/processor_l1_initial_sequence_batches.go @@ -46,8 +46,8 @@ func (p *ProcessorL1InitialSequenceBatches) ProcessSequenceBatches(ctx context.C return fmt.Errorf("invalid initial batch number, expected 1 , received %d", sequencedBatches[0].BatchNumber) } - l1inforoot := sequencedBatches[0].PolygonRollupBaseEtrogBatchData.ForcedGlobalExitRoot - l1BlockTimestamp := time.Unix(int64(sequencedBatches[0].PolygonRollupBaseEtrogBatchData.ForcedTimestamp), 0) + l1inforoot := sequencedBatches[0].EtrogSequenceData.ForcedGlobalExitRoot + l1BlockTimestamp := time.Unix(int64(sequencedBatches[0].EtrogSequenceData.ForcedTimestamp), 0) seq := SequenceOfBatches{} seq.Sequence = *entities.NewSequencedBatches( diff --git a/synchronizer/actions/etrog/processor_l1_update_etrog_sequence.go b/synchronizer/actions/etrog/processor_l1_update_etrog_sequence.go index 01c96f7..5cd717d 100644 --- a/synchronizer/actions/etrog/processor_l1_update_etrog_sequence.go +++ b/synchronizer/actions/etrog/processor_l1_update_etrog_sequence.go @@ -37,7 +37,7 @@ func (p *ProcessorL1UpdateEtrogSequence) Process(ctx context.Context, forkId For } func (p *ProcessorL1UpdateEtrogSequence) processUpdateEtrogSequence(ctx context.Context, forkId ForkIdType, order etherman.Order, updateEtrogSequence etherman.UpdateEtrogSequence, blockNumber uint64, l1BlockTimestamp time.Time, dbTx stateTxType) error { - l1inforoot := common.Hash(updateEtrogSequence.PolygonRollupBaseEtrogBatchData.ForcedGlobalExitRoot) + l1inforoot := common.Hash(updateEtrogSequence.EtrogSequenceData.ForcedGlobalExitRoot) seq := SequenceOfBatches{} seq.Sequence = *entities.NewSequencedBatches( updateEtrogSequence.BatchNumber, updateEtrogSequence.BatchNumber, @@ -45,11 +45,11 @@ func (p *ProcessorL1UpdateEtrogSequence) processUpdateEtrogSequence(ctx context. l1BlockTimestamp, time.Now(), l1inforoot, string(order.Name)) ethSeqBatch := etherman.SequencedBatch{ - BatchNumber: updateEtrogSequence.BatchNumber, - L1InfoRoot: &l1inforoot, - SequencerAddr: updateEtrogSequence.SequencerAddr, - TxHash: updateEtrogSequence.TxHash, - PolygonRollupBaseEtrogBatchData: updateEtrogSequence.PolygonRollupBaseEtrogBatchData, + BatchNumber: updateEtrogSequence.BatchNumber, + L1InfoRoot: &l1inforoot, + SequencerAddr: updateEtrogSequence.SequencerAddr, + TxHash: updateEtrogSequence.TxHash, + EtrogSequenceData: updateEtrogSequence.EtrogSequenceData, } batch := entities.NewVirtualBatchFromL1(blockNumber, seq.Sequence.FromBatchNumber, uint64(forkId), ethSeqBatch) From fadbb98c37f40b18430d224414c2b47ea7337442 Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:46:19 +0200 Subject: [PATCH 5/6] add zkevm banana batches, fix unittest --- ...quence_batches_decode_banana_validium_test.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/etherman/sequence_batches_decode_banana_validium_test.go b/etherman/sequence_batches_decode_banana_validium_test.go index 702c570..74fb59e 100644 --- a/etherman/sequence_batches_decode_banana_validium_test.go +++ b/etherman/sequence_batches_decode_banana_validium_test.go @@ -24,7 +24,7 @@ PolygonZkEVMBatchData: nil ___EtrogSequenceData:ForcedTimestamp: 0 ___EtrogSequenceData:ForcedGlobalExitRoot: 0000000000000000000000000000000000000000000000000000000000000000 ___EtrogSequenceData:ForcedBlockHashL1: 0000000000000000000000000000000000000000000000000000000000000000 -___EtrogSequenceData:Transactions: 01020304 +___EtrogSequenceData:Transactions: 0b0000008b000000000b00000006000000000b0000000600000000 SequencedBatchElderberryData: nil BananaData: CounterL1InfoRoot: 1 MaxSequenceTimestamp: 1724136334 ExpectedFinalAccInputHash: 0x443448cabd1b7808f64eb3f2737180b7ef27a0a28e19afebb2981714a6492c9b DataAvailabilityMsg(85): f10249e353edebbaa84755e6216d6bf44a1be5e5b140ed6cd94f56dcd7611ad2202708675673a014fcea40c1519ae920ed7652e23e43bf837e11fc5c403539fd1b5951f5b2604c9b42e478d5e2b2437f44073ef9a6 Metadata: SourceBatchData: DA/External RollupFlavor: Validium CallFunctionName: sequenceBatchesBananaValidium ForkName: banana @@ -46,17 +46,24 @@ func TestSequencedBatchBananaValidiumDecode(t *testing.T) { require.NotNil(t, sut) txData, err := hex.DecodeString(txDataBananaValidiumHex) + require.NoError(t, err) + batchData := make([][]byte, len(batchDataBananaValidiumHex)) + for i, v := range batchDataBananaValidiumHex { + batchData[i], err = hex.DecodeString(v) + require.NoError(t, err) + } + resultGetBatchL2Data := []dataavailability.BatchL2Data{ { - Data: []byte{0x01, 0x02, 0x03, 0x04}, + Data: batchData[0], Source: dataavailability.External, }, { - Data: []byte{0x01, 0x02, 0x03, 0x04}, + Data: batchData[0], Source: dataavailability.External, }, { - Data: []byte{0x01, 0x02, 0x03, 0x04}, + Data: batchData[0], Source: dataavailability.External, }, } @@ -74,5 +81,4 @@ func TestSequencedBatchBananaValidiumDecode(t *testing.T) { res0 := res[0].String() log.Debug(res0) require.Equal(t, expectedSeqBananaValidium, res0) - } From 4c008cdb4f5ccc9c69655387b2f70175462a2e6e Mon Sep 17 00:00:00 2001 From: joanestebanr <129153821+joanestebanr@users.noreply.github.com> Date: Wed, 21 Aug 2024 12:16:31 +0200 Subject: [PATCH 6/6] feat: change warning for no register event to a info --- etherman/etherman.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etherman/etherman.go b/etherman/etherman.go index 66e192b..f05132b 100644 --- a/etherman/etherman.go +++ b/etherman/etherman.go @@ -792,7 +792,7 @@ func (etherMan *Client) processEvent(ctx context.Context, vLog types.Log, blocks log.Debug("InitL1InfoRootMap event detected. Ignoring...") return nil } - log.Warnf("Event not registered: %+v", vLog) + log.Infof("Event not registered: %+v", vLog) return nil }