diff --git a/api/batch_test.go b/api/batch_test.go index d301093..40a35b8 100644 --- a/api/batch_test.go +++ b/api/batch_test.go @@ -27,6 +27,7 @@ type testBatch struct { ExitRoot string `json:"exitRoot"` ForgeL1TxsNum *int64 `json:"forgeL1TransactionsNum"` SlotNum int64 `json:"slotNum"` + ForgedTxs int `json:"forgedTransactions"` } type testBatchesResponse struct { Batches []testBatch `json:"batches"` @@ -73,6 +74,12 @@ func genTestBatches( for k, v := range cBatches[i].CollectedFees { collectedFees[k] = v.String() } + forgedTxs := 0 + for _, tx := range txs { + if tx.BatchNum != nil && *tx.BatchNum == cBatches[i].BatchNum { + forgedTxs++ + } + } tBatch := testBatch{ BatchNum: cBatches[i].BatchNum, EthBlockNum: cBatches[i].EthBlockNum, @@ -86,6 +93,7 @@ func genTestBatches( ExitRoot: cBatches[i].ExitRoot.String(), ForgeL1TxsNum: cBatches[i].ForgeL1TxsNum, SlotNum: cBatches[i].SlotNum, + ForgedTxs: forgedTxs, } tBatches = append(tBatches, tBatch) } diff --git a/api/swagger.yml b/api/swagger.yml index 8184818..d73ae82 100644 --- a/api/swagger.yml +++ b/api/swagger.yml @@ -2086,6 +2086,10 @@ components: nullable: true slotNum: $ref: '#/components/schemas/SlotNum' + forgedTransactions: + type: integer + description: Amount of forged transactions in this batch. + example: 318 additionalProperties: false required: - itemId @@ -2101,6 +2105,7 @@ components: - exitRoot - forgeL1TransactionsNum - slotNum + - forgedTransactions FullBatch: type: object description: Group of transactions forged in a coordinator and sent and validated in Ethereum. diff --git a/db/historydb/historydb.go b/db/historydb/historydb.go index c309de2..4fa8e42 100644 --- a/db/historydb/historydb.go +++ b/db/historydb/historydb.go @@ -171,8 +171,9 @@ func (hdb *HistoryDB) GetBatchAPI(batchNum common.BatchNum) (*BatchAPI, error) { batch := &BatchAPI{} return batch, tracerr.Wrap(meddler.QueryRow( hdb.db, batch, - `SELECT batch.*, block.timestamp, block.hash - FROM batch INNER JOIN block ON batch.eth_block_num = block.eth_block_num + `SELECT batch.*, block.timestamp, block.hash, + COALESCE ((SELECT COUNT(*) FROM tx WHERE batch_num = batch.batch_num), 0) AS forged_txs + FROM batch INNER JOIN block ON batch.eth_block_num = block.eth_block_num WHERE batch_num = $1;`, batchNum, )) } @@ -186,6 +187,7 @@ func (hdb *HistoryDB) GetBatchesAPI( var query string var args []interface{} queryStr := `SELECT batch.*, block.timestamp, block.hash, + COALESCE ((SELECT COUNT(*) FROM tx WHERE batch_num = batch.batch_num), 0) AS forged_txs, count(*) OVER() AS total_items FROM batch INNER JOIN block ON batch.eth_block_num = block.eth_block_num ` // Apply filters diff --git a/db/historydb/views.go b/db/historydb/views.go index 441ab3c..a70b46f 100644 --- a/db/historydb/views.go +++ b/db/historydb/views.go @@ -291,6 +291,7 @@ type BatchAPI struct { ExitRoot apitypes.BigIntStr `json:"exitRoot" meddler:"exit_root"` ForgeL1TxsNum *int64 `json:"forgeL1TransactionsNum" meddler:"forge_l1_txs_num"` SlotNum int64 `json:"slotNum" meddler:"slot_num"` + ForgedTxs int `json:"forgedTransactions" meddler:"forged_txs"` TotalItems uint64 `json:"-" meddler:"total_items"` FirstItem uint64 `json:"-" meddler:"first_item"` LastItem uint64 `json:"-" meddler:"last_item"`