From 37a4fb0b6ce3947331ce1d23c8a8be746bf8b94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Negovanovi=C4=87?= Date: Wed, 3 Apr 2024 07:41:01 +0200 Subject: [PATCH 1/2] Backup batches to a separate table when batches table get emptied --- db/migrations/state/validium-001.sql | 32 ++++++++++++++ state/pgstatestorage/pgstatestorage.go | 48 +++++++++++++++++---- state/pgstatestorage/pgstatestorage_test.go | 31 ++++++++++++- 3 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 db/migrations/state/validium-001.sql diff --git a/db/migrations/state/validium-001.sql b/db/migrations/state/validium-001.sql new file mode 100644 index 0000000000..74b867d31d --- /dev/null +++ b/db/migrations/state/validium-001.sql @@ -0,0 +1,32 @@ +-- +migrate Up + +CREATE TABLE IF NOT EXISTS state.batch_data_backup +( + batch_num BIGINT, + data BYTEA, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (batch_num, created_at) +); + +-- +migrate StatementBegin +CREATE OR REPLACE FUNCTION backup_batch() RETURNS trigger AS $$ + BEGIN + INSERT INTO state.batch_data_backup (batch_num, data) + VALUES (OLD.batch_num, OLD.raw_txs_data) + ON CONFLICT (batch_num, created_at) DO UPDATE SET + data = EXCLUDED.data; + RETURN OLD; + END; +$$ +LANGUAGE plpgsql; +-- +migrate StatementEnd + +CREATE TRIGGER backup_batch + BEFORE DELETE ON state.batch FOR EACH ROW + EXECUTE PROCEDURE backup_batch(); + +-- +migrate Down + +DROP TRIGGER IF EXISTS backup_batch ON state.batch; +DROP FUNCTION IF EXISTS backup_batch(); +DROP TABLE IF EXISTS state.batch_data_backup; diff --git a/state/pgstatestorage/pgstatestorage.go b/state/pgstatestorage/pgstatestorage.go index 613bfb2d53..4acd71fe75 100644 --- a/state/pgstatestorage/pgstatestorage.go +++ b/state/pgstatestorage/pgstatestorage.go @@ -372,32 +372,64 @@ func (p *PostgresStorage) GetBatchL2DataByNumber(ctx context.Context, batchNumbe // GetBatchL2DataByNumbers returns the batch L2 data of the given batch numbers. The data is a union of state.batch and state.forced_batch tables. func (p *PostgresStorage) GetBatchL2DataByNumbers(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) { const getBatchL2DataByBatchNumber = ` - SELECT batch_num, raw_txs_data FROM state.batch WHERE batch_num = ANY($1) + SELECT batch_num, raw_txs_data FROM state.batch WHERE batch_num = ANY($1) UNION SELECT forced_batch_num, convert_from(decode(raw_txs_data, 'hex'), 'UTF8')::bytea FROM state.forced_batch WHERE forced_batch_num = ANY($2) ` q := p.getExecQuerier(dbTx) rows, err := q.Query(ctx, getBatchL2DataByBatchNumber, batchNumbers, batchNumbers) + if errors.Is(err, pgx.ErrNoRows) { + return p.GetBatchL2DataByNumbersFromBackup(ctx, batchNumbers, dbTx) + } else if err != nil { + return nil, err + } + defer rows.Close() + + batchL2DataMap, err := readBatchDataResults(rows, batchNumbers) + if err != nil { + return nil, err + } + + if len(batchL2DataMap) == 0 { + return p.GetBatchL2DataByNumbersFromBackup(ctx, batchNumbers, dbTx) + } + + return batchL2DataMap, nil +} + +// GetBatchL2DataByNumbersFromBackup returns the batch L2 data of the given batch number from the backup table +func (p *PostgresStorage) GetBatchL2DataByNumbersFromBackup(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) { + getBatchL2DataByBatchNumber := ` + SELECT batch_num, data FROM state.batch_data_backup + WHERE batch_num = ANY($1) + ORDER BY created_at DESC + ` + q := p.getExecQuerier(dbTx) + rows, err := q.Query(ctx, getBatchL2DataByBatchNumber, batchNumbers) if errors.Is(err, pgx.ErrNoRows) { return nil, state.ErrNotFound } else if err != nil { return nil, err } defer rows.Close() - batchL2DataMap := make(map[uint64][]byte) - for rows.Next() { + + return readBatchDataResults(rows, batchNumbers) +} + +// readBatchDataResults retrieves batch data from the provided result set +func readBatchDataResults(results pgx.Rows, batchNumbers []uint64) (map[uint64][]byte, error) { + batchL2DataMap := make(map[uint64][]byte, len(batchNumbers)) + for results.Next() { var ( batchNum uint64 batchL2Data []byte ) - err := rows.Scan(&batchNum, &batchL2Data) - if err != nil { + + if err := results.Scan(&batchNum, &batchL2Data); err != nil { return nil, err } batchL2DataMap[batchNum] = batchL2Data } - if len(batchL2DataMap) == 0 { - return nil, state.ErrNotFound - } + return batchL2DataMap, nil } diff --git a/state/pgstatestorage/pgstatestorage_test.go b/state/pgstatestorage/pgstatestorage_test.go index b51514a265..2a41f0f526 100644 --- a/state/pgstatestorage/pgstatestorage_test.go +++ b/state/pgstatestorage/pgstatestorage_test.go @@ -1142,7 +1142,10 @@ func TestGetBatchL2DataByNumber(t *testing.T) { // empty case var batchNum uint64 = 4 - const openBatchSQL = "INSERT INTO state.batch (batch_num, raw_txs_data, wip) VALUES ($1, $2, false)" + const ( + openBatchSQL = "INSERT INTO state.batch (batch_num, raw_txs_data, wip) VALUES ($1, $2, false)" + resetBatchesSQL = "DELETE FROM state.batch" + ) _, err = tx.Exec(ctx, openBatchSQL, batchNum, nil) require.NoError(t, err) data, err := testState.GetBatchL2DataByNumber(ctx, batchNum, tx) @@ -1162,6 +1165,32 @@ func TestGetBatchL2DataByNumber(t *testing.T) { allData, err := testState.GetBatchL2DataByNumbers(ctx, multiGet, tx) require.NoError(t, err) require.Equal(t, expectedData, allData[uint64(5)]) + + // Force backup + _, err = tx.Exec(ctx, resetBatchesSQL) + require.NoError(t, err) + + // Get batch 4 from backup + batchNum = 4 + data, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx) + require.NoError(t, err) + assert.Nil(t, data) + + // Get batch 5 from backup + batchNum = 5 + actualData, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx) + require.NoError(t, err) + assert.Equal(t, expectedData, actualData) + + // Update batch 5 and get it from backup + expectedData = []byte("new foo bar") + _, err = tx.Exec(ctx, openBatchSQL, batchNum, expectedData) + require.NoError(t, err) + _, err = tx.Exec(ctx, resetBatchesSQL) + require.NoError(t, err) + actualData, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx) + require.NoError(t, err) + assert.Equal(t, expectedData, actualData) } func TestGetBatchL2DataByNumbers(t *testing.T) { From 0f5f17dc77ff06ed30f99bfa4b6f5a953ce9573b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Negovanovi=C4=87?= Date: Wed, 3 Apr 2024 14:10:40 +0200 Subject: [PATCH 2/2] Update the diff --- docs/diff/diff.html | 4560 +++++++++++++++++++++++++++++++++---------- 1 file changed, 3535 insertions(+), 1025 deletions(-) diff --git a/docs/diff/diff.html b/docs/diff/diff.html index 95ea6d0571..a2ae08fd58 100644 --- a/docs/diff/diff.html +++ b/docs/diff/diff.html @@ -54,7 +54,7 @@

zkEVM node vs CDK validium node

zkevm-node version: v0.6.0

- Files changed (81) + Files changed (83) hide show
@@ -347,6 +347,18 @@

zkEVM node vs CDK validium node

zkevm-node version: v0.6.0

+
  • + + {/home/stefan/go/src/Polygon/zkevm-node → .}/db/migrations/state/validium-001.sql + + +32 + -0 + + +
  • zkevm-node version: v0.6.0

    {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/client/zkevm.go - +34 + +29 -0
    @@ -527,6 +539,18 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

  • +
  • + + {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_zkevm_test.go + + +29 + -0 + + +
  • zkevm-node version: v0.6.0

    {/home/stefan/go/src/Polygon/zkevm-node → .}/state/pgstatestorage/pgstatestorage.go - +46 + +78 -0
    @@ -786,7 +810,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    {/home/stefan/go/src/Polygon/zkevm-node → .}/state/pgstatestorage/pgstatestorage_test.go - +80 + +109 -1 @@ -32543,7 +32567,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + - var nums []*big.Int + nums := make([]*big.Int, 0, len(batchNums))
    @@ -32653,7 +32677,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + - var result [][]byte + result := make([][]byte, 0, len(batchNums))
    @@ -43315,12 +43339,12 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

  • -
    +
    {/home/stefan/go/src/Polygon/zkevm-node → .}/diffgen.sh + {/home/stefan/go/src/Polygon/zkevm-node → .}/db/migrations/state/validium-001.sql RENAMED
    + + + +
    +
    +
    +
    + + + + + - - + + + - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + - - + + + + + + + + + + + + + + +
    +
     
    +
    - + + 1 -
    -   +
    +
    + + + -- +migrate Up +
    +
    + 2 + +
    + +
    - + + 3 -
    -   +
    +
    + + + CREATE TABLE IF NOT EXISTS state.batch_data_backup +
    +
    + 4 + +
    + + + ( +
    +
    + 5 + +
    + + + batch_num BIGINT, +
    +
    + 6 + +
    + + + data BYTEA, +
    +
    + 7 + +
    + + + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, +
    +
    + 8 + +
    + + + PRIMARY KEY (batch_num, created_at) +
    +
    + 9 + +
    + + + ); +
    +
    + 10 + +
    + +
    - + + 11 -
    -   +
    +
    + + + -- +migrate StatementBegin +
    +
    + 12 + +
    + + + CREATE OR REPLACE FUNCTION backup_batch() RETURNS trigger AS $$ +
    +
    + 13 + +
    + + + BEGIN +
    +
    + 14 + +
    + + + INSERT INTO state.batch_data_backup (batch_num, data) +
    +
    + 15 + +
    + + + VALUES (OLD.batch_num, OLD.raw_txs_data) +
    +
    + 16 + +
    + + + ON CONFLICT (batch_num, created_at) DO UPDATE SET +
    +
    + 17 + +
    + + + data = EXCLUDED.data; +
    +
    + 18 + +
    + + + RETURN OLD; +
    +
    + 19 + +
    + + + END; +
    +
    + 20 + +
    + + + $$ +
    +
    + 21 + +
    + + + LANGUAGE plpgsql; +
    +
    + 22 + +
    + + + -- +migrate StatementEnd +
    +
    + 23 + +
    + +
    - + + 24 -
    -   +
    +
    + + + CREATE TRIGGER backup_batch +
    +
    + 25 + +
    + + + BEFORE DELETE ON state.batch FOR EACH ROW +
    +
    + 26 + +
    + + + EXECUTE PROCEDURE backup_batch(); +
    +
    + 27 + +
    + +
    - + + 28 -
    -   +
    +
    + + + -- +migrate Down +
    +
    + 29 + +
    + + +
    +
    +
    + 30 + +
    + + + DROP TRIGGER IF EXISTS backup_batch ON state.batch; +
    +
    + 31 + +
    + + + DROP FUNCTION IF EXISTS backup_batch(); +
    +
    + 32 + +
    + + + DROP TABLE IF EXISTS state.batch_data_backup; +
    +
    +
    +
    + + +
    +
    + + {/home/stefan/go/src/Polygon/zkevm-node → .}/diffgen.sh + RENAMED + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -62918,7 +63625,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - - - - - - - - - - - @@ -63421,7 +64078,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63441,7 +64098,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63451,7 +64108,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63481,7 +64138,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63491,7 +64148,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63501,7 +64158,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63531,7 +64188,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63541,7 +64198,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63551,7 +64208,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63561,7 +64218,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63571,7 +64228,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63581,7 +64238,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63591,7 +64248,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63601,7 +64258,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63611,7 +64268,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63621,7 +64278,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63631,7 +64288,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63641,7 +64298,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -63651,87 +64308,231 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - - + + +
    +
    @@ -0,0 +1,47 @@
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +  
    -
    @@ -58,6 +58,40 @@
    +
    @@ -58,6 +58,35 @@
    @@ -63233,56 +63940,6 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    -
    @@ -63401,7 +64058,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + - var list []types.BatchNumber + batchNumbers := make([]types.BatchNumber, 0, len(numbers))
    + - list = append(list, types.BatchNumber(n.Int64())) + batchNumbers = append(batchNumbers, types.BatchNumber(n.Int64()))
    + - if len(list) == 0 { + if len(batchNumbers) == 0 {
    + - list = append(list, types.LatestBatchNumber) + batchNumbers = append(batchNumbers, types.LatestBatchNumber)
    + - var batchNumbers []string + response, err := JSONRPCCall(c.url, "zkevm_getBatchDataByNumbers", &types.BatchFilter{Numbers: batchNumbers})
    + - for _, n := range list { + if err != nil {
    + - batchNumbers = append(batchNumbers, n.StringOrHex()) + return nil, err
    + - response, err := JSONRPCCall(c.url, "zkevm_getBatchDataByNumbers", batchNumbers, true) + if response.Error != nil {
    + - if err != nil { + return nil, response.Error.RPCError()
    + - return nil, err + }
    + - } +
    + -
    + var result *types.BatchDataResult
    + - if response.Error != nil { + err = json.Unmarshal(response.Result, &result)
    + - return nil, response.Error.RPCError() + if err != nil {
    + - } + return nil, err
    + -
    + }
    + - var result *types.BatchDataResult +
    + - err = json.Unmarshal(response.Result, &result) + return result.Data, nil
    + - if err != nil { + }
    + - return nil, err +
    + 90 +
    - + - } +   + // ExitRootsByGER returns the exit roots accordingly to the provided Global Exit Root
    + 91 +
    - + -
    +   + func (c *Client) ExitRootsByGER(ctx context.Context, globalExitRoot common.Hash) (*types.ExitRoots, error) {
    + 92 +
    - + - return result.Data, nil +   + response, err := JSONRPCCall(c.url, "zkevm_getExitRootsByGER", globalExitRoot.String())
    +
    +
    +
    +
    +
    +
    + + {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_eth.go + RENAMED + +
    +
    +
    +
    + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63739,21 +64540,6 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    +
    @@ -106,7 +106,7 @@
    +
    - 93 + + 106 +
    - + - } +   + result, err := e.state.ProcessUnsignedTransaction(ctx, tx, sender, blockToProcess, true, dbTx)
    - 94 + + 107 +
    - + +   + if err != nil { +
    +
    + 108 + +
    +   + errMsg := fmt.Sprintf("failed to execute the unsigned transaction: %v", err.Error()) +
    +
    + 109 + +
    + - + logError := !executor.IsROMOutOfCountersError(executor.RomErrorCode(err)) && !errors.Is(err, runtime.ErrOutOfGas) +
    +
    + 110 + +
    +   + return RPCErrorResponse(types.DefaultErrorCode, errMsg, nil, logError) +
    +
    + 111 + +
    +   + } +
    +
    + 112 + +
    +  
    +
    @@ -941,6 +941,9 @@
    +
    - 95 + 941
      - // ExitRootsByGER returns the exit roots accordingly to the provided Global Exit Root + if e.cfg.SequencerNodeURI != "" {
    - 96 + 942
      - func (c *Client) ExitRootsByGER(ctx context.Context, globalExitRoot common.Hash) (*types.ExitRoots, error) { + return e.relayTxToSequencerNode(input)
    - 97 + 943
      - response, err := JSONRPCCall(c.url, "zkevm_getExitRootsByGER", globalExitRoot.String()) + } else { +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + 944 + +
    +   + ip := "" +
    +
    + 945 + +
    +   + ips := httpRequest.Header.Get("X-Forwarded-For") +
    +
    + 946 + +
    +   +
    -
    -
    -
    -
    - - {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_eth.go - RENAMED - -
    -
    @@ -63761,7 +64547,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - @@ -63836,7 +64622,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - -
    -
    @@ -106,7 +106,7 @@
    +
     
    @@ -63794,13 +64580,13 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + 109 +
    - - - logError := !executor.IsROMOutOfCountersError(executor.RomErrorCode(err)) && !errors.Is(err, runtime.ErrOutOfGas) + + + logError := !executor.IsROMOutOfCountersError(executor.RomErrorCode(err)) && !(errors.Is(err, runtime.ErrOutOfGas))
    -
    @@ -941,6 +941,9 @@
    +
     
    @@ -63869,38 +64655,38 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - + + 944 -
    -   -
    +
    +
    + + + if err := checkPolicy(context.Background(), e.pool, input); err != nil {
    - + + 945 -
    -   -
    +
    +
    + + + return RPCErrorResponse(types.AccessDeniedCode, err.Error(), nil, false)
    - + + 946 -
    -   -
    +
    +
    + + + }
    - 944 + 947
    @@ -63910,7 +64696,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 945 + 948
    @@ -63920,7 +64706,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 946 + 949
    @@ -63933,6 +64719,21 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    +
    +
    +
    +
    + + {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_eth_test.go + RENAMED + +
    +
    @@ -63940,230 +64741,161 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - - - - - - - - - - - - - - - - -
    -
     
    +
    @@ -6,6 +6,7 @@
    - 106 + 6
      - result, err := e.state.ProcessUnsignedTransaction(ctx, tx, sender, blockToProcess, true, dbTx) + "errors"
    - 107 + 7
      - if err != nil { + "fmt"
    - 108 + 8
      - errMsg := fmt.Sprintf("failed to execute the unsigned transaction: %v", err.Error()) + "math/big"
    - 109 + + -
    - + - logError := !executor.IsROMOutOfCountersError(executor.RomErrorCode(err)) && !(errors.Is(err, runtime.ErrOutOfGas)) +
    +
    +   +
    - 110 + 9
      - return RPCErrorResponse(types.DefaultErrorCode, errMsg, nil, logError) + "sync"
    - 111 + 10
      - } + "testing"
    - 112 + 11
      -
    + "time"
    -
     
    -
    - 941 - -
    -   - if e.cfg.SequencerNodeURI != "" { -
    +
    @@ -5416,3 +5417,237 @@
    - 942 + 5416
      - return e.relayTxToSequencerNode(input) + assert.ElementsMatch(t, []int{13, 14, 15}, results[4])
    - 943 + 5417
      - } else { -
    -
    - 944 - -
    - + - if err := checkPolicy(context.Background(), e.pool, input); err != nil { -
    -
    - 945 - -
    - + - return RPCErrorResponse(types.AccessDeniedCode, err.Error(), nil, false) -
    -
    - 946 - -
    - + - } + assert.ElementsMatch(t, []int{16}, results[5])
    - 947 + 5418
      - ip := "" + }
    - 948 + + -
    +
    +
      - ips := httpRequest.Header.Get("X-Forwarded-For") +
    - 949 + + -
    +
    +
     
    -
    -
    -
    -
    -
    -
    - - {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_eth_test.go - RENAMED - -
    -
    -
    -
    - - - - - - - - - - - @@ -64177,188 +64909,63 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -69570,7 +70177,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -69740,7 +70347,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -69930,12 +70537,12 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    -
    +
    {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/policy.go + {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/endpoints_zkevm_test.go RENAMED
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    -
    @@ -6,6 +6,7 @@
    -
    - 6 + + -
    +
    +
      - "errors" +
    - 7 + + -
    +
    +
      - "fmt" +
    - 8 + + -
    +
    +
      - "math/big" +
    - 9 + + -
    +
    +
      - "sync" +
    - 10 + + -
    +
    +
      - "testing" +
    - 11 + + -
    +
    +
      - "time" +
    -
    @@ -5416,3 +5417,237 @@
    -
    - 5416 + + -
    +
    +
      - assert.ElementsMatch(t, []int{13, 14, 15}, results[4]) +
    - 5417 + + -
    +
    +
      - assert.ElementsMatch(t, []int{16}, results[5]) +
    - 5418 + + -
    +
    +
      - } -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    +
    + - var batchNumbers []uint64 + batchNumbers := make([]uint64, 0, len(filter.Numbers))
    + - var ret []*types.BatchData + ret := make([]*types.BatchData, 0, len(batchNumbers))
    -
    @@ -0,0 +1,61 @@
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    -
    - - -
    -   -
    -
    +
    @@ -2705,3 +2705,32 @@
    - - -
    -   -
    -
    -
    - + + 2705 -
    +
    +
      -
    + })
    - + + 2706 -
    +
    +
      -
    + }
    - + + 2707 -
    +
    +
      -
    + } +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
     
    +
    + 2705 + +
    +   + }) +
    +
    + 2706 + +
    +   + } +
    +
    + 2707 + +
    +   + } +
    +
    + 2708 + +
    + + +
    +
    +
    + 2709 + +
    + + + func TestClient_BatchesByNumbers(t *testing.T) { +
    +
    + 2710 + +
    + + + const batchesCount = 6 +
    +
    + 2711 + +
    + + +
    +
    +
    + 2712 + +
    + + + s, m, _ := newSequencerMockedServer(t) +
    +
    + 2713 + +
    + + + defer s.Stop() +
    +
    + 2714 + +
    + + +
    +
    +
    + 2715 + +
    + + + batchesDataMap := make(map[uint64][]byte, batchesCount) +
    +
    + 2716 + +
    + + + for i := 0; i < batchesCount; i++ { +
    +
    + 2717 + +
    + + + batchesDataMap[uint64(i+1)] = []byte(fmt.Sprintf("batch %d data", i+1)) +
    +
    + 2718 + +
    + + + } +
    +
    + 2719 + +
    + + +
    +
    +
    + 2720 + +
    + + + m.State.On("GetBatchL2DataByNumbers", mock.Anything, mock.Anything, mock.Anything). +
    +
    + 2721 + +
    + + + Return(batchesDataMap, nil).Once() +
    +
    + 2722 + +
    + + +
    +
    +
    + 2723 + +
    + + + m.State.On("BeginStateTransaction", context.Background()). +
    +
    + 2724 + +
    + + + Return(m.DbTx, nil).Once() +
    +
    + 2725 + +
    + + +
    +
    +
    + 2726 + +
    + + + m.DbTx.On("Commit", context.Background()).Return(nil).Once() +
    +
    + 2727 + +
    + + +
    +
    +
    + 2728 + +
    + + + zkEVMClient := client.NewClient(s.ServerURL) +
    +
    + 2729 + +
    + + + reqBatchesNum := []*big.Int{big.NewInt(1), big.NewInt(3), big.NewInt(4)} +
    +
    + 2730 + +
    + + + result, err := zkEVMClient.BatchesByNumbers(context.Background(), reqBatchesNum) +
    +
    + 2731 + +
    + + + require.NoError(t, err) +
    +
    + 2732 + +
    + + + require.Len(t, result, len(reqBatchesNum)) +
    +
    + 2733 + +
    + + + for i, batchNum := range reqBatchesNum { +
    +
    + 2734 + +
    + + + require.Equal(t, hex.EncodeToHex(batchesDataMap[batchNum.Uint64()]), result[i].BatchL2Data.Hex()) +
    +
    + 2735 + +
    + + + } +
    +
    + 2736 + +
    + + + } +
    +
    +
    +
    +
    +
    +
    +
    + + {/home/stefan/go/src/Polygon/zkevm-node → .}/jsonrpc/policy.go + RENAMED + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -85330,33 +86620,366 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -150,6 +150,8 @@
    - + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    @@ -0,0 +1,61 @@
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    - 150 + + 150 + +
    +   + GetBlockByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*Block, error) +
    +
    + 151 + +
    +   + GetVirtualBatchParentHash(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    +
    + 152 + +
    +   + GetForcedBatchParentHash(ctx context.Context, forcedBatchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + 153 + +
    +   + GetLatestBatchGlobalExitRoot(ctx context.Context, dbTx pgx.Tx) (common.Hash, error) +
    +
    + 154 + +
    +   + GetL2TxHashByTxHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (*common.Hash, error) +
    +
    + 155 + +
    +   + GetSyncInfoData(ctx context.Context, dbTx pgx.Tx) (SyncInfoDataOnStorage, error) +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
     
    +
    + 150 + +
    +   + GetBlockByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*Block, error) +
    +
    + 151 + +
    +   + GetVirtualBatchParentHash(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    +
    + 152 + +
    +   + GetForcedBatchParentHash(ctx context.Context, forcedBatchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    +
    + 153 + +
    + + + GetBatchL2DataByNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) ([]byte, error) +
    +
    + 154 + +
    + + + GetBatchL2DataByNumbers(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) +
    +
    + 155 + +
    +   + GetLatestBatchGlobalExitRoot(ctx context.Context, dbTx pgx.Tx) (common.Hash, error) +
    +
    + 156 + +
    +   + GetL2TxHashByTxHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (*common.Hash, error) +
    +
    + 157 + +
    +   + GetSyncInfoData(ctx context.Context, dbTx pgx.Tx) (SyncInfoDataOnStorage, error) +
    +
    +
    +
    +
    +
    +
    +
    + + {/home/stefan/go/src/Polygon/zkevm-node → .}/state/pgstatestorage/pgstatestorage.go + RENAMED + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - @@ -85380,186 +87003,173 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - - - - - - - - -
    +
    @@ -355,3 +355,81 @@
    +
    + 355 + +
    +   + } +
    +
    + 356 + +
    +   + return nativeBlockHashes, nil +
    +
    + 357 + +
    +   + } +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + -
    +
    +
      - GetBlockByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*Block, error) +
    - 151 + + -
    +
    +
      - GetVirtualBatchParentHash(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    - 152 + + -
    +
    +
      - GetForcedBatchParentHash(ctx context.Context, forcedBatchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    - 153 + + -
    +
    +
      - GetLatestBatchGlobalExitRoot(ctx context.Context, dbTx pgx.Tx) (common.Hash, error) +
    - 154 + + -
    +
    +
      - GetL2TxHashByTxHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (*common.Hash, error) +
    - 155 + + -
    +
    +
      - GetSyncInfoData(ctx context.Context, dbTx pgx.Tx) (SyncInfoDataOnStorage, error) +
    -
    + + + + + +
    +   +
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
     
    - 150 + + -
    +
    +
      - GetBlockByNumber(ctx context.Context, blockNumber uint64, dbTx pgx.Tx) (*Block, error) +
    - 151 + + -
    +
    +
      - GetVirtualBatchParentHash(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    - 152 + + -
    +
    +
      - GetForcedBatchParentHash(ctx context.Context, forcedBatchNumber uint64, dbTx pgx.Tx) (common.Hash, error) +
    - 153 + + -
    - + - GetBatchL2DataByNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) ([]byte, error) +
    +
    +   +
    - 154 + + -
    - + - GetBatchL2DataByNumbers(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) +
    +
    +   +
    - 155 + + -
    +
    +
      - GetLatestBatchGlobalExitRoot(ctx context.Context, dbTx pgx.Tx) (common.Hash, error) +
    - 156 + + -
    +
    +
      - GetL2TxHashByTxHash(ctx context.Context, hash common.Hash, dbTx pgx.Tx) (*common.Hash, error) +
    - 157 + + -
    +
    +
      - GetSyncInfoData(ctx context.Context, dbTx pgx.Tx) (SyncInfoDataOnStorage, error) +
    -
    + + + + + +
    +   +
    -
    -
    -
    -
    - - {/home/stefan/go/src/Polygon/zkevm-node → .}/state/pgstatestorage/pgstatestorage.go - RENAMED - -
    -
    -
    -
    - - - - - - - - - - - + + + @@ -86027,88 +87637,358 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    -
    @@ -355,3 +355,49 @@
    - 355 + + -
    +
    +
      - } +
    - 356 + + -
    +
    +
      - return nativeBlockHashes, nil +
    - 357 + + -
    +
    +
      - } +
    +
    +
    + + +
    +   +
    -
    -
    - - - - -
    -
     
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87696,7 +89916,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87706,7 +89926,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87716,7 +89936,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87726,7 +89946,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87736,7 +89956,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87746,7 +89966,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87756,7 +89976,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87766,7 +89986,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87776,7 +89996,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87786,7 +90006,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87796,7 +90016,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87806,7 +90026,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87816,7 +90036,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87826,7 +90046,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87836,7 +90056,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87846,7 +90066,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87856,7 +90076,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87866,7 +90086,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87876,7 +90096,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87886,7 +90106,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87896,7 +90116,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87906,7 +90126,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87916,7 +90136,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87926,7 +90146,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87936,7 +90156,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87956,7 +90176,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87966,7 +90186,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87976,7 +90196,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87986,7 +90206,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -87996,7 +90216,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88006,7 +90226,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88016,7 +90236,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88026,7 +90246,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88036,7 +90256,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88046,7 +90266,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88056,7 +90276,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88066,7 +90286,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88086,7 +90306,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88096,7 +90316,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88106,7 +90326,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88116,7 +90336,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88126,7 +90346,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88136,7 +90356,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88146,7 +90366,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88156,7 +90376,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88166,7 +90386,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88176,7 +90396,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88196,7 +90416,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88206,7 +90426,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88216,7 +90436,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88226,7 +90446,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88236,7 +90456,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88246,7 +90466,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88256,7 +90476,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88266,7 +90486,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88276,7 +90496,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88286,7 +90506,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88296,7 +90516,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88306,7 +90526,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88316,7 +90536,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    @@ -88326,13 +90546,303 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
     
    +
    + 355 + +
    +   + } +
    +
    + 356 + +
    +   + return nativeBlockHashes, nil +
    +
    + 357 + +
    +   + } +
    +
    + 358 + +
    + + +
    +
    +
    + 359 + +
    + + + // GetBatchL2DataByNumber returns the batch L2 data of the given batch number. +
    +
    + 360 + +
    + + + func (p *PostgresStorage) GetBatchL2DataByNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) ([]byte, error) { +
    +
    + 361 + +
    + + + batchData, err := p.GetBatchL2DataByNumbers(ctx, []uint64{batchNumber}, dbTx) +
    +
    + 362 + +
    + + + if err != nil { +
    +
    + 363 + +
    + + + return nil, err +
    +
    + 364 + +
    + + + } +
    +
    + 365 + +
    + + + data, ok := batchData[batchNumber] +
    +
    + 366 + +
    + + + if !ok { +
    +
    + 367 + +
    + + + return nil, state.ErrNotFound +
    +
    + 368 + +
    + + + } +
    +
    + 369 + +
    + + + return data, nil +
    +
    + 370 + +
    + + + } +
    +
    + 371 + +
    + + +
    +
    +
    + 372 + +
    + + + // GetBatchL2DataByNumbers returns the batch L2 data of the given batch numbers. The data is a union of state.batch and state.forced_batch tables. +
    +
    + 373 + +
    + + + func (p *PostgresStorage) GetBatchL2DataByNumbers(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) { +
    +
    + 374 + +
    + + + const getBatchL2DataByBatchNumber = ` +
    +
    + 375 + +
    + + + SELECT batch_num, raw_txs_data FROM state.batch WHERE batch_num = ANY($1) +
    +
    + 376 + +
    + + + UNION +
    +
    + 377 + +
    + + + SELECT forced_batch_num, convert_from(decode(raw_txs_data, 'hex'), 'UTF8')::bytea FROM state.forced_batch WHERE forced_batch_num = ANY($2) +
    +
    + 378 + +
    + + + ` +
    +
    + 379 + +
    + + + q := p.getExecQuerier(dbTx) +
    +
    + 380 + +
    + + + rows, err := q.Query(ctx, getBatchL2DataByBatchNumber, batchNumbers, batchNumbers) +
    +
    + 381 + +
    + + + if errors.Is(err, pgx.ErrNoRows) { +
    - 355 + + 382 +
    -   - } + + + return p.GetBatchL2DataByNumbersFromBackup(ctx, batchNumbers, dbTx)
    - 356 + + 383 +
    -   - return nativeBlockHashes, nil + + + } else if err != nil {
    - 357 + + 384 +
    -   - } + + + return nil, err
    - 358 + 385
    + -
    + }
    - 359 + 386
    + - // GetBatchL2DataByNumber returns the batch L2 data of the given batch number. + defer rows.Close()
    - 360 + 387
    + - func (p *PostgresStorage) GetBatchL2DataByNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) ([]byte, error) { +
    - 361 + 388
    + - batchData, err := p.GetBatchL2DataByNumbers(ctx, []uint64{batchNumber}, dbTx) + batchL2DataMap, err := readBatchDataResults(rows, batchNumbers)
    - 362 + 389
    @@ -86118,7 +87998,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 363 + 390
    @@ -86128,7 +88008,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 364 + 391
    @@ -86138,37 +88018,37 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 365 + 392
    + - data, ok := batchData[batchNumber] +
    - 366 + 393
    + - if !ok { + if len(batchL2DataMap) == 0 {
    - 367 + 394
    + - return nil, state.ErrNotFound + return p.GetBatchL2DataByNumbersFromBackup(ctx, batchNumbers, dbTx)
    - 368 + 395
    @@ -86178,17 +88058,27 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 369 + 396
    + - return data, nil +
    - 370 + 397 + +
    + + + return batchL2DataMap, nil +
    +
    + 398
    @@ -86198,7 +88088,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 371 + 399
    @@ -86208,77 +88098,77 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 372 + 400
    + - // GetBatchL2DataByNumbers returns the batch L2 data of the given batch numbers. The data is a union of state.batch and state.forced_batch tables. + // GetBatchL2DataByNumbersFromBackup returns the batch L2 data of the given batch number from the backup table
    - 373 + 401
    + - func (p *PostgresStorage) GetBatchL2DataByNumbers(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) { + func (p *PostgresStorage) GetBatchL2DataByNumbersFromBackup(ctx context.Context, batchNumbers []uint64, dbTx pgx.Tx) (map[uint64][]byte, error) {
    - 374 + 402
    + - const getBatchL2DataByBatchNumber = ` + getBatchL2DataByBatchNumber := `
    - 375 + 403
    + - SELECT batch_num, raw_txs_data FROM state.batch WHERE batch_num = ANY($1) + SELECT batch_num, data FROM state.batch_data_backup
    - 376 + 404
    + - UNION + WHERE batch_num = ANY($1)
    - 377 + 405
    + - SELECT forced_batch_num, convert_from(decode(raw_txs_data, 'hex'), 'UTF8')::bytea FROM state.forced_batch WHERE forced_batch_num = ANY($2) + ORDER BY created_at DESC
    - 378 + 406
    + - ` + `
    - 379 + 407
    @@ -86288,17 +88178,17 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 380 + 408
    + - rows, err := q.Query(ctx, getBatchL2DataByBatchNumber, batchNumbers, batchNumbers) + rows, err := q.Query(ctx, getBatchL2DataByBatchNumber, batchNumbers)
    - 381 + 409
    @@ -86308,7 +88198,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 382 + 410
    @@ -86318,7 +88208,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 383 + 411
    @@ -86328,7 +88218,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 384 + 412
    @@ -86338,7 +88228,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 385 + 413
    @@ -86348,7 +88238,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 386 + 414
    @@ -86358,147 +88248,177 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 387 + 415
    + - batchL2DataMap := make(map[uint64][]byte) +
    - 388 + 416
    + - for rows.Next() { + return readBatchDataResults(rows, batchNumbers)
    - 389 + 417
    + - var ( + }
    - 390 + 418
    + - batchNum uint64 +
    - 391 + 419
    + - batchL2Data []byte + // readBatchDataResults retrieves batch data from the provided result set
    - 392 + 420
    + - ) + func readBatchDataResults(results pgx.Rows, batchNumbers []uint64) (map[uint64][]byte, error) {
    - 393 + 421
    + - err := rows.Scan(&batchNum, &batchL2Data) + batchL2DataMap := make(map[uint64][]byte, len(batchNumbers))
    - 394 + 422
    + - if err != nil { + for results.Next() {
    - 395 + 423
    + - return nil, err + var (
    - 396 + 424
    + - } + batchNum uint64
    - 397 + 425
    + - batchL2DataMap[batchNum] = batchL2Data + batchL2Data []byte
    - 398 + 426
    + - } + )
    - 399 + 427
    + - if len(batchL2DataMap) == 0 { +
    - 400 + 428
    + - return nil, state.ErrNotFound + if err := results.Scan(&batchNum, &batchL2Data); err != nil {
    - 401 + 429 + +
    + + + return nil, err +
    +
    + 430 + +
    + + + } +
    +
    + 431 + +
    + + + batchL2DataMap[batchNum] = batchL2Data +
    +
    + 432
    @@ -86508,7 +88428,17 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 402 + 433 + +
    + + +
    +
    +
    + 434
    @@ -86518,7 +88448,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 403 + 435
    @@ -86553,7 +88483,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    -
    @@ -1132,6 +1132,82 @@
    +
    @@ -1132,6 +1132,111 @@
    @@ -87338,6 +89268,296 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    + + +
    +   +
    +
    +
    +
    @@ -87378,7 +89598,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    -
    @@ -1333,6 +1409,10 @@
    +
    @@ -1333,6 +1438,10 @@
    @@ -87483,7 +89703,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    -
    @@ -1409,5 +1489,4 @@
    +
    @@ -1409,5 +1518,4 @@
    @@ -87686,7 +89906,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    + - const openBatchSQL = "INSERT INTO state.batch (batch_num, raw_txs_data, wip) VALUES ($1, $2, false)" + const (
    + - _, err = tx.Exec(ctx, openBatchSQL, batchNum, nil) + openBatchSQL = "INSERT INTO state.batch (batch_num, raw_txs_data, wip) VALUES ($1, $2, false)"
    + - require.NoError(t, err) + resetBatchesSQL = "DELETE FROM state.batch"
    + - data, err := testState.GetBatchL2DataByNumber(ctx, batchNum, tx) + )
    + - require.NoError(t, err) + _, err = tx.Exec(ctx, openBatchSQL, batchNum, nil)
    + - assert.Nil(t, data) + require.NoError(t, err)
    + -
    + data, err := testState.GetBatchL2DataByNumber(ctx, batchNum, tx)
    + - // not empty case + require.NoError(t, err)
    + - expectedData := []byte("foo bar") + assert.Nil(t, data)
    + - batchNum = 5 +
    + - _, err = tx.Exec(ctx, openBatchSQL, batchNum, expectedData) + // not empty case
    + - require.NoError(t, err) + expectedData := []byte("foo bar")
    + - actualData, err := testState.GetBatchL2DataByNumber(ctx, batchNum, tx) + batchNum = 5
    + - require.NoError(t, err) + _, err = tx.Exec(ctx, openBatchSQL, batchNum, expectedData)
    + - assert.Equal(t, expectedData, actualData) + require.NoError(t, err)
    + -
    + actualData, err := testState.GetBatchL2DataByNumber(ctx, batchNum, tx)
    + - multiGet := []uint64{uint64(4), uint64(5), uint64(6)} + require.NoError(t, err)
    + - allData, err := testState.GetBatchL2DataByNumbers(ctx, multiGet, tx) + assert.Equal(t, expectedData, actualData)
    + - require.NoError(t, err) +
    + - require.Equal(t, expectedData, allData[uint64(5)]) + multiGet := []uint64{uint64(4), uint64(5), uint64(6)}
    + - } + allData, err := testState.GetBatchL2DataByNumbers(ctx, multiGet, tx)
    + -
    + require.NoError(t, err)
    + - func TestGetBatchL2DataByNumbers(t *testing.T) { + require.Equal(t, expectedData, allData[uint64(5)])
    + - initOrResetDB() +
    + - ctx := context.Background() + // Force backup
    + - tx, err := testState.BeginStateTransaction(ctx) + _, err = tx.Exec(ctx, resetBatchesSQL)
    + - defer func() { require.NoError(t, tx.Commit(ctx)) }() +
    + -
    + // Get batch 4 from backup
    + - var i1, i2, i3, i4, i5 = uint64(1), uint64(2), uint64(3), uint64(4), uint64(5) + batchNum = 4
    + - var d1, d2, d4 = []byte("foobar"), []byte("dingbat"), []byte{0xb} + data, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx)
    + -
    + require.NoError(t, err)
    + - const insertBatch = "INSERT INTO state.batch (batch_num, raw_txs_data) VALUES ($1, $2)" + assert.Nil(t, data)
    + - _, err = tx.Exec(ctx, insertBatch, i1, d1) +
    + - require.NoError(t, err) + // Get batch 5 from backup
    + - _, err = tx.Exec(ctx, insertBatch, i2, d2) + batchNum = 5
    + - require.NoError(t, err) + actualData, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx)
    + - _, err = tx.Exec(ctx, insertBatch, i3, nil) + require.NoError(t, err)
    + - require.NoError(t, err) + assert.Equal(t, expectedData, actualData)
    + - // Add a forced batch too, needs a block + // Update batch 5 and get it from backup
    + - block1 := *block + expectedData = []byte("new foo bar")
    + - block1.BlockNumber = 1000 + _, err = tx.Exec(ctx, openBatchSQL, batchNum, expectedData)
    + - err = testState.AddBlock(ctx, &block1, tx) + require.NoError(t, err)
    + - require.NoError(t, err) + _, err = tx.Exec(ctx, resetBatchesSQL)
    + - err = tx.Commit(ctx) + require.NoError(t, err)
    + - require.NoError(t, err) + actualData, err = testState.GetBatchL2DataByNumber(ctx, batchNum, tx)
    + -
    + require.NoError(t, err)
    + - tx, err = testState.BeginStateTransaction(ctx) + assert.Equal(t, expectedData, actualData)
    + - require.NoError(t, err) + }
    + - const insertForcedBatch = "INSERT INTO state.forced_batch (forced_batch_num, timestamp, raw_txs_data, block_num) VALUES (4, now(),'0b', 1000)" + func TestGetBatchL2DataByNumbers(t *testing.T) {
    + - _, err = testState.Exec(ctx, insertForcedBatch) + initOrResetDB()
    + - require.NoError(t, err) + ctx := context.Background()
    + -
    + tx, err := testState.BeginStateTransaction(ctx)
    + - allData, err := testState.GetBatchL2DataByNumbers(ctx, []uint64{i1, i2, i3, i4, i5}, tx) + require.NoError(t, err)
    + - require.NoError(t, err) + defer func() { require.NoError(t, tx.Commit(ctx)) }()
    + - assert.Equal(t, d1, allData[i1]) +
    + - assert.Equal(t, d2, allData[i2]) + var i1, i2, i3, i4, i5 = uint64(1), uint64(2), uint64(3), uint64(4), uint64(5)
    + - assert.Nil(t, allData[i3]) + var d1, d2, d4 = []byte("foobar"), []byte("dingbat"), []byte{0xb}
    + - assert.Equal(t, d4, allData[i4]) +
    + -
    + const insertBatch = "INSERT INTO state.batch (batch_num, raw_txs_data) VALUES ($1, $2)"
    + - _, ok := allData[i5] + _, err = tx.Exec(ctx, insertBatch, i1, d1)
    + - assert.False(t, ok) + require.NoError(t, err)
    + - } + _, err = tx.Exec(ctx, insertBatch, i2, d2)
    1210 +
    + + + require.NoError(t, err) +
    +
    + 1211 + +
    + + + _, err = tx.Exec(ctx, insertBatch, i3, nil) +
    +
    + 1212 + +
    + + + require.NoError(t, err) +
    +
    + 1213 + +
    + + +
    +
    +
    + 1214 + +
    + + + // Add a forced batch too, needs a block +
    +
    + 1215 + +
    + + + block1 := *block +
    +
    + 1216 + +
    + + + block1.BlockNumber = 1000 +
    +
    + 1217 + +
    + + + err = testState.AddBlock(ctx, &block1, tx) +
    +
    + 1218 + +
    + + + require.NoError(t, err) +
    +
    + 1219 + +
    + + + err = tx.Commit(ctx) +
    +
    + 1220 + +
    + + + require.NoError(t, err) +
    +
    + 1221 + +
    + + +
    +
    +
    + 1222 + +
    + + + tx, err = testState.BeginStateTransaction(ctx) +
    +
    + 1223 + +
    + + + require.NoError(t, err) +
    +
    + 1224 + +
    + + +
    +
    +
    + 1225 + +
    + + + const insertForcedBatch = "INSERT INTO state.forced_batch (forced_batch_num, timestamp, raw_txs_data, block_num) VALUES (4, now(),'0b', 1000)" +
    +
    + 1226 + +
    + + + _, err = testState.Exec(ctx, insertForcedBatch) +
    +
    + 1227 + +
    + + + require.NoError(t, err) +
    +
    + 1228 + +
    + + +
    +
    +
    + 1229 + +
    + + + allData, err := testState.GetBatchL2DataByNumbers(ctx, []uint64{i1, i2, i3, i4, i5}, tx) +
    +
    + 1230 + +
    + + + require.NoError(t, err) +
    +
    + 1231 + +
    + + + assert.Equal(t, d1, allData[i1]) +
    +
    + 1232 + +
    + + + assert.Equal(t, d2, allData[i2]) +
    +
    + 1233 + +
    + + + assert.Nil(t, allData[i3]) +
    +
    + 1234 + +
    + + + assert.Equal(t, d4, allData[i4]) +
    +
    + 1235 + +
    + + +
    +
    +
    + 1236 + +
    + + + _, ok := allData[i5] +
    +
    + 1237 + +
    + + + assert.False(t, ok) +
    +
    + 1238 + +
    + + + } +
    +
    + 1239 +
    + @@ -88341,7 +90851,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1211 + 1240
    @@ -88351,7 +90861,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1212 + 1241
    @@ -88361,7 +90871,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1213 + 1242
    @@ -88376,7 +90886,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1409 + 1438
    @@ -88386,7 +90896,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1410 + 1439
    @@ -88396,7 +90906,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1411 + 1440
    @@ -88406,7 +90916,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1412 + 1441
    @@ -88416,7 +90926,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1413 + 1442
    @@ -88426,7 +90936,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1414 + 1443
    @@ -88436,7 +90946,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1415 + 1444
    @@ -88446,7 +90956,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1416 + 1445
    @@ -88456,7 +90966,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1417 + 1446
    @@ -88466,7 +90976,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1418 + 1447
    @@ -88481,7 +90991,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1489 + 1518
    @@ -88491,7 +91001,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1490 + 1519
    @@ -88501,7 +91011,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1491 + 1520
    @@ -88521,7 +91031,7 @@

    zkEVM node vs CDK validium node

    zkevm-node version: v0.6.0

    - 1492 + 1521