@ -111,7 +111,7 @@ func initTxSelector(t *testing.T, chainID uint16, hermezContractAddr ethCommon.A
return txsel , l2DB , syncStateDB
}
func TestTxSelectorBatchBuilderZKInputs ( t * testing . T ) {
func TestTxSelectorBatchBuilderZKInputsMinimumFlow0 ( t * testing . T ) {
tc := til . NewContext ( ChainID , common . RollupConstMaxL1UserTx )
// generate test transactions, the L1CoordinatorTxs generated by Til
// will be ignored at this test, as will be the TxSelector who
@ -253,3 +253,88 @@ func TestTxSelectorBatchBuilderZKInputs(t *testing.T) {
err = l2DBTxSel . UpdateTxsInfo ( discardedL2Txs )
require . NoError ( t , err )
}
// TestZKInputsExitWithFee0 checks the case where there is a PoolTxs of type
// Exit with fee 0 for a TokenID that the Coordinator does not have it
// registered yet
func TestZKInputsExitWithFee0 ( t * testing . T ) {
tc := til . NewContext ( ChainID , common . RollupConstMaxL1UserTx )
var set = `
Type : Blockchain
AddToken ( 1 )
CreateAccountDeposit ( 1 ) A : 1000
CreateAccountDeposit ( 1 ) B : 1000
CreateAccountDeposit ( 1 ) C : 1000
> batchL1
> batchL1
CreateAccountCoordinator ( 1 ) Coord
> batch
> block
`
blocks , err := tc . GenerateBlocks ( set )
require . NoError ( t , err )
hermezContractAddr := ethCommon . HexToAddress ( "0xc344E203a046Da13b0B4467EB7B3629D0C99F6E6" )
txsel , l2DBTxSel , syncStateDB := initTxSelector ( t , ChainID , hermezContractAddr , tc . Users [ "Coord" ] )
bbDir , err := ioutil . TempDir ( "" , "tmpBatchBuilderDB" )
require . NoError ( t , err )
bb , err := batchbuilder . NewBatchBuilder ( bbDir , syncStateDB , 0 , NLevels )
require . NoError ( t , err )
// restart nonces of TilContext, as will be set by generating directly
// the PoolL2Txs for each specific batch with tc.GeneratePoolL2Txs
tc . RestartNonces ( )
// add tokens to HistoryDB to avoid breaking FK constrains
addTokens ( t , tc , l2DBTxSel . DB ( ) )
selectionConfig := & txselector . SelectionConfig {
MaxL1UserTxs : 100 ,
TxProcessorConfig : txprocConfig ,
}
configBatch := & batchbuilder . ConfigBatch {
TxProcessorConfig : txprocConfig ,
}
// batch2
// TxSelector select the transactions for the next Batch
l1UserTxs := til . L1TxsToCommonL1Txs ( tc . Queues [ * blocks [ 0 ] . Rollup . Batches [ 1 ] . Batch . ForgeL1TxsNum ] )
coordIdxs , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , _ , err := txsel . GetL1L2TxSelection ( selectionConfig , l1UserTxs )
require . NoError ( t , err )
// BatchBuilder build Batch
zki , err := bb . BuildBatch ( coordIdxs , configBatch , oL1UserTxs , oL1CoordTxs , oL2Txs )
require . NoError ( t , err )
assert . Equal ( t , "8737171572459172806192626402462788826264011087579491137542380589998149683116" , bb . LocalStateDB ( ) . MT . Root ( ) . BigInt ( ) . String ( ) )
h , err := zki . HashGlobalData ( )
require . NoError ( t , err )
assert . Equal ( t , "9971598169768987067017223790214537222850903267980994716992761290793474746117" , h . String ( ) )
sendProofAndCheckResp ( t , zki )
// batch3
batchPoolL2 := `
Type : PoolL2
PoolExit ( 1 ) A : 100 ( 0 ) `
l2Txs , err := tc . GeneratePoolL2Txs ( batchPoolL2 )
require . NoError ( t , err )
addL2Txs ( t , l2DBTxSel , l2Txs ) // Add L2s to TxSelector.L2DB
coordIdxs , _ , oL1UserTxs , oL1CoordTxs , oL2Txs , discardedL2Txs , err := txsel . GetL1L2TxSelection ( selectionConfig , nil )
require . NoError ( t , err )
assert . Equal ( t , 1 , len ( coordIdxs ) )
assert . Equal ( t , 0 , len ( oL1UserTxs ) )
assert . Equal ( t , 1 , len ( oL1CoordTxs ) )
assert . Equal ( t , 1 , len ( oL2Txs ) )
assert . Equal ( t , 0 , len ( discardedL2Txs ) )
// BatchBuilder build Batch
zki , err = bb . BuildBatch ( coordIdxs , configBatch , oL1UserTxs , oL1CoordTxs , oL2Txs )
require . NoError ( t , err )
assert . Equal ( t , "18306761925365215381387147754881756804475668085493847010988306480531520370130" , bb . LocalStateDB ( ) . MT . Root ( ) . BigInt ( ) . String ( ) )
h , err = zki . HashGlobalData ( )
require . NoError ( t , err )
assert . Equal ( t , "7992262236065691439683036344554725221924027193771770363772735722054938818364" , h . String ( ) )
assert . Equal ( t , common . EthAddrToBigInt ( tc . Users [ "Coord" ] . Addr ) , zki . EthAddr3 [ 0 ] )
assert . Equal ( t , "0" , zki . EthAddr3 [ 1 ] . String ( ) )
sendProofAndCheckResp ( t , zki )
}