diff --git a/src/api/schemas/v3/entities/transaction-summaries.ts b/src/api/schemas/v3/entities/transaction-summaries.ts index c9d2ff6204..c5d875df39 100644 --- a/src/api/schemas/v3/entities/transaction-summaries.ts +++ b/src/api/schemas/v3/entities/transaction-summaries.ts @@ -56,6 +56,9 @@ export const BaseTransactionSummarySchema = Type.Object({ block: BlockPositionSchema, bitcoin_block: BitcoinBlockPositionSchema, status: TransactionStatusSchema, + event_count: Type.Integer({ + description: 'Number of events in the transaction', + }), }); export type BaseTransactionSummary = Static; diff --git a/src/api/schemas/v3/entities/transactions.ts b/src/api/schemas/v3/entities/transactions.ts index e65009737f..4d4529ed09 100644 --- a/src/api/schemas/v3/entities/transactions.ts +++ b/src/api/schemas/v3/entities/transactions.ts @@ -31,9 +31,6 @@ const BaseTransactionSchema = Type.Composite([ description: 'Only present when requested via the `include=post_conditions` query param.', }) ), - event_count: Type.Integer({ - description: 'Number of events in the transaction', - }), execution_cost: ExecutionCostSchema, vm_error: Nullable( Type.String({ diff --git a/src/api/serializers/v3/transactions.ts b/src/api/serializers/v3/transactions.ts index db61b9334c..16ab34e2e0 100644 --- a/src/api/serializers/v3/transactions.ts +++ b/src/api/serializers/v3/transactions.ts @@ -120,6 +120,7 @@ export function serializeDbTransactionSummary(summary: DbTransactionSummary): Tr time_iso: unixEpochToIso(summary.burn_block_time), }, status: serializeDbTransactionStatus(summary.status), + event_count: summary.event_count, }; switch (summary.type_id) { case DbTxTypeId.TokenTransfer: { @@ -241,7 +242,6 @@ export function serializeDbTransaction( hash: transaction.parent_block_hash, index_hash: transaction.parent_index_block_hash, }, - event_count: transaction.event_count, // execution_cost_* arrive as decimal strings from Postgres (BIGINT). Coerce to ints // to match the response schema; v1/v2 do the same in `datastore/helpers.ts`. execution_cost: { diff --git a/src/datastore/v3/constants.ts b/src/datastore/v3/constants.ts index 5fe6d79eb0..c1aec95359 100644 --- a/src/datastore/v3/constants.ts +++ b/src/datastore/v3/constants.ts @@ -37,6 +37,7 @@ export const TX_SUMMARY_COLUMNS = [ 'contract_call_function_name', 'coinbase_alt_recipient', 'tenure_change_cause', + 'event_count', ]; // Heavy columns (post_conditions, raw_result, smart_contract_source_code, @@ -46,7 +47,6 @@ export const TX_COLUMNS = [ ...TX_SUMMARY_COLUMNS, 'parent_block_hash', 'parent_index_block_hash', - 'event_count', 'execution_cost_read_count', 'execution_cost_read_length', 'execution_cost_runtime', diff --git a/src/datastore/v3/types.ts b/src/datastore/v3/types.ts index 22919b68c9..d0cc76ccb6 100644 --- a/src/datastore/v3/types.ts +++ b/src/datastore/v3/types.ts @@ -51,11 +51,11 @@ export interface DbTransactionSummary extends DbTxLocation { contract_call_function_name: string | null; coinbase_alt_recipient: string | null; tenure_change_cause: number | null; + event_count: number; } export interface DbTransaction extends DbTransactionSummary { post_conditions: string; - event_count: number; execution_cost_read_count: number; execution_cost_read_length: number; execution_cost_runtime: number; diff --git a/tests/api/blocks/block-v3.test.ts b/tests/api/blocks/block-v3.test.ts index 0d81dd8d27..e123232155 100644 --- a/tests/api/blocks/block-v3.test.ts +++ b/tests/api/blocks/block-v3.test.ts @@ -118,6 +118,7 @@ describe('v3 blocks', () => { burn_block_time: 1000, tx_index: 1, fee_rate: 75n, + event_count: 2, type_id: DbTxTypeId.TokenTransfer, status: DbTxStatus.Success, sender_address: SENDER, @@ -166,6 +167,7 @@ describe('v3 blocks', () => { }, sponsor: null, fee_rate: '75', + event_count: 2, token_transfer: { recipient: RECIPIENT, amount: '100', @@ -198,6 +200,7 @@ describe('v3 blocks', () => { }, sponsor: null, fee_rate: '50', + event_count: 0, coinbase: { alt_recipient: null, }, diff --git a/tests/api/principal-v3/principals.test.ts b/tests/api/principal-v3/principals.test.ts index 36d0507f6a..71c4e18d2e 100644 --- a/tests/api/principal-v3/principals.test.ts +++ b/tests/api/principal-v3/principals.test.ts @@ -164,6 +164,7 @@ describe('principals', () => { }, sponsor: null, fee_rate: '50', + event_count: 0, block: { height: 2, hash: hex(2), @@ -211,6 +212,7 @@ describe('principals', () => { }, sponsor: null, fee_rate: '50', + event_count: 0, block: { height: 1, hash: hex(1), diff --git a/tests/api/transactions/tx-batch-v3.test.ts b/tests/api/transactions/tx-batch-v3.test.ts index a566642d6c..c9c456c78c 100644 --- a/tests/api/transactions/tx-batch-v3.test.ts +++ b/tests/api/transactions/tx-batch-v3.test.ts @@ -101,6 +101,7 @@ describe('v3 transactions batch', () => { .addTx({ tx_id: TX_3, tx_index: 0, + event_count: 4, block_hash: '0x0002', index_block_hash: '0x0002', type_id: DbTxTypeId.Coinbase, @@ -137,13 +138,13 @@ describe('v3 transactions batch', () => { body.results.map((r: { tx_id: string }) => r.tx_id), [TX_3, TX_1] ); - // Summary shape, not full transaction: no event_count / execution_cost / post_conditions. + // Summary shape, not full transaction: no execution_cost / post_conditions. const summary = body.results[0]; assert.equal(summary.block.height, 2); assert.equal(summary.sender.address, SENDER); assert.equal(summary.status, 'success'); assert.equal(summary.type, 'coinbase'); - assert.equal('event_count' in summary, false); + assert.equal(summary.event_count, 4); assert.equal('execution_cost' in summary, false); }); diff --git a/tests/api/transactions/tx-v3.test.ts b/tests/api/transactions/tx-v3.test.ts index 40307dc943..3c0a90f609 100644 --- a/tests/api/transactions/tx-v3.test.ts +++ b/tests/api/transactions/tx-v3.test.ts @@ -81,6 +81,7 @@ describe('v3 transactions', () => { tx_id: '0x0002', tx_index: 0, fee_rate: 50n, + event_count: 3, block_hash: '0x0002', index_block_hash: '0x0002', block_time: 2000, @@ -131,6 +132,7 @@ describe('v3 transactions', () => { }, sponsor: null, fee_rate: '50', + event_count: 3, token_transfer: { recipient: 'STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6', amount: '100', @@ -163,6 +165,7 @@ describe('v3 transactions', () => { }, sponsor: null, fee_rate: '50', + event_count: 0, coinbase: { alt_recipient: null, },