Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/dbmanager #1524

Merged
merged 22 commits into from
Jan 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion aggregator/mocks/mock_etherman.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion aggregator/mocks/mock_ethtxmanager.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion aggregator/mocks/mock_profitabilitychecker.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion aggregator/mocks/mock_prover.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion aggregator/mocks/mock_state.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ func createSequencer(c config.Config, pool *pool.Pool, state *state.State, ether
// log.Fatal(err)
//}

seq, err := sequencer.New(c.Sequencer, pool, state, state, etherman, ethTxManager)
seq, err := sequencer.New(c.Sequencer, pool, state, etherman, ethTxManager)
if err != nil {
log.Fatal(err)
}
Expand Down
15 changes: 15 additions & 0 deletions db/migrations/state/0003.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-- +migrate Up
ALTER TABLE state.forced_batch
DROP COLUMN IF EXISTS batch_num;

ALTER TABLE state.batch
ADD COLUMN forced_batch_num BIGINT;
ALTER TABLE state.batch
ADD FOREIGN KEY (forced_batch_num) REFERENCES state.forced_batch(forced_batch_num);

-- +migrate Down
ALTER TABLE state.batch
DROP COLUMN IF EXISTS forced_batch_num;

ALTER TABLE state.forced_batch
ADD COLUMN batch_num BIGINT;
2 changes: 1 addition & 1 deletion etherman/mock_etherscan.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion etherman/mock_ethgasstation.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion jsonrpc/mock_dbtx_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion jsonrpc/mock_gasPriceEstimator_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion jsonrpc/mock_pool_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion jsonrpc/mock_state_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion jsonrpc/mock_storage_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pool/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"math/big"
"time"

"github.com/0xPolygonHermez/zkevm-node/state"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/jackc/pgx/v4"
Expand All @@ -27,6 +28,8 @@ type storage interface {
GetTxFromAddressFromByHash(ctx context.Context, hash common.Hash) (common.Address, uint64, error)
GetTxByHash(ctx context.Context, hash common.Hash) (*Transaction, error)
IncrementFailedCounter(ctx context.Context, hashes []string) error
GetTxZkCountersByHash(ctx context.Context, hash common.Hash) (*state.ZKCounters, error)
DeleteTransactionByHash(ctx context.Context, hash common.Hash) error
}

type stateInterface interface {
Expand Down
18 changes: 18 additions & 0 deletions pool/pgpoolstorage/pgpoolstorage.go
Original file line number Diff line number Diff line change
Expand Up @@ -542,3 +542,21 @@ func (p *PostgresPoolStorage) DeleteTransactionByHash(ctx context.Context, hash
}
return nil
}

// GetTxZkCountersByHash gets a transaction zkcounters by its hash
func (p *PostgresPoolStorage) GetTxZkCountersByHash(ctx context.Context, hash common.Hash) (*state.ZKCounters, error) {
var zkCounters state.ZKCounters

sql := `SELECT cumulative_gas_used, used_keccak_hashes, used_poseidon_hashes, used_poseidon_paddings, used_mem_aligns,
used_arithmetics, used_binaries, used_steps FROM pool.txs WHERE hash = $1`
err := p.db.QueryRow(ctx, sql, hash.String()).Scan(&zkCounters.CumulativeGasUsed, &zkCounters.UsedKeccakHashes,
&zkCounters.UsedPoseidonHashes, &zkCounters.UsedPoseidonPaddings,
&zkCounters.UsedMemAligns, &zkCounters.UsedArithmetics, &zkCounters.UsedBinaries, &zkCounters.UsedSteps)
if errors.Is(err, pgx.ErrNoRows) {
return nil, ErrNotFound
} else if err != nil {
return nil, err
}

return &zkCounters, nil
}
1 change: 0 additions & 1 deletion sequencer/broadcast/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,5 @@ type stateInterface interface {
GetLastBatch(ctx context.Context, dbTx pgx.Tx) (*state.Batch, error)
GetBatchByNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (*state.Batch, error)
GetEncodedTransactionsByBatchNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (encoded []string, err error)
GetForcedBatchByBatchNumber(ctx context.Context, batchNumber uint64, dbTx pgx.Tx) (*state.ForcedBatch, error)
GetExitRootByGlobalExitRoot(ctx context.Context, ger common.Hash, dbTx pgx.Tx) (*state.GlobalExitRoot, error)
}
127 changes: 127 additions & 0 deletions sequencer/broadcast/mocks/mock_state.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 17 additions & 24 deletions sequencer/broadcast/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,39 +92,32 @@ func (s *Server) genericGetBatch(ctx context.Context, batch *state.Batch) (*pb.G
}
}

var forcedBatchNum uint64
forcedBatch, err := s.state.GetForcedBatchByBatchNumber(ctx, batch.BatchNumber, nil)
if err == nil {
forcedBatchNum = forcedBatch.ForcedBatchNumber
} else if err != state.ErrNotFound {
return nil, err
}

var (
mainnetExitRoot, rollupExitRoot string
globalExitRootTimestamp uint64
)
var mainnetExitRoot, rollupExitRoot string
ger, err := s.state.GetExitRootByGlobalExitRoot(ctx, batch.GlobalExitRoot, nil)
if err == nil {
mainnetExitRoot = ger.MainnetExitRoot.String()
rollupExitRoot = ger.RollupExitRoot.String()
globalExitRootTimestamp = uint64(ger.Timestamp.Unix())
// TODO: line commented to be able to compile. This should be reviewed (TR)
// globalExitRootTimestamp = uint64(ger.Timestamp.Unix())
} else if err != state.ErrNotFound {
return nil, err
}
var fb uint64
if batch.ForcedBatchNum != nil {
fb = *batch.ForcedBatchNum
}

return &pb.GetBatchResponse{
BatchNumber: batch.BatchNumber,
GlobalExitRoot: batch.GlobalExitRoot.String(),
Sequencer: batch.Coinbase.String(),
LocalExitRoot: batch.LocalExitRoot.String(),
StateRoot: batch.StateRoot.String(),
MainnetExitRoot: mainnetExitRoot,
RollupExitRoot: rollupExitRoot,
GlobalExitRootTimestamp: globalExitRootTimestamp,
Timestamp: uint64(batch.Timestamp.Unix()),
Transactions: transactions,
ForcedBatchNumber: forcedBatchNum,
BatchNumber: batch.BatchNumber,
GlobalExitRoot: batch.GlobalExitRoot.String(),
Sequencer: batch.Coinbase.String(),
LocalExitRoot: batch.LocalExitRoot.String(),
StateRoot: batch.StateRoot.String(),
MainnetExitRoot: mainnetExitRoot,
RollupExitRoot: rollupExitRoot,
Timestamp: uint64(batch.Timestamp.Unix()),
Transactions: transactions,
ForcedBatchNumber: fb,
}, nil
}

Expand Down
2 changes: 0 additions & 2 deletions sequencer/broadcast/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ func TestBroadcastServerGetBatch(t *testing.T) {
}
st.On("GetBatchByNumber", mock.AnythingOfType("*context.valueCtx"), tc.inputBatchNumber, nil).Return(tc.expectedBatch, err)
st.On("GetEncodedTransactionsByBatchNumber", mock.AnythingOfType("*context.valueCtx"), tc.inputBatchNumber, nil).Return(tc.expectedEncodedTxs, err)
st.On("GetForcedBatchByBatchNumber", mock.AnythingOfType("*context.valueCtx"), tc.inputBatchNumber, nil).Return(tc.expectedForcedBatch, err)
if tc.expectedBatch != nil {
st.On("GetExitRootByGlobalExitRoot", mock.AnythingOfType("*context.valueCtx"), tc.expectedBatch.GlobalExitRoot, nil).Return(tc.expectedGER, err)
}
Expand Down Expand Up @@ -217,7 +216,6 @@ func TestBroadcastServerGetLastBatch(t *testing.T) {
st.On("GetLastBatch", mock.AnythingOfType("*context.valueCtx"), nil).Return(tc.expectedBatch, err)
if tc.expectedBatch != nil {
st.On("GetEncodedTransactionsByBatchNumber", mock.AnythingOfType("*context.valueCtx"), tc.expectedBatch.BatchNumber, nil).Return(tc.expectedEncodedTxs, err)
st.On("GetForcedBatchByBatchNumber", mock.AnythingOfType("*context.valueCtx"), tc.expectedBatch.BatchNumber, nil).Return(tc.expectedForcedBatch, err)
st.On("GetExitRootByGlobalExitRoot", mock.AnythingOfType("*context.valueCtx"), tc.expectedBatch.GlobalExitRoot, nil).Return(tc.expectedGER, err)
}

Expand Down
Loading