@ -182,7 +182,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:1" )
l1UserTxs := [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -193,7 +193,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:2" )
l1UserTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -204,7 +204,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:3" )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 2 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 2 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -217,7 +217,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:4" )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 3 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 1 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -231,7 +231,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:5" )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 4 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -245,7 +245,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
log . Debug ( "block:0 batch:6" )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 5 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 1 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -279,7 +279,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
assert . True ( t , l2TxsFromDB [ 1 ] . VerifySignature ( chainID , tc . Users [ "B" ] . BJJ . Public ( ) . Compress ( ) ) )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 6 ] . Batch . ForgeL1TxsNum ] )
coordIdxs , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , [ ] common . Idx { 261 , 263 } , coordIdxs )
assert . Equal ( t , txsel . coordAccount . AccountCreationAuth , accAuths [ 0 ] )
@ -328,7 +328,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
assert . True ( t , l2TxsFromDB [ 3 ] . VerifySignature ( chainID , tc . Users [ "A" ] . BJJ . Public ( ) . Compress ( ) ) )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 7 ] . Batch . ForgeL1TxsNum ] )
coordIdxs , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , [ ] common . Idx { 261 , 263 } , coordIdxs )
assert . Equal ( t , 0 , len ( accAuths ) )
@ -372,7 +372,7 @@ func TestGetL2TxSelectionMinimumFlow0(t *testing.T) {
assert . True ( t , l2TxsFromDB [ 1 ] . VerifySignature ( chainID , tc . Users [ "B" ] . BJJ . Public ( ) . Compress ( ) ) )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 1 ] . Rollup . Batches [ 0 ] . Batch . ForgeL1TxsNum ] )
coordIdxs , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , [ ] common . Idx { 263 } , coordIdxs )
assert . Equal ( t , 0 , len ( accAuths ) )
@ -434,7 +434,7 @@ func TestPoolL2TxsWithoutEnoughBalance(t *testing.T) {
}
// batch1
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
// 1st TransferToEthAddr
expectedTxID0 := "0x028847b86613c0b70be18c8622119ed045b42e4e47d7938fa90bb3d1dc14928965"
@ -456,7 +456,7 @@ func TestPoolL2TxsWithoutEnoughBalance(t *testing.T) {
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 3 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -481,7 +481,7 @@ func TestPoolL2TxsWithoutEnoughBalance(t *testing.T) {
l1UserTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -500,7 +500,7 @@ func TestPoolL2TxsWithoutEnoughBalance(t *testing.T) {
// initial PoolExit, which now is valid as B has enough Balance
l1UserTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -550,7 +550,7 @@ func TestTransferToBjj(t *testing.T) {
// batch1 to freeze L1UserTxs that will create some accounts with
// positive balance
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
// Transfer is ToBJJ to a BJJ-only account that doesn't exist
@ -568,7 +568,7 @@ func TestTransferToBjj(t *testing.T) {
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 4 , len ( oL1UserTxs ) )
// We expect the coordinator to add an L1CoordTx to create an account for the recipient of the l2tx
@ -595,7 +595,7 @@ func TestTransferToBjj(t *testing.T) {
l1UserTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
// Since the BJJ-only account B already exists, the coordinator doesn't add any L1CoordTxs
@ -623,7 +623,7 @@ func TestTransferToBjj(t *testing.T) {
l1UserTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
// We expect the coordinator to add an L1CoordTx to create an account
@ -678,7 +678,7 @@ func TestTransferManyFromSameAccount(t *testing.T) {
}
// batch1 to freeze L1UserTxs
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
// 8 transfers from the same account
@ -710,7 +710,7 @@ func TestTransferManyFromSameAccount(t *testing.T) {
// transfers from account A
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 3 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -760,7 +760,7 @@ func TestPoolL2TxInvalidNonces(t *testing.T) {
}
// batch1 to freeze L1UserTxs
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
batchPoolL2 := `
@ -794,7 +794,7 @@ func TestPoolL2TxInvalidNonces(t *testing.T) {
// select L1 & L2 txs
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 3 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -809,7 +809,7 @@ func TestPoolL2TxInvalidNonces(t *testing.T) {
// batch 3
l1UserTxs = [ ] common . L1Tx { }
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 0 , len ( oL1UserTxs ) )
@ -825,7 +825,7 @@ func TestPoolL2TxInvalidNonces(t *testing.T) {
// batch 4
l1UserTxs = [ ] common . L1Tx { }
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 0 , len ( oL1UserTxs ) )
@ -873,10 +873,10 @@ func TestProcessL2Selection(t *testing.T) {
}
// batch1 to freeze L1UserTxs
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
// 8 transfers from the same account
// 3 transfers from the same account
batchPoolL2 := `
Type : PoolL2
PoolTransfer ( 0 ) A - B : 10 ( 126 )
@ -889,10 +889,10 @@ func TestProcessL2Selection(t *testing.T) {
// add the PoolL2Txs to the l2DB
addL2Txs ( t , txsel , poolL2Txs )
// batch 2 to crate some accounts with positive balance, and do 8 L2Tx transfers from account A
// batch 2 to crate some accounts with positive balance, and do 3 L2Tx transfers from account A
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
assert . Equal ( t , 3 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -968,7 +968,7 @@ func TestValidTxsWithLowFeeAndInvalidTxsWithHighFee(t *testing.T) {
}
// batch1 to freeze L1UserTxs
l1UserTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
// batch 2 to crate the accounts (from L1UserTxs)
@ -976,7 +976,7 @@ func TestValidTxsWithLowFeeAndInvalidTxsWithHighFee(t *testing.T) {
// select L1 & L2 txs
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 3 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
@ -1014,7 +1014,7 @@ func TestValidTxsWithLowFeeAndInvalidTxsWithHighFee(t *testing.T) {
addL2Txs ( t , txsel , poolL2Txs )
l1UserTxs = [ ] common . L1Tx { }
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 0 , len ( oL1UserTxs ) )
@ -1029,7 +1029,7 @@ func TestValidTxsWithLowFeeAndInvalidTxsWithHighFee(t *testing.T) {
// batch 4. In this Batch, account B has enough balance to send the txs
_ , accAuths , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs )
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , nil )
require . NoError ( t , err )
require . Equal ( t , 0 , len ( oL1UserTxs ) )
@ -1038,3 +1038,112 @@ func TestValidTxsWithLowFeeAndInvalidTxsWithHighFee(t *testing.T) {
require . Equal ( t , 3 , len ( discardedL2Txs ) )
require . Equal ( t , 0 , len ( accAuths ) )
}
func TestL1UserFutureTxs ( t * testing . T ) {
set := `
Type : Blockchain
CreateAccountDeposit ( 0 ) Coord : 0
CreateAccountDeposit ( 0 ) A : 100
> batchL1 // freeze L1User{2}
CreateAccountDeposit ( 0 ) B : 18
> batchL1 // forge L1User{2}, freeze L1User{1}
> batchL1 // forge L1User{1}
> block
`
chainID := uint16 ( 0 )
tc := til . NewContext ( chainID , common . RollupConstMaxL1UserTx )
blocks , err := tc . GenerateBlocks ( set )
assert . NoError ( t , err )
hermezContractAddr := ethCommon . HexToAddress ( "0xc344E203a046Da13b0B4467EB7B3629D0C99F6E6" )
txsel , _ := initTest ( t , chainID , hermezContractAddr , tc . Users [ "Coord" ] )
// restart nonces of TilContext, as will be set by generating directly
// the PoolL2Txs for each specific batch with tc.GeneratePoolL2Txs
tc . RestartNonces ( )
tpc := txprocessor . Config {
NLevels : 16 ,
MaxFeeTx : 10 ,
MaxTx : 10 ,
MaxL1Tx : 10 ,
ChainID : chainID ,
}
// batch1 to freeze L1UserTxs
l1UserTxs := [ ] common . L1Tx { }
l1UserFutureTxs := [ ] common . L1Tx { }
_ , _ , _ , _ , _ , _ , err = txsel . GetL1L2TxSelection ( tpc , l1UserTxs , l1UserFutureTxs )
require . NoError ( t , err )
batchPoolL2 := `
Type : PoolL2
PoolTransferToEthAddr ( 0 ) A - B : 10 ( 126 )
`
poolL2Txs , err := tc . GeneratePoolL2Txs ( batchPoolL2 )
require . NoError ( t , err )
require . Equal ( t , 1 , len ( poolL2Txs ) )
// add AccountCreationAuth for B
_ = addAccCreationAuth ( t , tc , txsel , chainID , hermezContractAddr , "B" )
// add the PoolL2Txs to the l2DB
addL2Txs ( t , txsel , poolL2Txs )
// batch 2 to crate some accounts with positive balance, and do 1 L2Tx transfer from account A
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
l1UserFutureTxs =
til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 2 ] . Batch . ForgeL1TxsNum ] )
require . Equal ( t , 2 , len ( l1UserTxs ) )
require . Equal ( t , 1 , len ( l1UserFutureTxs ) )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err :=
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , l1UserFutureTxs )
require . NoError ( t , err )
assert . Equal ( t , 2 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
// no L2Tx selected due the L1UserFutureTx, the L2Tx will be processed
// at the next batch once the L1UserTx of CreateAccount B is processed,
// despite that there is an AccountCreationAuth for Account B.
assert . Equal ( t , 0 , len ( oL2Txs ) )
assert . Equal ( t , 1 , len ( discardedL2Txs ) )
assert . Equal ( t , "Tx not selected (in processTxToEthAddrBJJ) due to L2Tx" +
" discarded at the current batch, as the receiver account does" +
" not exist yet, and there is a L1UserTx that will create that" +
" account in a future batch." ,
discardedL2Txs [ 0 ] . Info )
err = txsel . l2db . StartForging ( common . TxIDsFromPoolL2Txs ( oL2Txs ) ,
txsel . localAccountsDB . CurrentBatch ( ) )
require . NoError ( t , err )
l1UserTxs = til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 2 ] . Batch . ForgeL1TxsNum ] )
l1UserFutureTxs = [ ] common . L1Tx { }
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , l1UserTxs , l1UserFutureTxs )
require . NoError ( t , err )
assert . Equal ( t , 1 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
// L2Tx selected as now the L1UserTx of CreateAccount B is processed
assert . Equal ( t , 1 , len ( oL2Txs ) )
assert . Equal ( t , 0 , len ( discardedL2Txs ) )
err = txsel . l2db . StartForging ( common . TxIDsFromPoolL2Txs ( oL2Txs ) ,
txsel . localAccountsDB . CurrentBatch ( ) )
require . NoError ( t , err )
// generate a new L2Tx A-B and check that is processed
poolL2Txs , err = tc . GeneratePoolL2Txs ( batchPoolL2 )
require . NoError ( t , err )
require . Equal ( t , 1 , len ( poolL2Txs ) )
// add the PoolL2Txs to the l2DB
addL2Txs ( t , txsel , poolL2Txs )
_ , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err =
txsel . GetL1L2TxSelection ( tpc , nil , nil )
require . NoError ( t , err )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
require . Equal ( t , 0 , len ( oL1CoordTxs ) )
assert . Equal ( t , 1 , len ( oL2Txs ) )
assert . Equal ( t , 0 , len ( discardedL2Txs ) )
err = txsel . l2db . StartForging ( common . TxIDsFromPoolL2Txs ( oL2Txs ) ,
txsel . localAccountsDB . CurrentBatch ( ) )
require . NoError ( t , err )
}