1414 * 6. Extracting guard information for security validation
1515 */
1616
17- import { BlockAttributes } from '@/models/block' ;
17+ import Block , { BlockAttributes } from '@/models/block' ;
1818import TransactionModel , { TransactionAttributes } from '@/models/transaction' ;
1919import Event , { EventAttributes } from '@/models/event' ;
2020import Transfer , { TransferAttributes } from '@/models/transfer' ;
2121import { getNftTransfers , getCoinTransfers } from './transfers' ;
22- import { Transaction } from 'sequelize' ;
22+ import { Op , Transaction } from 'sequelize' ;
2323import Signer from '@/models/signer' ;
2424import Guard from '@/models/guard' ;
2525import { handleSingleQuery } from '@/utils/raw-query' ;
@@ -74,11 +74,9 @@ export async function processPayloadKey(
7474 const transactions = payloadData . transactions || [ ] ;
7575
7676 // Process all regular transactions in parallel
77- const transactionPromises : Array <
78- Promise < { events : EventAttributes [ ] ; transfers : TransferAttributes [ ] } >
79- > = transactions . map ( ( transactionInfo : any ) => {
80- return processTransaction ( transactionInfo , block , tx ) ;
81- } ) ;
77+ const transactionPromises : Array < Promise < TransactionResult > > = transactions . map (
78+ ( transactionInfo : any ) => processTransaction ( transactionInfo , block , tx ) ,
79+ ) ;
8280
8381 const transactionResults = await Promise . all ( transactionPromises ) ;
8482 const normalEvents = transactionResults . map ( t => t . events ) . flat ( ) ;
@@ -87,15 +85,31 @@ export async function processPayloadKey(
8785 const coinbaseResult = await addCoinbaseTransactions ( [ block ] , tx ! ) ;
8886 const coinbaseEvents = coinbaseResult . events ;
8987
88+ const totalGasUsed = transactionResults . reduce ( ( acc , t ) => {
89+ const gasUsed = new Decimal ( t . gas ) . mul ( t . gasprice ) . toNumber ( ) ;
90+ return acc . plus ( gasUsed ) ;
91+ } , new Decimal ( 0 ) ) ;
92+
9093 await increaseCounters ( {
9194 canonicalBlocksCount : 1 ,
9295 orphansBlocksCount : 0 ,
9396 canonicalTransactionsCount : transactionPromises . length ,
9497 orphanTransactionsCount : 0 ,
9598 chainId : block . chainId ,
99+ totalGasUsed : totalGasUsed . toNumber ( ) ,
96100 tx,
97101 } ) ;
98102
103+ await Block . update (
104+ {
105+ totalGasUsed : sequelize . literal ( `COALESCE("totalGasUsed", 0) + ${ totalGasUsed } ` ) ,
106+ } ,
107+ {
108+ transaction : tx ,
109+ where : { id : { [ Op . eq ] : block . id } } ,
110+ } ,
111+ ) ;
112+
99113 // Combine all events from both transaction types
100114 return [ ...normalEvents , ...coinbaseEvents ] ;
101115}
@@ -118,11 +132,19 @@ export async function processPayloadKey(
118132 * TODO: [OPTIMIZATION] The balance insert operation uses a raw SQL query which could potentially
119133 * be vulnerable to SQL injection. Consider using parameterized queries or ORM methods.
120134 */
135+
136+ export interface TransactionResult {
137+ events : EventAttributes [ ] ;
138+ transfers : TransferAttributes [ ] ;
139+ gas : string ;
140+ gasprice : string ;
141+ }
142+
121143export async function processTransaction (
122144 transactionArray : any ,
123145 block : BlockAttributes ,
124146 tx ?: Transaction ,
125- ) : Promise < { events : EventAttributes [ ] ; transfers : TransferAttributes [ ] } > {
147+ ) : Promise < TransactionResult > {
126148 const transactionInfo = transactionArray [ TRANSACTION_INDEX ] ;
127149 const receiptInfo = transactionArray [ RECEIPT_INDEX ] ;
128150
@@ -312,6 +334,8 @@ export async function processTransaction(
312334 return {
313335 events : eventsWithTransactionId ,
314336 transfers : transfersWithTransactionId ,
337+ gas : transactionDetailsAttributes . gas ,
338+ gasprice : transactionDetailsAttributes . gasprice ,
315339 } ;
316340 }
317341
@@ -338,6 +362,8 @@ export async function processTransaction(
338362 return {
339363 events : eventsWithTransactionId ,
340364 transfers : transfersWithTransactionId ,
365+ gas : transactionDetailsAttributes . gas ,
366+ gasprice : transactionDetailsAttributes . gasprice ,
341367 } ;
342368 } catch ( error ) {
343369 console . error (
0 commit comments