diff --git a/common/l1tx.go b/common/l1tx.go index 7025c15..ac15b40 100644 --- a/common/l1tx.go +++ b/common/l1tx.go @@ -205,6 +205,7 @@ func (tx L1Tx) TxCompressedData(chainID uint16) (*big.Int, error) { } // BytesDataAvailability encodes a L1Tx into []byte for the Data Availability +// [ fromIdx | toIdx | amountFloat16 | Fee ] func (tx *L1Tx) BytesDataAvailability(nLevels uint32) ([]byte, error) { idxLen := nLevels / 8 //nolint:gomnd diff --git a/common/l2tx.go b/common/l2tx.go index bb83f3d..050d292 100644 --- a/common/l2tx.go +++ b/common/l2tx.go @@ -10,16 +10,19 @@ import ( // L2Tx is a struct that represents an already forged L2 tx type L2Tx struct { // Stored in DB: mandatory fileds - TxID TxID `meddler:"id"` - BatchNum BatchNum `meddler:"batch_num"` // batchNum in which this tx was forged. - Position int `meddler:"position"` - FromIdx Idx `meddler:"from_idx"` - ToIdx Idx `meddler:"to_idx"` - Amount *big.Int `meddler:"amount,bigint"` - Fee FeeSelector `meddler:"fee"` - Nonce Nonce `meddler:"nonce"` - Type TxType `meddler:"type"` - EthBlockNum int64 `meddler:"eth_block_num"` // Ethereum Block Number in which this L2Tx was added to the queue + TxID TxID `meddler:"id"` + BatchNum BatchNum `meddler:"batch_num"` // batchNum in which this tx was forged. + Position int `meddler:"position"` + FromIdx Idx `meddler:"from_idx"` + ToIdx Idx `meddler:"to_idx"` + // TokenID is filled by the TxProcessor + TokenID TokenID `meddler:"token_id"` + Amount *big.Int `meddler:"amount,bigint"` + Fee FeeSelector `meddler:"fee"` + // Nonce is filled by the TxProcessor + Nonce Nonce `meddler:"nonce"` + Type TxType `meddler:"type"` + EthBlockNum int64 `meddler:"eth_block_num"` // Ethereum Block Number in which this L2Tx was added to the queue } // NewL2Tx returns the given L2Tx with the TxId & Type parameters calculated @@ -92,6 +95,7 @@ func (tx *L2Tx) Tx() *Tx { Position: tx.Position, FromIdx: tx.FromIdx, ToIdx: tx.ToIdx, + TokenID: tx.TokenID, Amount: tx.Amount, BatchNum: batchNum, EthBlockNum: tx.EthBlockNum, @@ -107,6 +111,7 @@ func (tx L2Tx) PoolL2Tx() *PoolL2Tx { TxID: tx.TxID, FromIdx: tx.FromIdx, ToIdx: tx.ToIdx, + TokenID: tx.TokenID, Amount: tx.Amount, Fee: tx.Fee, Nonce: tx.Nonce, @@ -134,6 +139,7 @@ func TxIDsFromL2Txs(txs []L2Tx) []TxID { } // BytesDataAvailability encodes a L2Tx into []byte for the Data Availability +// [ fromIdx | toIdx | amountFloat16 | Fee ] func (tx L2Tx) BytesDataAvailability(nLevels uint32) ([]byte, error) { idxLen := nLevels / 8 //nolint:gomnd diff --git a/common/pooll2tx.go b/common/pooll2tx.go index e675228..dd88c0a 100644 --- a/common/pooll2tx.go +++ b/common/pooll2tx.go @@ -281,7 +281,8 @@ func (tx *PoolL2Tx) RqTxCompressedDataV2() (*big.Int, error) { return bi, nil } -// HashToSign returns the computed Poseidon hash from the *PoolL2Tx that will be signed by the sender. +// HashToSign returns the computed Poseidon hash from the *PoolL2Tx that will +// be signed by the sender. func (tx *PoolL2Tx) HashToSign(chainID uint16) (*big.Int, error) { toCompressedData, err := tx.TxCompressedData(chainID) if err != nil { @@ -331,6 +332,7 @@ func (tx PoolL2Tx) L2Tx() L2Tx { TxID: tx.TxID, FromIdx: tx.FromIdx, ToIdx: toIdx, + TokenID: tx.TokenID, Amount: tx.Amount, Fee: tx.Fee, Nonce: tx.Nonce, diff --git a/db/historydb/historydb.go b/db/historydb/historydb.go index c251cb5..1a36df2 100644 --- a/db/historydb/historydb.go +++ b/db/historydb/historydb.go @@ -906,6 +906,7 @@ func (hdb *HistoryDB) addL2Txs(d meddler.DB, l2txs []common.L2Tx) error { FromIdx: &l2txs[i].FromIdx, EffectiveFromIdx: &l2txs[i].FromIdx, ToIdx: l2txs[i].ToIdx, + TokenID: l2txs[i].TokenID, Amount: l2txs[i].Amount, AmountFloat: amountFloat, BatchNum: &l2txs[i].BatchNum, @@ -1278,8 +1279,8 @@ func (hdb *HistoryDB) GetAllL2Txs() ([]common.L2Tx, error) { err := meddler.QueryAll( hdb.db, &txs, `SELECT tx.id, tx.batch_num, tx.position, - tx.from_idx, tx.to_idx, tx.amount, tx.fee, tx.nonce, - tx.type, tx.eth_block_num + tx.from_idx, tx.to_idx, tx.amount, tx.token_id, + tx.fee, tx.nonce, tx.type, tx.eth_block_num FROM tx WHERE is_l1 = FALSE ORDER BY item_id;`, ) return db.SlicePtrsToSlice(txs).([]common.L2Tx), tracerr.Wrap(err) diff --git a/test/til/txs.go b/test/til/txs.go index 541f58a..1f84027 100644 --- a/test/til/txs.go +++ b/test/til/txs.go @@ -818,6 +818,7 @@ func (tc *Context) FillBlocksForgedL1UserTxs(blocks []common.BlockData) error { // - blocks[].Rollup.Batch.L2Txs[].TxID // - blocks[].Rollup.Batch.L2Txs[].Position // - blocks[].Rollup.Batch.L2Txs[].Nonce +// - blocks[].Rollup.Batch.L2Txs[].TokenID // - blocks[].Rollup.Batch.ExitTree // - blocks[].Rollup.Batch.CreatedAccounts // - blocks[].Rollup.Batch.FeeIdxCoordinator @@ -915,6 +916,7 @@ func (tc *Context) FillBlocksExtra(blocks []common.BlockData, cfg *ConfigExtra) tx.Position = position position++ tx.Nonce = tc.extra.nonces[tx.FromIdx] + tx.TokenID = tc.accountsByIdx[int(tx.FromIdx)].TokenID tc.extra.nonces[tx.FromIdx]++ if err := tx.SetID(); err != nil { return tracerr.Wrap(err)