From 5fa33b4867508dc2ab8809914c057232100d8bfd Mon Sep 17 00:00:00 2001 From: Nikolay Nedkov Date: Thu, 4 May 2023 18:31:52 +0300 Subject: [PATCH] wip #4 Signed-off-by: Nikolay Nedkov --- cmd/run.go | 2 +- sequencer/finalizer.go | 25 ++-- sequencer/finalizer_test.go | 10 +- sequencer/sequencer.go | 4 +- state/batch.go | 12 +- test/config/test.node.config.toml | 4 +- test/e2e/forcedbatches_vector_test.go | 129 ++++++++++++------ test/operations/manager.go | 20 ++- .../state-transition/forced-tx/general_0.json | 10 +- .../state-transition/forced-tx/general_1.json | 12 +- .../state-transition/forced-tx/general_2.json | 10 +- .../state-transition/forced-tx/general_3.json | 10 +- .../state-transition/forced-tx/general_4.json | 10 +- .../state-transition/forced-tx/general_5.json | 12 +- .../state-transition/forced-tx/general_6.json | 10 +- .../state-transition/forced-tx/general_7.json | 8 +- 16 files changed, 194 insertions(+), 94 deletions(-) diff --git a/cmd/run.go b/cmd/run.go index d86e25ddce..606d8639d0 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -165,7 +165,7 @@ func start(cliCtx *cli.Context) error { } poolInstance := createPool(c.Pool, c.NetworkConfig.L2BridgeAddr, l2ChainID, st, eventLog) seq := createSequencer(*c, poolInstance, ethTxManagerStorage, st, eventLog) - go seq.Start(ctx) + go seq.Start(ctx, time.Now) case RPC: ev.Component = event.Component_RPC ev.Description = "Running JSON-RPC server" diff --git a/sequencer/finalizer.go b/sequencer/finalizer.go index 5c481e9185..c4eea878ee 100644 --- a/sequencer/finalizer.go +++ b/sequencer/finalizer.go @@ -51,6 +51,7 @@ type finalizer struct { nextForcedBatchesMux *sync.RWMutex handlingL2Reorg bool eventLog *event.EventLog + nowFuncForBatches func() time.Time } // WipBatch represents a work-in-progress batch. @@ -72,18 +73,7 @@ func (w *WipBatch) isEmpty() bool { } // newFinalizer returns a new instance of Finalizer. -func newFinalizer( - cfg FinalizerCfg, - worker workerInterface, - dbManager dbManagerInterface, - executor stateInterface, - sequencerAddr common.Address, - isSynced func(ctx context.Context) bool, - closingSignalCh ClosingSignalCh, - txsStore TxsStore, - batchConstraints batchConstraints, - eventLog *event.EventLog, -) *finalizer { +func newFinalizer(cfg FinalizerCfg, worker workerInterface, dbManager dbManagerInterface, executor stateInterface, sequencerAddr common.Address, isSynced func(ctx context.Context) bool, closingSignalCh ClosingSignalCh, txsStore TxsStore, batchConstraints batchConstraints, eventLog *event.EventLog, nowFuncForBatches func() time.Time) *finalizer { return &finalizer{ cfg: cfg, txsStore: txsStore, @@ -106,6 +96,7 @@ func newFinalizer( nextForcedBatchDeadline: 0, nextForcedBatchesMux: new(sync.RWMutex), eventLog: eventLog, + nowFuncForBatches: nowFuncForBatches, } } @@ -189,13 +180,13 @@ func (f *finalizer) listenForClosingSignals(ctx context.Context) { func (f *finalizer) finalizeBatches(ctx context.Context) { for { start := now() - log.Debug("finalizer init loop") + //log.Debug("finalizer init loop") tx := f.worker.GetBestFittingTx(f.batch.remainingResources) metrics.WorkerProcessingTime(time.Since(start)) if tx != nil { // Timestamp resolution if f.batch.isEmpty() { - f.batch.timestamp = now() + f.batch.timestamp = f.nowFuncForBatches() } f.sharedResourcesMux.Lock() @@ -207,7 +198,7 @@ func (f *finalizer) finalizeBatches(ctx context.Context) { f.sharedResourcesMux.Unlock() } else { // wait for new txs - log.Debugf("no transactions to be processed. Sleeping for %v", f.cfg.SleepDurationInMs.Duration) + //log.Debugf("no transactions to be processed. Sleeping for %v", f.cfg.SleepDurationInMs.Duration) if f.cfg.SleepDurationInMs.Duration > 0 { time.Sleep(f.cfg.SleepDurationInMs.Duration) } @@ -630,7 +621,7 @@ func (f *finalizer) processForcedBatch(lastBatchNumberInState uint64, stateRoot GlobalExitRoot: forcedBatch.GlobalExitRoot, Transactions: forcedBatch.RawTxsData, Coinbase: f.sequencerAddress, - Timestamp: now(), + Timestamp: f.nowFuncForBatches(), Caller: stateMetrics.SequencerCallerLabel, } response, err := f.dbManager.ProcessForcedBatch(forcedBatch.ForcedBatchNumber, request) @@ -718,7 +709,7 @@ func (f *finalizer) openBatch(ctx context.Context, num uint64, ger common.Hash, processingCtx := state.ProcessingContext{ BatchNumber: num, Coinbase: f.sequencerAddress, - Timestamp: now(), + Timestamp: f.nowFuncForBatches(), GlobalExitRoot: ger, } err := f.dbManager.OpenBatch(ctx, processingCtx, dbTx) diff --git a/sequencer/finalizer_test.go b/sequencer/finalizer_test.go index 6b3a8d5563..202a9b796d 100644 --- a/sequencer/finalizer_test.go +++ b/sequencer/finalizer_test.go @@ -117,9 +117,9 @@ func TestNewFinalizer(t *testing.T) { //func TestFinalizer_newWIPBatch(t *testing.T) { // // arrange // f = setupFinalizer(true) -// now = testNow +// nowFuncForBatches = testNow // defer func() { -// now = time.Now +// nowFuncForBatches = time.Now // }() // // txs := make([]types.Transaction, 0) @@ -132,7 +132,7 @@ func TestNewFinalizer(t *testing.T) { // coinbase: f.sequencerAddress, // initialStateRoot: newHash, // stateRoot: newHash, -// timestamp: uint64(now().Unix()), +// timestamp: uint64(nowFuncForBatches().Unix()), // remainingResources: getMaxRemainingResources(f.batchConstraints), // } // closeBatchParams := ClosingBatchParameters{ @@ -687,9 +687,9 @@ func TestFinalizer_openBatch(t *testing.T) { // TestFinalizer_reprocessBatch is a test for reprocessBatch which tests all possible cases of reprocessBatch func TestFinalizer_reprocessBatch(t *testing.T) { // arrange - now = testNow + nowFuncForBatches = testNow defer func() { - now = time.Now + nowFuncForBatches = time.Now }() f = setupFinalizer(true) diff --git a/sequencer/sequencer.go b/sequencer/sequencer.go index 410a7fcb7a..73f9b25ca1 100644 --- a/sequencer/sequencer.go +++ b/sequencer/sequencer.go @@ -103,7 +103,7 @@ func New(cfg Config, txPool txPool, state stateInterface, etherman etherman, man } // Start starts the sequencer -func (s *Sequencer) Start(ctx context.Context) { +func (s *Sequencer) Start(ctx context.Context, nowFuncForBatches func() time.Time) { for !s.isSynced(ctx) { log.Infof("waiting for synchronizer to sync...") time.Sleep(s.cfg.WaitPeriodPoolIsEmpty.Duration) @@ -154,7 +154,7 @@ func (s *Sequencer) Start(ctx context.Context) { dbManager := newDBManager(ctx, s.cfg.DBManager, s.pool, s.state, worker, closingSignalCh, txsStore, batchConstraints) go dbManager.Start() - finalizer := newFinalizer(s.cfg.Finalizer, worker, dbManager, s.state, s.address, s.isSynced, closingSignalCh, txsStore, batchConstraints, s.eventLog) + finalizer := newFinalizer(s.cfg.Finalizer, worker, dbManager, s.state, s.address, s.isSynced, closingSignalCh, txsStore, batchConstraints, s.eventLog, nowFuncForBatches) currBatch, processingReq := s.bootstrap(ctx, dbManager, finalizer) go finalizer.Start(ctx, currBatch, processingReq) diff --git a/state/batch.go b/state/batch.go index 76506ba0f6..306de0cbee 100644 --- a/state/batch.go +++ b/state/batch.go @@ -169,8 +169,9 @@ func (s *State) ProcessBatch(ctx context.Context, request ProcessRequest, update } forkID := GetForkIDByBatchNumber(s.cfg.ForkIDIntervals, request.BatchNumber) + // Create Batch - processBatchRequest := &pb.ProcessBatchRequest{ + var processBatchRequest = &pb.ProcessBatchRequest{ OldBatchNum: request.BatchNumber - 1, Coinbase: request.Coinbase.String(), BatchL2Data: request.Transactions, @@ -264,6 +265,10 @@ func (s *State) ExecuteBatch(ctx context.Context, batch Batch, updateMerkleTree return processBatchResponse, err } +func uint32ToBool(value uint32) bool { + return value != 0 +} + func (s *State) processBatch(ctx context.Context, batchNumber uint64, batchL2Data []byte, caller metrics.CallerLabel, dbTx pgx.Tx) (*pb.ProcessBatchResponse, error) { if dbTx == nil { return nil, ErrDBTxNil @@ -299,6 +304,7 @@ func (s *State) processBatch(ctx context.Context, batchNumber uint64, batchL2Dat return nil, ErrInvalidBatchNumber } forkID := GetForkIDByBatchNumber(s.cfg.ForkIDIntervals, lastBatch.BatchNumber) + // Create Batch processBatchRequest := &pb.ProcessBatchRequest{ OldBatchNum: lastBatch.BatchNumber - 1, @@ -313,9 +319,7 @@ func (s *State) processBatch(ctx context.Context, batchNumber uint64, batchL2Dat ForkId: forkID, } - res, err := s.sendBatchRequestToExecutor(ctx, processBatchRequest, caller) - - return res, err + return s.sendBatchRequestToExecutor(ctx, processBatchRequest, caller) } func (s *State) sendBatchRequestToExecutor(ctx context.Context, processBatchRequest *pb.ProcessBatchRequest, caller metrics.CallerLabel) (*pb.ProcessBatchResponse, error) { diff --git a/test/config/test.node.config.toml b/test/config/test.node.config.toml index 8b4c13a721..f4f3325993 100644 --- a/test/config/test.node.config.toml +++ b/test/config/test.node.config.toml @@ -84,13 +84,13 @@ TxLifetimeCheckTimeout = "10m" MaxTxLifetime = "3h" MaxTxSizeForL1 = 131072 [Sequencer.Finalizer] - GERDeadlineTimeoutInSec = "2s" + GERDeadlineTimeoutInSec = "1000s" ForcedBatchDeadlineTimeoutInSec = "1s" SleepDurationInMs = "100ms" ResourcePercentageToCloseBatch = 10 GERFinalityNumberOfBlocks = 0 ClosingSignalsManagerWaitForCheckingL1Timeout = "10s" - ClosingSignalsManagerWaitForCheckingGER = "10s" + ClosingSignalsManagerWaitForCheckingGER = "10000s" ClosingSignalsManagerWaitForCheckingForcedBatches = "10s" ForcedBatchesFinalityNumberOfBlocks = 0 TimestampResolution = "15s" diff --git a/test/e2e/forcedbatches_vector_test.go b/test/e2e/forcedbatches_vector_test.go index 527f5c18ec..197dcc28b5 100644 --- a/test/e2e/forcedbatches_vector_test.go +++ b/test/e2e/forcedbatches_vector_test.go @@ -2,7 +2,6 @@ package e2e import ( "context" - "fmt" "os" "path/filepath" "strings" @@ -27,7 +26,7 @@ var ( forcedBatchSignatureHash = crypto.Keccak256Hash([]byte("ForceBatch(uint64,bytes32,address,bytes)")) ) -func TestForcedBatchesVector(t *testing.T) { +func TestForcedBatchesVectorFiles(t *testing.T) { if testing.Short() { t.Skip() @@ -39,43 +38,91 @@ func TestForcedBatchesVector(t *testing.T) { return err } if !info.IsDir() && !strings.HasSuffix(info.Name(), "list.json") { - //defer func() { - // require.NoError(t, operations.Teardown()) - //}() - // Load test vectors - fmt.Println(path) - testCase, err := vectors.LoadStateTransitionTestCaseV2(path) - require.NoError(t, err) - - opsCfg := operations.GetDefaultOperationsConfig() - opsCfg.State.MaxCumulativeGasUsed = 80000000000 - opsman, err := operations.NewManager(ctx, opsCfg) - require.NoError(t, err) - - // Setting Genesis - genesisActions := vectors.GenerateGenesisActions(testCase.Genesis) - require.NoError(t, opsman.SetGenesis(genesisActions)) - require.NoError(t, opsman.Setup()) - - // Check initial root - actualOldStateRoot, err := opsman.State().GetLastStateRoot(ctx, nil) - require.NoError(t, err) - require.Equal(t, testCase.ExpectedOldStateRoot, actualOldStateRoot.Hex()) - b, err := hex.DecodeHex(testCase.BatchL2Data) - require.NoError(t, err) - txs, txsBytes, err := state.DecodeTxs(b) - require.NoError(t, err) - fmt.Println(txs[0].ChainId()) - - _, err = sendForcedBatchForVector(t, txsBytes, opsman) - require.NoError(t, err) - - // Check new root - actualNewStateRoot, err := opsman.State().GetLastStateRoot(ctx, nil) - - require.NoError(t, err) - require.Equal(t, testCase.ExpectedNewStateRoot, actualNewStateRoot.Hex()) + t.Run(info.Name(), func(t *testing.T) { + + defer func() { + require.NoError(t, operations.Teardown()) + }() + + // Load test vectors + log.Info("=====================================================================") + log.Info(path) + log.Info("=====================================================================") + testCase, err := vectors.LoadStateTransitionTestCaseV2(path) + require.NoError(t, err) + + // TODO: To be used to set the timestamp func of sequencer + //func() time.Time { + // unixTimestamp := int64(1944498031) + // return time.Unix(unixTimestamp, 0)0 + //} + + opsCfg := operations.GetDefaultOperationsConfig() + // TODO: uncomment when ready to start sequencer from here + //opsCfg.WithoutSequencer = true + opsCfg.State.MaxCumulativeGasUsed = 80000000000 + opsman, err := operations.NewManager(ctx, opsCfg) + require.NoError(t, err) + + // Setting Genesis + log.Info("[Setting Genesis]") + genesisActions := vectors.GenerateGenesisActions(testCase.Genesis) + require.NoError(t, opsman.SetGenesis(genesisActions)) + require.NoError(t, opsman.Setup()) + merkleTree := opsman.State().GetTree() + + // Check initial root + log.Info("[Checking initial root]") + actualOldStateRoot, err := opsman.State().GetLastStateRoot(ctx, nil) + require.NoError(t, err) + require.Equal(t, testCase.ExpectedOldStateRoot, actualOldStateRoot.Hex()) + b, err := hex.DecodeHex(testCase.BatchL2Data) + require.NoError(t, err) + _, txsBytes, err := state.DecodeTxs(b) + require.NoError(t, err) + + forcedBatch, err := sendForcedBatchForVector(t, txsBytes, opsman) + require.NoError(t, err) + isClosed, err := opsman.State().IsBatchClosed(ctx, forcedBatch.BatchNumber, nil) + require.NoError(t, err) + // wait until is closed + for !isClosed { + time.Sleep(1 * time.Second) + isClosed, err = opsman.State().IsBatchClosed(ctx, forcedBatch.BatchNumber, nil) + require.NoError(t, err) + if isClosed { + forcedBatch, err = sendForcedBatchForVector(t, txsBytes, opsman) + require.NoError(t, err) + } + } + + // Check new root + log.Info("[Checking new root]") + actualNewStateRoot := forcedBatch.StateRoot + require.NoError(t, err) + + require.Equal(t, testCase.ExpectedNewStateRoot, actualNewStateRoot.Hex()) + log.Info("[Checking new leafs]") + for _, expectedNewLeaf := range testCase.ExpectedNewLeafs { + if expectedNewLeaf.IsSmartContract { + log.Info("Smart Contract Address: ", expectedNewLeaf.Address) + } else { + log.Info("Account Address: ", expectedNewLeaf.Address) + } + actualBalance, err := merkleTree.GetBalance(ctx, common.HexToAddress(expectedNewLeaf.Address), actualNewStateRoot.Bytes()) + require.NoError(t, err) + require.Equal(t, expectedNewLeaf.Balance.String(), actualBalance.String()) + + actualNonce, err := merkleTree.GetNonce(ctx, common.HexToAddress(expectedNewLeaf.Address), actualNewStateRoot.Bytes()) + require.NoError(t, err) + require.Equal(t, expectedNewLeaf.Nonce, actualNonce.String()) + if expectedNewLeaf.IsSmartContract { + // TODO: Implement leaf properties for smart contracts + } + } + return + }) return nil } @@ -128,7 +175,7 @@ func sendForcedBatchForVector(t *testing.T, txs []byte, opsman *operations.Manag tx, err := zkEvm.ForceBatch(auth, txs, tip) require.NoError(t, err) - log.Info("TxHash: ", tx.Hash()) + log.Info("Forced Batch Submit to L1 TxHash: ", tx.Hash()) time.Sleep(1 * time.Second) err = operations.WaitTxToBeMined(ctx, ethClient, tx, operations.DefaultTimeoutTxToBeMined) @@ -170,8 +217,8 @@ func sendForcedBatchForVector(t *testing.T, txs []byte, opsman *operations.Manag require.NoError(t, err) require.NotNil(t, forcedBatch) - err = operations.WaitBatchToBeVirtualized(forcedBatch.BatchNumber, 4*time.Minute, st) - require.NoError(t, err) + //err = operations.WaitBatchToBeVirtualized(forcedBatch.BatchNumber, 4*time.Minute, st) + //require.NoError(t, err) } return forcedBatch, nil diff --git a/test/operations/manager.go b/test/operations/manager.go index 1e75cd01a0..9efa423c4a 100644 --- a/test/operations/manager.go +++ b/test/operations/manager.go @@ -66,8 +66,9 @@ type SequencerConfig struct { // Config is the main Manager configuration. type Config struct { - State *state.Config - Sequencer *SequencerConfig + State *state.Config + Sequencer *SequencerConfig + WithoutSequencer bool } // Manager controls operations and has knowledge about how to set up and tear @@ -468,7 +469,15 @@ func stopNetwork() error { // StartNode starts the node container func (m *Manager) StartNode() error { - return StartComponent("node", nodeUpCondition) + var err error + + if m.cfg.WithoutSequencer { + err = StartComponent("node-no-seq", nodeUpCondition) + } else { + err = StartComponent("node", nodeUpCondition) + } + + return err } // StartTrustedAndPermissionlessNode starts the node container @@ -547,8 +556,9 @@ func RunMakeTarget(target string) error { // GetDefaultOperationsConfig provides a default configuration to run the environment func GetDefaultOperationsConfig() *Config { return &Config{ - State: &state.Config{MaxCumulativeGasUsed: DefaultMaxCumulativeGasUsed}, - Sequencer: &SequencerConfig{Address: DefaultSequencerAddress, PrivateKey: DefaultSequencerPrivateKey}, + State: &state.Config{MaxCumulativeGasUsed: DefaultMaxCumulativeGasUsed}, + Sequencer: &SequencerConfig{Address: DefaultSequencerAddress, PrivateKey: DefaultSequencerPrivateKey}, + WithoutSequencer: false, } } diff --git a/test/vectors/src/state-transition/forced-tx/general_0.json b/test/vectors/src/state-transition/forced-tx/general_0.json index 91b4886f65..b0041e26ac 100644 --- a/test/vectors/src/state-transition/forced-tx/general_0.json +++ b/test/vectors/src/state-transition/forced-tx/general_0.json @@ -1,6 +1,6 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x9f4544f3d6c4e46890a1570c052d2140bcbb7f841a0a7fefe3a7e15819fb40bc", + "expectedNewStateRoot": "0x1e67d1a0d39579ea7f16bc520e90a503daea9f7a1a43670dbb1911dbea9c6df1", "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e980801186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb9700910c26408b64b51c5da36ba2f38ef55ba1cee719d5a6c012259687999074321b", "genesis": [ { @@ -22,7 +22,7 @@ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "nonce": "1", - "balance": "99900000000000000000", + "balance": "99899979000000000000", "isSmartContract": false }, { @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200100000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "21000000000000", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_1.json b/test/vectors/src/state-transition/forced-tx/general_1.json index f1f3ec7b81..95df0b93be 100644 --- a/test/vectors/src/state-transition/forced-tx/general_1.json +++ b/test/vectors/src/state-transition/forced-tx/general_1.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x76b362a9afd679ea13a456ab103786492c65946be653589c1fd627841d0c6fdd", - "expectedNewStateRoot": "0x67a9c931781a2b31df8c3ad43eff359a990adf6caf4b3f51c661f4850154a860", - "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bef80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478893635c9adc5dea00000808203e880806199f98970ea3e0e9a59e32184ea11ae9158b9b93d70906e11f60eb6ce0096023c1bbbb437e58ea5f7bebd344d61cccd161c6b8accff11b50ea44300d3ab58bd1bee80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478880de0b6b3a7640000808203e8808074ecb6abb3d84c322a4905c60199b8f422b79b940e8a853d580869268009ae3123fb6caa5b3afc410b79d9b68bf851df1fd46fd6923cc481b3e273aeb92ce67d1cee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000808203e88080432b1bc18d96dea596edfe17b249a68e42117f738ecfaea4e9f92aa77935fb4d5b9a983a5ba73c27cbaa4de62b1d8ab8b908a941926387927dcd2319d8b4dfb21cee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a764000080820d058080d78fe650ae7e2f7c909ad72f661bfe72aa2d502f9f2bbfad3880a4a7e0abf8986b98f2a902dd06a89f948baa64f32d301d3ced92d231ccdea79f909a73aa050f1b", + "expectedNewStateRoot": "0x44a9059da9c0866cbafdd492aefeb371836f29eff8c66eb9c2252b5d59bffd25", + "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e980801186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb9700910c26408b64b51c5da36ba2f38ef55ba1cee719d5a6c012259687999074321bef80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478893635c9adc5dea00000808203e980804c4fbe884ee8912360f4d00199fd189f11b27fa25eca1b9dcfd3ea686e88042e113432240c9e7be8de1e8fc0894b68ff4d37528d820814527b5fa2bd034ef38f1bee80843b9aca00830186a094187bd40226a7073b49163b1f6c2b73d8f2aa8478880de0b6b3a7640000808203e980801cdcd319a4929aca6fc2eeac030635f057c1a9eb3931225b3de5613cc3d78b9c1cf4de1b8d0dc0ab31f9918bca9d308cbff8ac2307b4aa061fe3f4532edad30d1bee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a7640000808203e98080980717290b2314a735dc00db207c20d5a6461f73761c2022986fd78efa7e774d57de08eada05ec67eb78cceaa7be257cb12b5449aa0d7347dca655f94375c9671bee80843b9aca00830186a094abcced19d7f290b84608fec510bee872cc8f5112880de0b6b3a764000080820d058080d78fe650ae7e2f7c909ad72f661bfe72aa2d502f9f2bbfad3880a4a7e0abf8986b98f2a902dd06a89f948baa64f32d301d3ced92d231ccdea79f909a73aa050f1b", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -43,7 +43,7 @@ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "nonce": "1", - "balance": "99900021000000000000", + "balance": "99899979000000000000", "isSmartContract": false }, { @@ -69,6 +69,12 @@ "nonce": "0", "balance": "0", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "42000000000000", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_2.json b/test/vectors/src/state-transition/forced-tx/general_2.json index a3a3641413..467cdb4ab2 100644 --- a/test/vectors/src/state-transition/forced-tx/general_2.json +++ b/test/vectors/src/state-transition/forced-tx/general_2.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x5ce97f7b959b5dbb207ca525a18a7034a1244f23ec0bd393ec1b3e28786dd164", - "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c", + "expectedNewStateRoot": "0xcc651274e1060f11e5ed7235aad30a6cc5a96d6ccd71d71725eaa2bbb9fc08f8", + "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e98080510a8a10721e65bf2913889751f3b32de1cb4733a667e06b708f122965da598e75ca7d27cb4c3846490b4c446605d0120b0720b70dfe5a07f865a161c37263221b", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200000000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "0", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_3.json b/test/vectors/src/state-transition/forced-tx/general_3.json index d4d7dd1fe6..51d5e5a51e 100644 --- a/test/vectors/src/state-transition/forced-tx/general_3.json +++ b/test/vectors/src/state-transition/forced-tx/general_3.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x5ce97f7b959b5dbb207ca525a18a7034a1244f23ec0bd393ec1b3e28786dd164", - "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a00008082019180806e209c61ca92c2b980d6197e7ac9ccc3f547bf13be6455dfe682aa5dda9655ef16819a7edcc3fefec81ca97c7a6f3d10ec774440e409adbba693ce8b698d41f11cef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e880806fac51f437890686cea7fc4d478e01f4650284d8b0c447d3a049ad799a938e855d76085acbdd3af82e205f070fd3f333d3f069ab3936323ac347003f07d9418a1b", + "expectedNewStateRoot": "0xcc651274e1060f11e5ed7235aad30a6cc5a96d6ccd71d71725eaa2bbb9fc08f8", + "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a00008082019180806e209c61ca92c2b980d6197e7ac9ccc3f547bf13be6455dfe682aa5dda9655ef16819a7edcc3fefec81ca97c7a6f3d10ec774440e409adbba693ce8b698d41f11cef80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff89056bc75e2d63100000808203e98080fe1e96b35c836fbebac887681150c5fc9fdae862d747aaaf8c30373c0becf7691ff0c900aaaac6d1565a603f69b5a45f222ed205f0a36fdc6e4e4c5a7b88d45b1b", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200000000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "0", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_4.json b/test/vectors/src/state-transition/forced-tx/general_4.json index 5c14e3deaa..68de9a4d3f 100644 --- a/test/vectors/src/state-transition/forced-tx/general_4.json +++ b/test/vectors/src/state-transition/forced-tx/general_4.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x5ce97f7b959b5dbb207ca525a18a7034a1244f23ec0bd393ec1b3e28786dd164", - "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e719683074bcc81dba07fad2ac4015cf2eba4807c1aa1a8d291e77317a45fc20231b", + "expectedNewStateRoot": "0xcc651274e1060f11e5ed7235aad30a6cc5a96d6ccd71d71725eaa2bbb9fc08f8", + "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e980801186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb9719683074bcc81dba07fad2ac4015cf2eba4807c1aa1a8d291e77317a45fc20231b", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200000000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "0", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_5.json b/test/vectors/src/state-transition/forced-tx/general_5.json index 100d81f553..9a2bb6ac46 100644 --- a/test/vectors/src/state-transition/forced-tx/general_5.json +++ b/test/vectors/src/state-transition/forced-tx/general_5.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x55f2b666d22f9cf86ecac18c3cd21ea7e27aa3dee39989a2fadaccb2902a1672", - "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880801cee7e01dc62f69a12c3510c6d64de04ee6346d84b6a017f3e786c7d87f963e75d8cc91fa983cd6d9cf55fff80d73bd26cd333b0f098acc1e58edb1fd484ad731bee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e880803ee20a0764440b016c4a2ee4e7e4eb3a5a97f1e6a6c9f40bf5ecf50f95ff636d63878ddb3e997e519826c7bb26fb7c5950a208e1ec722a9f1c568c4e479b40341cee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e88080bff0e780ba7db409339fd3f71969fa2cbf1b8535f6c725a1499d3318d3ef9c2b6340ddfab84add2c188f9efddb99771db1fe621c981846394ea4f035c85bcdd51b", + "expectedNewStateRoot": "0x7d132db5b2509e925565da8ed09fedc3028465031435cb3d6c9bb87982e497fe", + "batchL2Data": "0xee80843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e980801186622d03b6b8da7cf111d1ccba5bb185c56deae6a322cebc6dda0556f3cb9700910c26408b64b51c5da36ba2f38ef55ba1cee719d5a6c012259687999074321bee01843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e98080b09a953b4dccf40c7333ed1a1df6fda10a18d01d7c4320b05f7680b34837b3bd421af00d0c99bb1b4d346d99f3634f46fba700dbc57908d3bfa647cbfbcb81a31cee02843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff88016345785d8a0000808203e980807d6892a0b642053f641a040c5ba59132983cb41af9887cf01f5b132313d68d0f3c77a17d738c8d850a27fe7276b2c73e006b0e52938d960d7b6931dff1f49c971c", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -22,7 +22,7 @@ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", "nonce": "3", - "balance": "99700000000000000000", + "balance": "99699937000000000000", "isSmartContract": false }, { @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200300000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "63000000000000", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_6.json b/test/vectors/src/state-transition/forced-tx/general_6.json index fb3ba02c31..b388171e23 100644 --- a/test/vectors/src/state-transition/forced-tx/general_6.json +++ b/test/vectors/src/state-transition/forced-tx/general_6.json @@ -1,7 +1,7 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x5ce97f7b959b5dbb207ca525a18a7034a1244f23ec0bd393ec1b3e28786dd164", - "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01cf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01cf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e8808069d48cb9ade9de851379987aa0f7f677cdaee1152ec785a3d3009f094c889be9368c3d198cdfe5b1e0100fe110ea60e77b1eb65e9363d96f7fb9c2b84a37c9b01c", + "expectedNewStateRoot": "0xcc651274e1060f11e5ed7235aad30a6cc5a96d6ccd71d71725eaa2bbb9fc08f8", + "batchL2Data": "0xf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e98080510a8a10721e65bf2913889751f3b32de1cb4733a667e06b708f122965da598e75ca7d27cb4c3846490b4c446605d0120b0720b70dfe5a07f865a161c37263221bf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e98080510a8a10721e65bf2913889751f3b32de1cb4733a667e06b708f122965da598e75ca7d27cb4c3846490b4c446605d0120b0720b70dfe5a07f865a161c37263221bf080843b9aca00830186a0944d5cf5032b2a844602278b01199ed191a86c93ff8a021e19e0c9bab2400000808203e98080510a8a10721e65bf2913889751f3b32de1cb4733a667e06b708f122965da598e75ca7d27cb4c3846490b4c446605d0120b0720b70dfe5a07f865a161c37263221b", "genesis": [ { "address": "0x617b3a3528F9cDd6630fd3301B9c8911F7Bf063D", @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200000000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "0", + "isSmartContract": false } ] } \ No newline at end of file diff --git a/test/vectors/src/state-transition/forced-tx/general_7.json b/test/vectors/src/state-transition/forced-tx/general_7.json index 5b88be2630..55c7a52ee5 100644 --- a/test/vectors/src/state-transition/forced-tx/general_7.json +++ b/test/vectors/src/state-transition/forced-tx/general_7.json @@ -1,6 +1,6 @@ { "expectedOldStateRoot": "0x4a9bfcb163ec91c5beb22e6aca41592433092c8c7821b01d37fd0de483f9265d", - "expectedNewStateRoot": "0x5ce97f7b959b5dbb207ca525a18a7034a1244f23ec0bd393ec1b3e28786dd164", + "expectedNewStateRoot": "0xcc651274e1060f11e5ed7235aad30a6cc5a96d6ccd71d71725eaa2bbb9fc08f8", "batchL2Data": "0x", "genesis": [ { @@ -30,6 +30,12 @@ "nonce": "0", "balance": "200000000000000000000", "isSmartContract": false + }, + { + "address": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "nonce": "0", + "balance": "0", + "isSmartContract": false } ] } \ No newline at end of file