Skip to content
This repository was archived by the owner on Feb 17, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
2ef0c25
fix null effective_percentage
ToniRamirezM Jun 30, 2023
7980151
fix forkID calculation
ToniRamirezM Jun 30, 2023
224a11e
fix script
ToniRamirezM Jun 30, 2023
13bcd29
generate json-schema + docs for node config file and network_custom
joanestebanr Jul 4, 2023
41c63ab
fix unittest
joanestebanr Jul 5, 2023
5a85d85
Hotfixv0.1.4 to v0.2.0 (#2255)
ARR552 Jul 5, 2023
d055c40
Effective GasPrice refactor+fixes (#2247)
agnusmor Jul 5, 2023
76dc7d5
Fix/#2257 effective gas price receipt (#2258)
ARR552 Jul 5, 2023
87200f1
bugfix: fixing l2blocks timestamp for the fist batch (#2260)
ARR552 Jul 5, 2023
9f39433
add more comments, and removed fields PrivateKeyPath and PrivateKeyPa…
joanestebanr Jul 6, 2023
b21258d
add info to git action
joanestebanr Jul 6, 2023
7197f4e
add info to git action
joanestebanr Jul 6, 2023
7e3d34d
fix github action
joanestebanr Jul 6, 2023
8566eed
Merge remote-tracking branch 'origin/develop' into feature/#2200-add-…
joanestebanr Jul 7, 2023
b6e034f
updated comments
joanestebanr Jul 7, 2023
71541ee
updated comments
joanestebanr Jul 7, 2023
623089a
Fix/#2263 gas used (#2264)
ARR552 Jul 10, 2023
9d03f8b
Fix pending tx when duplicate nonce (#2270)
agnusmor Jul 10, 2023
40b084b
Only return a tx from the pool if tx is in pending status (#2273)
ARR552 Jul 10, 2023
17a95f5
Merge pull request #2252 from 0xPolygonHermez/feature/#2200-add-docum…
joanestebanr Jul 11, 2023
867aaaf
fix documentation with config file
joanestebanr Jul 11, 2023
198243a
improve: adding check to skip appending effectivePercentage if curren…
Psykepro Jul 11, 2023
c00e4fa
Merge pull request #2275 from 0xPolygonHermez/improve/add-check-for-f…
Psykepro Jul 11, 2023
861dbba
Fiex effectiveGasprice unsigned txs with forkId lower than 5 (#2278)
ARR552 Jul 11, 2023
e7e9f5b
feat: adding functionality to stop sequencer on specific batch num fr…
Psykepro Jul 12, 2023
caa9a3a
Merge pull request #2282 from 0xPolygonHermez/feature/stop-sequencer-…
Psykepro Jul 13, 2023
a4d0b88
patch: adding print for X-Real-IP in JSON-RPC
Psykepro Jul 14, 2023
32bf764
Fix checkIfSynced (#2289)
ARR552 Jul 14, 2023
b5d5145
[Rehashing] Check logs order and fix blockhash and blockNumber in the…
ARR552 Jul 14, 2023
2b1ea5f
Merge pull request #2286 from 0xPolygonHermez/patch/add-print-for-X-R…
Psykepro Jul 14, 2023
e314df2
flushID synchronizer (#2287)
ARR552 Jul 14, 2023
c9b4057
executor error refactor (#2299)
ToniRamirezM Jul 19, 2023
80c471d
handle invalid rlp ROM error (#2297)
ToniRamirezM Jul 19, 2023
13cafe2
add maxL2GasPrice (#2294)
ToniRamirezM Jul 19, 2023
c761cea
Error refactor (#2302)
ToniRamirezM Jul 19, 2023
9b409e4
Fix replaced tx as failed when duplicated nonce (#2308)
agnusmor Jul 20, 2023
31eb8a4
log reprocess need (#2309)
ToniRamirezM Jul 20, 2023
978e77b
Feature/2300 synchronizer detect if executor restart (#2306)
joanestebanr Jul 21, 2023
a814dc0
Update prover images (#2311)
ToniRamirezM Jul 21, 2023
c66222f
add doc, and fix dockers to be able to use snap/restore feature (#2315)
joanestebanr Jul 21, 2023
2da46fd
Update docker-compose.yml
ToniRamirezM Jul 21, 2023
6fd4c75
Update docker-compose.yml
ToniRamirezM Jul 21, 2023
44356c8
do not add tx to the pool in case err != nil
ToniRamirezM Jul 26, 2023
822858c
do not add tx into the pool if a fatal error in the executor happens …
ToniRamirezM Jul 26, 2023
7d10f46
fix dbMultiWriteSinglePosition config value
tclemos Jul 27, 2023
6a6fc6f
workarround for the error error closing batch
joanestebanr Jul 28, 2023
d6aa5e0
workarround for the error error closing batch
joanestebanr Jul 28, 2023
203751a
workarround for the error error closing batch
joanestebanr Jul 28, 2023
d0e95a8
workaround for the error of closing batch, another case
joanestebanr Jul 28, 2023
38a97f0
`Worker`'s `AddTxTracker` Bug Fix (#2343)
Psykepro Jul 31, 2023
80c8f20
rename config files (#2349)
ToniRamirezM Aug 1, 2023
1389c6b
fix closing batch + logs (#2348)
ARR552 Aug 1, 2023
c99bc9f
Update README.md
ToniRamirezM Aug 1, 2023
7036565
Update release.yml
ToniRamirezM Aug 1, 2023
4806b58
bugfix: fixing place where we need to increment the wg per address fo…
Psykepro Aug 2, 2023
dce5cd0
Merge pull request #2356 from 0xPolygonHermez/bufix/worker-addrqueue-…
Psykepro Aug 2, 2023
321470b
add GasPriceMarginFactor and MaxGasPrice to eth-tx-manager
tclemos Aug 2, 2023
8ce120f
add logs, fix config
tclemos Aug 2, 2023
5dac982
update config file documentation
joanestebanr Aug 3, 2023
f468329
refactoring how eth tx manager monitor txs to increase the throughput
tclemos Aug 3, 2023
d3036f1
monitoredTx log improvements
tclemos Aug 3, 2023
7880f6a
Merge branch 'develop' into feature/eth-tx-manager-gas-price-improvem…
tclemos Oct 14, 2023
1f47a22
merge clean-up
tclemos Oct 14, 2023
cdae775
merge clean-up
tclemos Oct 14, 2023
dea01cb
Merge branch 'develop' into feature/eth-tx-manager-gas-price-improvem…
tclemos Oct 17, 2023
be209fb
fix
tclemos Oct 18, 2023
a778dc4
ethTxManager gasOffset refactoring
tclemos Oct 18, 2023
444253b
update docs
tclemos Oct 18, 2023
32bf763
Merge branch 'develop' into feature/eth-tx-manager-gas-price-improvem…
tclemos Oct 25, 2023
d39fb22
add recover to monitor tx flow and unit test to failed gas estimation…
tclemos Oct 25, 2023
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
14 changes: 7 additions & 7 deletions aggregator/aggregator.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,10 +275,10 @@ func (a *Aggregator) sendFinalProof() {
continue
}
monitoredTxID := buildMonitoredTxID(proof.BatchNumber, proof.BatchNumberFinal)
err = a.EthTxManager.Add(ctx, ethTxManagerOwner, monitoredTxID, sender, to, nil, data, nil)
err = a.EthTxManager.Add(ctx, ethTxManagerOwner, monitoredTxID, sender, to, nil, data, a.cfg.GasOffset, nil)
if err != nil {
log := log.WithFields("tx", monitoredTxID)
log.Errorf("Error to add batch verification tx to eth tx manager: %v", err)
mTxLogger := ethtxmanager.CreateLogger(ethTxManagerOwner, monitoredTxID, sender, to)
mTxLogger.Errorf("Error to add batch verification tx to eth tx manager: %v", err)
a.handleFailureToAddVerifyBatchToBeMonitored(ctx, proof)
continue
}
Expand Down Expand Up @@ -1027,23 +1027,23 @@ func (hc *healthChecker) Watch(req *grpchealth.HealthCheckRequest, server grpche
}

func (a *Aggregator) handleMonitoredTxResult(result ethtxmanager.MonitoredTxResult) {
resLog := log.WithFields("owner", ethTxManagerOwner, "txId", result.ID)
mTxResultLogger := ethtxmanager.CreateMonitoredTxResultLogger(ethTxManagerOwner, result)
if result.Status == ethtxmanager.MonitoredTxStatusFailed {
resLog.Fatal("failed to send batch verification, TODO: review this fatal and define what to do in this case")
mTxResultLogger.Fatal("failed to send batch verification, TODO: review this fatal and define what to do in this case")
}

// monitoredIDFormat: "proof-from-%v-to-%v"
idSlice := strings.Split(result.ID, "-")
proofBatchNumberStr := idSlice[2]
proofBatchNumber, err := strconv.ParseUint(proofBatchNumberStr, encoding.Base10, 0)
if err != nil {
resLog.Errorf("failed to read final proof batch number from monitored tx: %v", err)
mTxResultLogger.Errorf("failed to read final proof batch number from monitored tx: %v", err)
}

proofBatchNumberFinalStr := idSlice[4]
proofBatchNumberFinal, err := strconv.ParseUint(proofBatchNumberFinalStr, encoding.Base10, 0)
if err != nil {
resLog.Errorf("failed to read final proof batch number final from monitored tx: %v", err)
mTxResultLogger.Errorf("failed to read final proof batch number final from monitored tx: %v", err)
}

log := log.WithFields("txId", result.ID, "batches", fmt.Sprintf("%d-%d", proofBatchNumber, proofBatchNumberFinal))
Expand Down
6 changes: 3 additions & 3 deletions aggregator/aggregator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func TestSendFinalProof(t *testing.T) {
BatchNumberFinal: batchNumFinal,
}
finalProof := &prover.FinalProof{}
cfg := Config{SenderAddress: from.Hex()}
cfg := Config{SenderAddress: from.Hex(), GasOffset: uint64(10)}

testCases := []struct {
name string
Expand Down Expand Up @@ -135,7 +135,7 @@ func TestSendFinalProof(t *testing.T) {
assert.True(a.verifyingProof)
}).Return(&to, data, nil).Once()
monitoredTxID := buildMonitoredTxID(batchNum, batchNumFinal)
m.ethTxManager.On("Add", mock.Anything, ethTxManagerOwner, monitoredTxID, from, &to, value, data, nil).Return(errBanana).Once()
m.ethTxManager.On("Add", mock.Anything, ethTxManagerOwner, monitoredTxID, from, &to, value, data, cfg.GasOffset, nil).Return(errBanana).Once()
m.stateMock.On("UpdateGeneratedProof", mock.Anything, recursiveProof, nil).Run(func(args mock.Arguments) {
// test is done, stop the sendFinalProof method
a.exit()
Expand All @@ -160,7 +160,7 @@ func TestSendFinalProof(t *testing.T) {
assert.True(a.verifyingProof)
}).Return(&to, data, nil).Once()
monitoredTxID := buildMonitoredTxID(batchNum, batchNumFinal)
m.ethTxManager.On("Add", mock.Anything, ethTxManagerOwner, monitoredTxID, from, &to, value, data, nil).Return(nil).Once()
m.ethTxManager.On("Add", mock.Anything, ethTxManagerOwner, monitoredTxID, from, &to, value, data, cfg.GasOffset, nil).Return(nil).Once()
ethTxManResult := ethtxmanager.MonitoredTxResult{
ID: monitoredTxID,
Status: ethtxmanager.MonitoredTxStatusConfirmed,
Expand Down
12 changes: 12 additions & 0 deletions aggregator/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,16 @@ type Config struct {
// which a proof in generating state is considered to be stuck and
// allowed to be cleared.
GeneratingProofCleanupThreshold string `mapstructure:"GeneratingProofCleanupThreshold"`

// GasOffset is the amount of gas to be added to the gas estimation in order
// to provide an amount that is higher than the estimated one. This is used
// to avoid the TX getting reverted in case something has changed in the network
// state after the estimation which can cause the TX to require more gas to be
// executed.
//
// ex:
// gas estimation: 1000
// gas offset: 100
// final gas: 1100
GasOffset uint64 `mapstructure:"GasOffset"`
}
2 changes: 1 addition & 1 deletion aggregator/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type proverInterface interface {
// ethTxManager contains the methods required to send txs to
// ethereum.
type ethTxManager interface {
Add(ctx context.Context, owner, id string, from common.Address, to *common.Address, value *big.Int, data []byte, dbTx pgx.Tx) error
Add(ctx context.Context, owner, id string, from common.Address, to *common.Address, value *big.Int, data []byte, gasOffset uint64, dbTx pgx.Tx) error
Result(ctx context.Context, owner, id string, dbTx pgx.Tx) (ethtxmanager.MonitoredTxResult, error)
ResultsByStatus(ctx context.Context, owner string, statuses []ethtxmanager.MonitoredTxStatus, dbTx pgx.Tx) ([]ethtxmanager.MonitoredTxResult, error)
ProcessPendingMonitoredTxs(ctx context.Context, owner string, failedResultHandler ethtxmanager.ResultHandler, dbTx pgx.Tx)
Expand Down
10 changes: 5 additions & 5 deletions aggregator/mocks/mock_ethtxmanager.go

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

15 changes: 7 additions & 8 deletions cmd/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func start(cliCtx *cli.Context) error {
if poolInstance == nil {
poolInstance = createPool(c.Pool, c.State.Batch.Constraints, l2ChainID, st, eventLog)
}
seq := createSequencer(*c, poolInstance, ethTxManagerStorage, st, eventLog)
seq := createSequencer(*c, poolInstance, st, eventLog)
go seq.Start(cliCtx.Context)
case SEQUENCE_SENDER:
ev.Component = event.Component_Sequence_Sender
Expand Down Expand Up @@ -217,7 +217,7 @@ func start(cliCtx *cli.Context) error {
if poolInstance == nil {
poolInstance = createPool(c.Pool, c.State.Batch.Constraints, l2ChainID, st, eventLog)
}
go runSynchronizer(*c, etherman, etm, st, poolInstance, eventLog)
go runSynchronizer(*c, etherman, ethTxManagerStorage, st, poolInstance, eventLog)
case ETHTXMANAGER:
ev.Component = event.Component_EthTxManager
ev.Description = "Running eth tx manager service"
Expand Down Expand Up @@ -285,7 +285,7 @@ func newEtherman(c config.Config) (*etherman.Client, error) {
return etherman, nil
}

func runSynchronizer(cfg config.Config, etherman *etherman.Client, ethTxManager *ethtxmanager.Client, st *state.State, pool *pool.Pool, eventLog *event.EventLog) {
func runSynchronizer(cfg config.Config, etherman *etherman.Client, ethTxManagerStorage *ethtxmanager.PostgresStorage, st *state.State, pool *pool.Pool, eventLog *event.EventLog) {
var trustedSequencerURL string
var err error
if !cfg.IsTrustedSequencer {
Expand Down Expand Up @@ -313,8 +313,9 @@ func runSynchronizer(cfg config.Config, etherman *etherman.Client, ethTxManager
etherManForL1 = append(etherManForL1, eth)
}
}
etm := ethtxmanager.New(cfg.EthTxManager, etherman, ethTxManagerStorage, st)
sy, err := synchronizer.NewSynchronizer(
cfg.IsTrustedSequencer, etherman, etherManForL1, st, pool, ethTxManager,
cfg.IsTrustedSequencer, etherman, etherManForL1, st, pool, etm,
zkEVMClient, eventLog, cfg.NetworkConfig.Genesis, cfg.Synchronizer, cfg.Log.Environment == "development",
)
if err != nil {
Expand Down Expand Up @@ -389,15 +390,13 @@ func runJSONRPCServer(c config.Config, etherman *etherman.Client, chainID uint64
}
}

func createSequencer(cfg config.Config, pool *pool.Pool, etmStorage *ethtxmanager.PostgresStorage, st *state.State, eventLog *event.EventLog) *sequencer.Sequencer {
func createSequencer(cfg config.Config, pool *pool.Pool, st *state.State, eventLog *event.EventLog) *sequencer.Sequencer {
etherman, err := newEtherman(cfg)
if err != nil {
log.Fatal(err)
}

ethTxManager := ethtxmanager.New(cfg.EthTxManager, etherman, etmStorage, st)

seq, err := sequencer.New(cfg.Sequencer, cfg.State.Batch, pool, st, etherman, ethTxManager, eventLog)
seq, err := sequencer.New(cfg.Sequencer, cfg.State.Batch, pool, st, etherman, eventLog)
if err != nil {
log.Fatal(err)
}
Expand Down
9 changes: 8 additions & 1 deletion config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,10 @@ func Test_Defaults(t *testing.T) {
path: "SequenceSender.MaxTxSizeForL1",
expectedValue: uint64(131072),
},
{
path: "SequenceSender.GasOffset",
expectedValue: uint64(80000),
},
{
path: "Etherman.URL",
expectedValue: "http://localhost:8545",
Expand Down Expand Up @@ -433,7 +437,10 @@ func Test_Defaults(t *testing.T) {
path: "Aggregator.GeneratingProofCleanupThreshold",
expectedValue: "10m",
},

{
path: "Aggregator.GasOffset",
expectedValue: uint64(0),
},
{
path: "State.Batch.Constraints.MaxTxsPerBatch",
expectedValue: uint64(300),
Expand Down
2 changes: 2 additions & 0 deletions config/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ LastBatchVirtualizationTimeMaxWaitPeriod = "5s"
MaxTxSizeForL1 = 131072
L2Coinbase = "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"
PrivateKey = {Path = "/pk/sequencer.keystore", Password = "testonly"}
GasOffset = 80000

[Aggregator]
Host = "0.0.0.0"
Expand All @@ -155,6 +156,7 @@ TxProfitabilityMinReward = "1.1"
ProofStatePollingInterval = "5s"
CleanupLockedProofsInterval = "2m"
GeneratingProofCleanupThreshold = "10m"
GasOffset = 0

[L2GasPriceSuggester]
Type = "follower"
Expand Down
8 changes: 8 additions & 0 deletions db/migrations/state/0012.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- +migrate Up
ALTER TABLE state.monitored_txs
ADD COLUMN gas_offset DECIMAL(78, 0) NOT NULL DEFAULT 0;
ALTER TABLE state.monitored_txs ALTER COLUMN gas_offset DROP DEFAULT;

-- +migrate Down
ALTER TABLE state.monitored_txs
DROP COLUMN gas_offset;
62 changes: 62 additions & 0 deletions db/migrations/state/0012_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package migrations_test

import (
"database/sql"
"testing"
"time"

"github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/assert"
)

// this migration changes length of the token name
type migrationTest0012 struct{}

func (m migrationTest0012) InsertData(db *sql.DB) error {
addMonitoredTx := `
INSERT INTO state.monitored_txs (owner, id, from_addr, to_addr, nonce, value, data, gas, gas_price, status, history, block_num, created_at, updated_at)
VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14);`

args := []interface{}{
"owner", "id1", common.HexToAddress("0x111").String(), common.HexToAddress("0x222").String(), 333, 444,
[]byte{5, 5, 5}, 666, 777, "status", []string{common.HexToHash("0x888").String()}, 999, time.Now(), time.Now(),
}
if _, err := db.Exec(addMonitoredTx, args...); err != nil {
return err
}

return nil
}

func (m migrationTest0012) RunAssertsAfterMigrationUp(t *testing.T, db *sql.DB) {
addMonitoredTx := `
INSERT INTO state.monitored_txs (owner, id, from_addr, to_addr, nonce, value, data, gas, gas_price, status, history, block_num, created_at, updated_at, gas_offset)
VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15);`

args := []interface{}{
"owner", "id2", common.HexToAddress("0x111").String(), common.HexToAddress("0x222").String(), 333, 444,
[]byte{5, 5, 5}, 666, 777, "status", []string{common.HexToHash("0x888").String()}, 999, time.Now(), time.Now(),
101010,
}
_, err := db.Exec(addMonitoredTx, args...)
assert.NoError(t, err)

gasOffset := 999

getGasOffsetQuery := `SELECT gas_offset FROM state.monitored_txs WHERE id = $1`
err = db.QueryRow(getGasOffsetQuery, "id1").Scan(&gasOffset)
assert.NoError(t, err)
assert.Equal(t, 0, gasOffset)

err = db.QueryRow(getGasOffsetQuery, "id2").Scan(&gasOffset)
assert.NoError(t, err)
assert.Equal(t, 101010, gasOffset)
}

func (m migrationTest0012) RunAssertsAfterMigrationDown(t *testing.T, db *sql.DB) {

}

func TestMigration0012(t *testing.T) {
runMigrationTest(t, 12, migrationTest0012{})
}
Loading