mirror of
https://github.com/alexgo-io/stacks-blockchain-api.git
synced 2026-01-12 22:43:34 +08:00
fix: optimize getMicroblocks query (#1179)
* refactor: optimized query for getMicroblocks * test: updated tx with microblock * refactor: changed the query * refactor: removed unnecessary query check * fix: resolved lint error
This commit is contained in:
@@ -563,22 +563,13 @@ export class PgStore {
|
||||
const microblockQuery = await sql<
|
||||
(MicroblockQueryResult & { tx_id?: string | null; tx_index?: number | null })[]
|
||||
>`
|
||||
SELECT microblocks.*, tx_id FROM (
|
||||
SELECT ${sql(MICROBLOCK_COLUMNS)}
|
||||
FROM microblocks
|
||||
WHERE canonical = true AND microblock_canonical = true
|
||||
ORDER BY block_height DESC, microblock_sequence DESC
|
||||
LIMIT ${args.limit}
|
||||
OFFSET ${args.offset}
|
||||
) microblocks
|
||||
LEFT JOIN (
|
||||
SELECT tx_id, tx_index, microblock_hash
|
||||
FROM txs
|
||||
WHERE canonical = true AND microblock_canonical = true
|
||||
ORDER BY tx_index DESC
|
||||
) txs
|
||||
ON microblocks.microblock_hash = txs.microblock_hash
|
||||
ORDER BY microblocks.block_height DESC, microblocks.microblock_sequence DESC, txs.tx_index DESC
|
||||
SELECT microblocks.*, txs.tx_id
|
||||
FROM microblocks LEFT JOIN txs USING(microblock_hash)
|
||||
WHERE microblocks.canonical = true AND microblocks.microblock_canonical = true AND
|
||||
txs.canonical = true AND txs.microblock_canonical = true
|
||||
ORDER BY microblocks.block_height DESC, microblocks.microblock_sequence DESC, txs.tx_index DESC
|
||||
LIMIT ${args.limit}
|
||||
OFFSET ${args.offset};
|
||||
`;
|
||||
const microblocks: { microblock: DbMicroblock; txs: string[] }[] = [];
|
||||
microblockQuery.forEach(row => {
|
||||
|
||||
@@ -10847,6 +10847,33 @@ describe('api tests', () => {
|
||||
expect(result.body.txs).toHaveLength(1);
|
||||
expect(result.body.txs[0]).toEqual(tx_id);
|
||||
});
|
||||
test('/microblock', async () => {
|
||||
const microblock_hash = '0x0fff';
|
||||
const block = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }).build();
|
||||
await db.update(block);
|
||||
|
||||
const microblock = new TestMicroblockStreamBuilder()
|
||||
.addMicroblock({ microblock_hash, parent_index_block_hash: block.block.index_block_hash })
|
||||
.addTx({
|
||||
tx_id: '0xffff',
|
||||
})
|
||||
.addTx({
|
||||
tx_id: '0x1234',
|
||||
canonical: false,
|
||||
microblock_canonical: false,
|
||||
})
|
||||
.build();
|
||||
await db.updateMicroblocks(microblock);
|
||||
const microblockResult = await supertest(api.server).get(`/extended/v1/microblock/`);
|
||||
const response = microblockResult.body;
|
||||
const expectedTxs = ['0xffff'];
|
||||
|
||||
expect(response.total).toEqual(1);
|
||||
expect(response.results).toHaveLength(1);
|
||||
expect(response.results[0].microblock_hash).toEqual(microblock_hash);
|
||||
expect(response.results[0].txs).toHaveLength(1);
|
||||
expect(response.results[0].txs).toEqual(expectedTxs);
|
||||
});
|
||||
|
||||
test('/block', async () => {
|
||||
const block_hash = '0x1234',
|
||||
|
||||
Reference in New Issue
Block a user