Skip to content

Commit

Permalink
fix: patch ordinal number for transfers replay (#134)
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelcr committed Jul 7, 2023
1 parent c743adb commit 8d3fb5b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/chainhook/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const InscriptionTransferredSchema = Type.Object({
satpoint_pre_transfer: Type.String(),
satpoint_post_transfer: Type.String(),
post_transfer_output_value: Nullable(Type.Integer()),
ordinal_number: Nullable(Type.Integer()),
});
export type InscriptionTransferred = Static<typeof InscriptionTransferredSchema>;

Expand Down
32 changes: 24 additions & 8 deletions src/pg/pg-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,27 @@ export class PgStore extends BasePgStore {
const transfer = operation.inscription_transferred;
const satpoint = parseSatPoint(transfer.satpoint_post_transfer);
const prevSatpoint = parseSatPoint(transfer.satpoint_pre_transfer);
const genesis = await this.getInscriptionGenesis({
genesis_id: transfer.inscription_id,
});
if (genesis) {
const inscription_id = parseInt(genesis.inscription_id);
const inscriptionId = await sql<{ id: string }[]>`
SELECT id FROM inscriptions WHERE genesis_id = ${transfer.inscription_id}
`;
if (inscriptionId.count) {
const inscription_id = parseInt(inscriptionId[0].id);
let sat_ordinal: string;
let sat_rarity: string;
let sat_coinbase_height: number;
if (transfer.ordinal_number) {
const satoshi = new OrdinalSatoshi(transfer.ordinal_number);
sat_ordinal = satoshi.ordinal.toString();
sat_rarity = satoshi.rarity;
sat_coinbase_height = satoshi.blockHeight;
} else {
const genesis = await this.getInscriptionGenesis({
genesis_id: transfer.inscription_id,
});
sat_ordinal = genesis?.sat_ordinal ?? '0';
sat_rarity = genesis?.sat_rarity ?? 'common';
sat_coinbase_height = parseInt(genesis?.sat_coinbase_height ?? '767430');
}
await this.insertInscriptionTransfer({
inscription_id,
location: {
Expand All @@ -193,9 +209,9 @@ export class PgStore extends BasePgStore {
: null,
timestamp: event.timestamp,
// TODO: Store these fields in `inscriptions` instead of `locations`.
sat_ordinal: genesis.sat_ordinal,
sat_rarity: genesis.sat_rarity,
sat_coinbase_height: parseInt(genesis.sat_coinbase_height),
sat_ordinal,
sat_rarity,
sat_coinbase_height,
},
});
updatedInscriptionIds.add(inscription_id);
Expand Down
1 change: 1 addition & 0 deletions tests/cache.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ describe('ETag cache', () => {
satpoint_post_transfer:
'ae9d273a10e899f0d2cad47ee2b0e77ab8a9addd9dd5bb5e4b03d6971c060d52:0:0',
post_transfer_output_value: 100,
ordinal_number: null,
})
.build();
await db.updateInscriptions(block3);
Expand Down
9 changes: 9 additions & 0 deletions tests/inscriptions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'bdda0d240132bab2af7f797d1507beb1acab6ad43e2c0ef7f96291aea5cc3444:0:0',
post_transfer_output_value: 9000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -356,6 +357,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'e3af144354367de58c675e987febcb49f17d6c19e645728b833fe95408feab85:0:0',
post_transfer_output_value: 8000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -437,6 +439,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'bdda0d240132bab2af7f797d1507beb1acab6ad43e2c0ef7f96291aea5cc3444:0:0',
post_transfer_output_value: 9000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -486,6 +489,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'e3af144354367de58c675e987febcb49f17d6c19e645728b833fe95408feab85:0:0',
post_transfer_output_value: 8000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -572,6 +576,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'bdda0d240132bab2af7f797d1507beb1acab6ad43e2c0ef7f96291aea5cc3444:0:0',
post_transfer_output_value: 9000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -627,6 +632,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'e3af144354367de58c675e987febcb49f17d6c19e645728b833fe95408feab85:0:0',
post_transfer_output_value: 8000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -752,6 +758,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'bdda0d240132bab2af7f797d1507beb1acab6ad43e2c0ef7f96291aea5cc3444:0:0',
post_transfer_output_value: 9000,
ordinal_number: null,
})
.transaction({
hash: 'abe7deebd0c6bacc9b1ddd234f9442db0530180448e934f34b9cbf3d7e6d91cb',
Expand All @@ -764,6 +771,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'abe7deebd0c6bacc9b1ddd234f9442db0530180448e934f34b9cbf3d7e6d91cb:0:0',
post_transfer_output_value: 9000,
ordinal_number: null,
})
.build()
);
Expand Down Expand Up @@ -849,6 +857,7 @@ describe('/inscriptions', () => {
satpoint_post_transfer:
'5cabafe04aaf98b1f325b0c3ffcbff904dbdb6f3d2e9e451102fda36f1056b5e:0:0',
post_transfer_output_value: 8000,
ordinal_number: null,
})
.build()
);
Expand Down

0 comments on commit 8d3fb5b

Please sign in to comment.