mirror of
https://github.com/alexgo-io/bitcoin-indexer.git
synced 2026-01-12 16:52:57 +08:00
@@ -316,19 +316,21 @@ export const InscriptionResponse = Type.Object(
|
||||
timestamp: Type.Integer({ examples: [1677733170000] }),
|
||||
curse_type: Nullable(Type.String({ examples: ['p2wsh'] })),
|
||||
recursive: Type.Boolean({ examples: [true] }),
|
||||
recursion_refs: Nullable(
|
||||
Type.Array(
|
||||
recursion_refs: Type.Array(
|
||||
Type.String({
|
||||
examples: [
|
||||
'1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0',
|
||||
'541076e29e1b63460412d3087b37130c9a14abd0beeb4e9b2b805d2072c84dedi0',
|
||||
],
|
||||
})
|
||||
)
|
||||
),
|
||||
parent: Nullable(
|
||||
parent: Type.Null(), // Deprecated
|
||||
parent_refs: Type.Array(
|
||||
Type.String({
|
||||
examples: ['1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0'],
|
||||
examples: [
|
||||
'1463d48e9248159084929294f64bda04487503d30ce7ab58365df1dc6fd58218i0',
|
||||
'541076e29e1b63460412d3087b37130c9a14abd0beeb4e9b2b805d2072c84dedi0',
|
||||
],
|
||||
})
|
||||
),
|
||||
delegate: Nullable(
|
||||
|
||||
@@ -89,8 +89,9 @@ export function parseDbInscriptions(
|
||||
timestamp: parseTimestamp(i.timestamp),
|
||||
curse_type: i.curse_type,
|
||||
recursive: i.recursive,
|
||||
recursion_refs: i.recursion_refs?.split(',') ?? null,
|
||||
parent: i.parent,
|
||||
recursion_refs: i.recursion_refs?.split(',') ?? [],
|
||||
parent: null,
|
||||
parent_refs: i.parent_refs?.split(',') ?? [],
|
||||
metadata: i.metadata ? JSON.parse(i.metadata) : null,
|
||||
delegate: i.delegate ?? null,
|
||||
meta_protocol: i.metaprotocol ?? null,
|
||||
|
||||
@@ -175,8 +175,7 @@ export class PgStore extends BasePgStore {
|
||||
SELECT ip.parent_inscription_id
|
||||
FROM inscription_parents AS ip
|
||||
WHERE ip.inscription_id = i.inscription_id
|
||||
LIMIT 1
|
||||
) AS parent,
|
||||
) AS parent_refs,
|
||||
i.metadata,
|
||||
s.rarity AS sat_rarity,
|
||||
s.coinbase_height AS sat_coinbase_height,
|
||||
@@ -191,6 +190,7 @@ export class PgStore extends BasePgStore {
|
||||
i.timestamp AS genesis_timestamp,
|
||||
i.address AS genesis_address,
|
||||
i.charms,
|
||||
i.delegate,
|
||||
cur.address,
|
||||
cur.tx_index,
|
||||
cur.block_height,
|
||||
|
||||
@@ -31,7 +31,7 @@ export type DbFullyLocatedInscriptionResult = {
|
||||
curse_type: string | null;
|
||||
recursive: boolean;
|
||||
recursion_refs: string | null;
|
||||
parent: string | null;
|
||||
parent_refs: string | null;
|
||||
metadata: string | null;
|
||||
input_index: number;
|
||||
pointer: number | null;
|
||||
|
||||
@@ -94,8 +94,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -200,6 +201,7 @@ describe('/inscriptions', () => {
|
||||
'b4b27b9a15f928b95a8ce4b418946553b7b313a345254cd9b23d79489175fa5ai0',
|
||||
],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -299,9 +301,9 @@ describe('/inscriptions', () => {
|
||||
url: '/ordinals/v1/inscriptions/f351d86c6e6cae3c64e297e7463095732f216875bcc1f3c03f950a492bb25421i0',
|
||||
});
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.json().parent).toBe(
|
||||
'9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201i0'
|
||||
);
|
||||
expect(response.json().parent_refs).toStrictEqual([
|
||||
'9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201i0',
|
||||
]);
|
||||
});
|
||||
|
||||
test('shows inscription with metadata', async () => {
|
||||
@@ -404,8 +406,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -487,8 +490,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: '88',
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -597,8 +601,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -655,8 +660,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -769,8 +775,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -863,8 +870,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: '{"tag":66}',
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -921,8 +929,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: '{"tag":66}',
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -1047,6 +1056,15 @@ describe('/inscriptions', () => {
|
||||
expect(response.statusCode).toBe(200);
|
||||
expect(response.headers['content-length']).toBe('5');
|
||||
expect(response.body).toBe('Hello');
|
||||
|
||||
const response2 = await fastify.inject({
|
||||
method: 'GET',
|
||||
url: '/ordinals/v1/inscriptions/42174ecc8a245841035793390bb53d63b3c2acb61366446f601b09e73b94b656i0',
|
||||
});
|
||||
expect(response2.statusCode).toBe(200);
|
||||
expect(response2.json().delegate).toBe(
|
||||
'38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dci0'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1666,8 +1684,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -1697,8 +1716,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -1808,8 +1828,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '9f4a9b73b0713c5da01c0a47f97c6c001af9028d6bdd9e264dfacbc4e6790201',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -1849,8 +1870,9 @@ describe('/inscriptions', () => {
|
||||
genesis_tx_id: '38c46a8bf7ec90bc7f6b797e7dc84baa97f4e5fd4286b92fe1b50176d03b18dc',
|
||||
curse_type: null,
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
|
||||
@@ -217,8 +217,9 @@ describe('/sats', () => {
|
||||
value: '10000',
|
||||
curse_type: 'p2wsh',
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
@@ -249,8 +250,9 @@ describe('/sats', () => {
|
||||
value: '10000',
|
||||
curse_type: 'p2wsh',
|
||||
recursive: false,
|
||||
recursion_refs: null,
|
||||
recursion_refs: [],
|
||||
parent: null,
|
||||
parent_refs: [],
|
||||
metadata: null,
|
||||
meta_protocol: null,
|
||||
delegate: null,
|
||||
|
||||
@@ -550,6 +550,15 @@ async fn update_tx_inscriptions_with_consensus_sequence_data(
|
||||
None => inscription.curse_type.take(),
|
||||
};
|
||||
|
||||
inscription.charms |= Sat(traversal.ordinal_number).charms();
|
||||
if is_cursed {
|
||||
if block_identifier.index >= get_jubilee_block_height(network) {
|
||||
Charm::Vindicated.set(&mut inscription.charms);
|
||||
} else {
|
||||
Charm::Cursed.set(&mut inscription.charms);
|
||||
}
|
||||
}
|
||||
|
||||
let (destination, satpoint_post_transfer, output_value) = compute_satpoint_post_transfer(
|
||||
&&*tx,
|
||||
input_index,
|
||||
@@ -588,14 +597,7 @@ async fn update_tx_inscriptions_with_consensus_sequence_data(
|
||||
}
|
||||
};
|
||||
|
||||
inscription.charms |= Sat(traversal.ordinal_number).charms();
|
||||
if is_cursed {
|
||||
if block_identifier.index >= get_jubilee_block_height(network) {
|
||||
Charm::Vindicated.set(&mut inscription.charms);
|
||||
} else {
|
||||
Charm::Cursed.set(&mut inscription.charms);
|
||||
}
|
||||
} else {
|
||||
if !is_cursed {
|
||||
// The reinscriptions_data needs to be augmented as we go, to handle transaction chaining.
|
||||
reinscriptions_data.insert(traversal.ordinal_number, traversal.get_inscription_id());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user