From 4b0b850cf9ff6649cd62ec975d72a37c511d95ac Mon Sep 17 00:00:00 2001 From: MHassanTariq Date: Mon, 16 May 2022 15:01:52 +0500 Subject: [PATCH 1/4] test: added test for duplicate txs in microblocks --- src/tests/api-tests.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/tests/api-tests.ts b/src/tests/api-tests.ts index 1c4fd59c58..e6ef45e0c9 100644 --- a/src/tests/api-tests.ts +++ b/src/tests/api-tests.ts @@ -10813,6 +10813,41 @@ describe('api tests', () => { expect(addressEvents.status).toBe(400); }); + test('/microblock/:hash duplicate txs', async () => { + const microblock_hash = '0x0fff'; + const microblock = new TestMicroblockStreamBuilder().addMicroblock({ microblock_hash }).build(); + // adding a tx in a block with canonical and microblock_canonical true + const block1 = new TestBlockBuilder({ block_hash: '0x1234' }) + .addTx({ + microblock_canonical: true, + // tx is in the same microblock_hash + microblock_hash, + canonical: true, + block_hash: '0x1234', + }) + .build(); + // adding same tx in another block with canonical and microblock_canonical false + const block2 = new TestBlockBuilder({ + block_hash: '0x123456', + index_block_hash: '0xdeadmeet', + }) + .addTx({ + microblock_canonical: true, + // tx is in the same microblock_hash + microblock_hash, + canonical: true, + block_hash: '0x123456', + }) + .build(); + await db.update(block1); + await db.update(block2); + await db.updateMicroblocks(microblock); + + const result = await supertest(api.server).get(`/extended/v1/microblock/${microblock_hash}`); + expect(result.body.txs).toHaveLength(1); + expect(result.body.txs[0]).toEqual(block1.txs[0].tx.tx_id); + }); + afterEach(async () => { await api.terminate(); await db?.close(); From f95618a8c763189ad48d387c4b3cb2f1587524bd Mon Sep 17 00:00:00 2001 From: MHassanTariq Date: Mon, 16 May 2022 17:00:06 +0500 Subject: [PATCH 2/4] fix: rebased with develop --- src/datastore/pg-store.ts | 2 +- src/tests/api-tests.ts | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/datastore/pg-store.ts b/src/datastore/pg-store.ts index ed762d5000..eb15a169df 100644 --- a/src/datastore/pg-store.ts +++ b/src/datastore/pg-store.ts @@ -431,7 +431,7 @@ export class PgStore { const txQuery = await sql<{ tx_id: string }[]>` SELECT tx_id FROM txs - WHERE microblock_hash = ${args.microblockHash} + WHERE microblock_hash = ${args.microblockHash} AND canonical = true AND microblock_canonical = true ORDER BY tx_index DESC `; const microblock = parseMicroblockQueryResult(result[0]); diff --git a/src/tests/api-tests.ts b/src/tests/api-tests.ts index e6ef45e0c9..d2c81f557f 100644 --- a/src/tests/api-tests.ts +++ b/src/tests/api-tests.ts @@ -10817,7 +10817,7 @@ describe('api tests', () => { const microblock_hash = '0x0fff'; const microblock = new TestMicroblockStreamBuilder().addMicroblock({ microblock_hash }).build(); // adding a tx in a block with canonical and microblock_canonical true - const block1 = new TestBlockBuilder({ block_hash: '0x1234' }) + const block1 = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }) .addTx({ microblock_canonical: true, // tx is in the same microblock_hash @@ -10829,21 +10829,38 @@ describe('api tests', () => { // adding same tx in another block with canonical and microblock_canonical false const block2 = new TestBlockBuilder({ block_hash: '0x123456', - index_block_hash: '0xdeadmeet', + index_block_hash: '0x00abcd', + parent_block_hash: block1.block.block_hash, + parent_index_block_hash: block1.block.index_block_hash, + block_height: 2, }) .addTx({ - microblock_canonical: true, + microblock_canonical: false, // tx is in the same microblock_hash microblock_hash, - canonical: true, + canonical: false, block_hash: '0x123456', }) .build(); + + block2.microblocks = [ + { + ...microblock.microblocks[0], + canonical: true, + microblock_canonical: true, + block_height: block2.block.block_height, + parent_block_hash: block1.block.block_hash, + parent_block_height: block2.block.block_height, + index_block_hash: block2.block.index_block_hash, + block_hash: block2.block.block_hash, + }, + ]; + await db.update(block1); await db.update(block2); - await db.updateMicroblocks(microblock); const result = await supertest(api.server).get(`/extended/v1/microblock/${microblock_hash}`); + expect(result.body.txs).toHaveLength(1); expect(result.body.txs[0]).toEqual(block1.txs[0].tx.tx_id); }); From 0f362f843344b42ed4eaaa9798a4439d83a6827d Mon Sep 17 00:00:00 2001 From: MHassanTariq Date: Mon, 23 May 2022 01:22:47 +0500 Subject: [PATCH 3/4] test: updated txs with microblock --- src/tests/api-tests.ts | 48 ++++++++++++------------------------------ 1 file changed, 13 insertions(+), 35 deletions(-) diff --git a/src/tests/api-tests.ts b/src/tests/api-tests.ts index d2c81f557f..82b9abbe2e 100644 --- a/src/tests/api-tests.ts +++ b/src/tests/api-tests.ts @@ -10814,55 +10814,33 @@ describe('api tests', () => { }); test('/microblock/:hash duplicate txs', async () => { - const microblock_hash = '0x0fff'; - const microblock = new TestMicroblockStreamBuilder().addMicroblock({ microblock_hash }).build(); + const microblock_hash = '0x0fff', + tx_id = '0x1234'; // adding a tx in a block with canonical and microblock_canonical true - const block1 = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }) + const block1 = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }).build(); + await db.update(block1); + + const microblock = new TestMicroblockStreamBuilder() + .addMicroblock({ microblock_hash, parent_index_block_hash: block1.block.index_block_hash }) .addTx({ + tx_id, microblock_canonical: true, - // tx is in the same microblock_hash - microblock_hash, canonical: true, - block_hash: '0x1234', + index_block_hash: '0x1234', }) - .build(); - // adding same tx in another block with canonical and microblock_canonical false - const block2 = new TestBlockBuilder({ - block_hash: '0x123456', - index_block_hash: '0x00abcd', - parent_block_hash: block1.block.block_hash, - parent_index_block_hash: block1.block.index_block_hash, - block_height: 2, - }) .addTx({ + tx_id, microblock_canonical: false, - // tx is in the same microblock_hash - microblock_hash, canonical: false, - block_hash: '0x123456', + index_block_hash: '0x123456', }) .build(); - block2.microblocks = [ - { - ...microblock.microblocks[0], - canonical: true, - microblock_canonical: true, - block_height: block2.block.block_height, - parent_block_hash: block1.block.block_hash, - parent_block_height: block2.block.block_height, - index_block_hash: block2.block.index_block_hash, - block_hash: block2.block.block_hash, - }, - ]; - - await db.update(block1); - await db.update(block2); + await db.updateMicroblocks(microblock); const result = await supertest(api.server).get(`/extended/v1/microblock/${microblock_hash}`); - expect(result.body.txs).toHaveLength(1); - expect(result.body.txs[0]).toEqual(block1.txs[0].tx.tx_id); + expect(result.body.txs[0]).toEqual(tx_id); }); afterEach(async () => { From 5a2825299a7eb281ec3bc050c00bcb84fe09a5d5 Mon Sep 17 00:00:00 2001 From: MHassanTariq Date: Mon, 23 May 2022 01:30:25 +0500 Subject: [PATCH 4/4] test: removed unnecessary comments --- src/tests/api-tests.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/tests/api-tests.ts b/src/tests/api-tests.ts index 82b9abbe2e..a91b9f25e7 100644 --- a/src/tests/api-tests.ts +++ b/src/tests/api-tests.ts @@ -10816,12 +10816,11 @@ describe('api tests', () => { test('/microblock/:hash duplicate txs', async () => { const microblock_hash = '0x0fff', tx_id = '0x1234'; - // adding a tx in a block with canonical and microblock_canonical true - const block1 = new TestBlockBuilder({ block_hash: '0x1234', block_height: 1 }).build(); - await db.update(block1); + 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: block1.block.index_block_hash }) + .addMicroblock({ microblock_hash, parent_index_block_hash: block.block.index_block_hash }) .addTx({ tx_id, microblock_canonical: true, @@ -10835,7 +10834,6 @@ describe('api tests', () => { index_block_hash: '0x123456', }) .build(); - await db.updateMicroblocks(microblock); const result = await supertest(api.server).get(`/extended/v1/microblock/${microblock_hash}`);