@ -3,6 +3,7 @@ package coordinator
import (
import (
"context"
"context"
"fmt"
"fmt"
"math/big"
"strings"
"strings"
"sync"
"sync"
"time"
"time"
@ -772,7 +773,15 @@ func (p *Pipeline) Stop(ctx context.Context) {
}
}
}
}
func l2TxsIDs ( txs [ ] common . PoolL2Tx ) [ ] common . TxID {
func poolL2TxsIDs ( txs [ ] common . PoolL2Tx ) [ ] common . TxID {
txIDs := make ( [ ] common . TxID , len ( txs ) )
for i , tx := range txs {
txIDs [ i ] = tx . TxID
}
return txIDs
}
func l2TxsIDs ( txs [ ] common . L2Tx ) [ ] common . TxID {
txIDs := make ( [ ] common . TxID , len ( txs ) )
txIDs := make ( [ ] common . TxID , len ( txs ) )
for i , tx := range txs {
for i , tx := range txs {
txIDs [ i ] = tx . TxID
txIDs [ i ] = tx . TxID
@ -810,9 +819,11 @@ func (p *Pipeline) forgeBatch(ctx context.Context, batchNum common.BatchNum, sel
var poolL2Txs [ ] common . PoolL2Tx
var poolL2Txs [ ] common . PoolL2Tx
// var feesInfo
// var feesInfo
var l1UserTxsExtra , l1CoordTxs [ ] common . L1Tx
var l1UserTxsExtra , l1CoordTxs [ ] common . L1Tx
var auths [ ] [ ] byte
var coordIdxs [ ] common . Idx
var coordIdxs [ ] common . Idx
// 1. Decide if we forge L2Tx or L1+L2Tx
// 1. Decide if we forge L2Tx or L1+L2Tx
if p . shouldL1L2Batch ( ) {
if p . shouldL1L2Batch ( ) {
batchInfo . L1Batch = true
p . lastScheduledL1BatchBlockNum = p . stats . Eth . LastBlock . Num
p . lastScheduledL1BatchBlockNum = p . stats . Eth . LastBlock . Num
// 2a: L1+L2 txs
// 2a: L1+L2 txs
p . lastForgeL1TxsNum ++
p . lastForgeL1TxsNum ++
@ -821,14 +832,14 @@ func (p *Pipeline) forgeBatch(ctx context.Context, batchNum common.BatchNum, sel
return nil , tracerr . Wrap ( err )
return nil , tracerr . Wrap ( err )
}
}
// TODO once feesInfo is added to method return, add the var
// TODO once feesInfo is added to method return, add the var
coordIdxs , l1UserTxsExtra , l1CoordTxs , poolL2Txs , err =
coordIdxs , auths , l1UserTxsExtra , l1CoordTxs , poolL2Txs , err =
p . txSelector . GetL1L2TxSelection ( selectionConfig , batchNum , l1UserTxs )
p . txSelector . GetL1L2TxSelection ( selectionConfig , batchNum , l1UserTxs )
if err != nil {
if err != nil {
return nil , tracerr . Wrap ( err )
return nil , tracerr . Wrap ( err )
}
}
} else {
} else {
// 2b: only L2 txs
// 2b: only L2 txs
coordIdxs , l1CoordTxs , poolL2Txs , err =
coordIdxs , auths , l1CoordTxs , poolL2Txs , err =
p . txSelector . GetL2TxSelection ( selectionConfig , batchNum )
p . txSelector . GetL2TxSelection ( selectionConfig , batchNum )
if err != nil {
if err != nil {
return nil , tracerr . Wrap ( err )
return nil , tracerr . Wrap ( err )
@ -840,9 +851,10 @@ func (p *Pipeline) forgeBatch(ctx context.Context, batchNum common.BatchNum, sel
// TODO feesInfo
// TODO feesInfo
batchInfo . L1UserTxsExtra = l1UserTxsExtra
batchInfo . L1UserTxsExtra = l1UserTxsExtra
batchInfo . L1CoordTxs = l1CoordTxs
batchInfo . L1CoordTxs = l1CoordTxs
batchInfo . L2Txs = poolL2Txs
batchInfo . L1CoordinatorTxsAuths = auths
batchInfo . CoordIdxs = coordIdxs
if err := p . l2DB . StartForging ( l2TxsIDs ( batchInfo . L2Txs ) , batchInfo . BatchNum ) ; err != nil {
if err := p . l2DB . StartForging ( poo lL 2TxsIDs( pool L2Txs) , batchInfo . BatchNum ) ; err != nil {
return nil , tracerr . Wrap ( err )
return nil , tracerr . Wrap ( err )
}
}
@ -864,6 +876,11 @@ func (p *Pipeline) forgeBatch(ctx context.Context, batchNum common.BatchNum, sel
if err != nil {
if err != nil {
return nil , tracerr . Wrap ( err )
return nil , tracerr . Wrap ( err )
}
}
l2Txs , err := common . PoolL2TxsToL2Txs ( poolL2Txs ) // NOTE: This is a big uggly, find a better way
if err != nil {
return nil , tracerr . Wrap ( err )
}
batchInfo . L2Txs = l2Txs
// 5. Save metadata from BatchBuilder output for BatchNum
// 5. Save metadata from BatchBuilder output for BatchNum
batchInfo . ZKInputs = zkInputs
batchInfo . ZKInputs = zkInputs
@ -903,6 +920,25 @@ func (p *Pipeline) shouldL1L2Batch() bool {
}
}
func ( p * Pipeline ) prepareForgeBatchArgs ( batchInfo * BatchInfo ) * eth . RollupForgeBatchArgs {
func ( p * Pipeline ) prepareForgeBatchArgs ( batchInfo * BatchInfo ) * eth . RollupForgeBatchArgs {
// TODO
return & eth . RollupForgeBatchArgs { }
proof := batchInfo . Proof
zki := batchInfo . ZKInputs
return & eth . RollupForgeBatchArgs {
NewLastIdx : int64 ( zki . Metadata . NewLastIdxRaw ) ,
NewStRoot : zki . Metadata . NewStateRootRaw . BigInt ( ) ,
NewExitRoot : zki . Metadata . NewExitRootRaw . BigInt ( ) ,
L1UserTxs : batchInfo . L1UserTxsExtra ,
L1CoordinatorTxs : batchInfo . L1CoordTxs ,
L1CoordinatorTxsAuths : batchInfo . L1CoordinatorTxsAuths ,
L2TxsData : batchInfo . L2Txs ,
FeeIdxCoordinator : batchInfo . CoordIdxs ,
// Circuit selector
VerifierIdx : 0 , // TODO
L1Batch : batchInfo . L1Batch ,
ProofA : [ 2 ] * big . Int { proof . PiA [ 0 ] , proof . PiA [ 1 ] } ,
ProofB : [ 2 ] [ 2 ] * big . Int {
{ proof . PiB [ 0 ] [ 0 ] , proof . PiB [ 0 ] [ 1 ] } ,
{ proof . PiB [ 1 ] [ 0 ] , proof . PiB [ 1 ] [ 1 ] } ,
} ,
ProofC : [ 2 ] * big . Int { proof . PiC [ 0 ] , proof . PiC [ 1 ] } ,
}
}
}