From 732e0692bed2697e4866eec21f183db8eade707e Mon Sep 17 00:00:00 2001 From: jipstavenuiter Date: Sat, 7 Jun 2025 14:53:19 -0400 Subject: [PATCH 1/3] feat(migrations): add burn support to fractions and claims views - Introduced a new column "burned" to the "fractions" table with a default value of false. - Updated the "fractions_view" to include the "burned" column. - Modified the "claims_view" to aggregate the "burned" status from related fractions. --- .../20250607165242_add_burn_support.sql | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 supabase/migrations/20250607165242_add_burn_support.sql diff --git a/supabase/migrations/20250607165242_add_burn_support.sql b/supabase/migrations/20250607165242_add_burn_support.sql new file mode 100644 index 0000000..a2c0bd5 --- /dev/null +++ b/supabase/migrations/20250607165242_add_burn_support.sql @@ -0,0 +1,49 @@ +alter table "public"."fractions" add column "burned" boolean not null default false; + +create or replace view fractions_view as +select f.id, + f.claims_id, + f.token_id, + f.fraction_id, + c.hypercert_id, + f.creation_block_timestamp, + f.creation_block_number, + f.last_update_block_timestamp, + f.last_update_block_number, + f.owner_address, + f.value, + f.units, + f.burned +from fractions f + join public.claims c on f.claims_id = c.id; + +create or replace view claims_view as +select + c.id as id, + c.contracts_id as contracts_id, + c.token_id as token_id, + c.hypercert_id as hypercert_id, + c.owner_address as owner_address, + c.creator_address as creator_address, + c.value as value, + c.units as units, + c.uri as uri, + c.creation_block_number as creation_block_number, + c.creation_block_timestamp as creation_block_timestamp, + c.last_update_block_number as last_update_block_number, + c.last_update_block_timestamp as last_update_block_timestamp, + c.attestations_count as attestations_count, + c.sales_count as sales_count, + f.burned as burned +from + claims as c +join ( + select + f.claims_id, + bool_and(f.burned) as burned + from + fractions f + group by + f.claims_id +) f on + c.id = f.claims_id \ No newline at end of file From f54307ff06a4463cc72229d93937a0a8ace8e893 Mon Sep 17 00:00:00 2001 From: jipstavenuiter Date: Sat, 7 Jun 2025 14:55:43 -0400 Subject: [PATCH 2/3] feat(storage): enhance storeValueTransfer to include burned status - Added a new property "burned" to the fromToken object to indicate if the token has been burned. - Refactored the units retrieval logic to improve type handling and clarity. - Updated the database schema references to accommodate the new burned status. --- src/storage/storeValueTransfer.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/storage/storeValueTransfer.ts b/src/storage/storeValueTransfer.ts index 9a42b0d..ec1508b 100644 --- a/src/storage/storeValueTransfer.ts +++ b/src/storage/storeValueTransfer.ts @@ -81,20 +81,26 @@ export const storeValueTransfer: StorageMethod = async ({ if (!readContract) throw new Error("readContract is not defined"); if (from_token_id !== 0n) { + // @ts-expect-error incorrect typing of readContract + const current_units_for_from_token = (await readContract({ + address: contract_address, + contract: "HypercertMinter", + functionName: "unitsOf", + args: [from_token_id], + })) as unknown as bigint; + + const burned = current_units_for_from_token === 0n && to_token_id === 0n; + fromToken = { claims_id, token_id: from_token_id.toString(), fraction_id: `${chain_id}-${getAddress(contract_address)}-${from_token_id}`, - units: (await readContract({ - address: contract_address, - contract: "HypercertMinter", - functionName: "unitsOf", - args: [from_token_id], - })) as unknown as bigint, + units: current_units_for_from_token, last_update_block_timestamp: block.timestamp.toString(), last_update_block_number: block.blockNumber, creation_block_number: block.blockNumber, creation_block_timestamp: block.timestamp.toString(), + burned, }; } @@ -103,6 +109,7 @@ export const storeValueTransfer: StorageMethod = async ({ claims_id, token_id: to_token_id.toString(), fraction_id: `${chain_id}-${getAddress(contract_address)}-${to_token_id}`, + // @ts-expect-error incorrect typing of readContract units: (await readContract({ address: contract_address, contract: "HypercertMinter", @@ -146,6 +153,7 @@ export const storeValueTransfer: StorageMethod = async ({ last_update_block_timestamp: eb.ref( "excluded.last_update_block_timestamp", ), + burned: eb.ref("excluded.burned"), })), ) .compile(), From 074729c87f3a014f163bf4d9cfd477bf61acd376 Mon Sep 17 00:00:00 2001 From: jipstavenuiter Date: Sat, 7 Jun 2025 15:12:04 -0400 Subject: [PATCH 3/3] feat(types): update supabase types --- src/types/database-generated.types.ts | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/types/database-generated.types.ts b/src/types/database-generated.types.ts index f647505..5a92895 100644 --- a/src/types/database-generated.types.ts +++ b/src/types/database-generated.types.ts @@ -115,6 +115,13 @@ export type Database = { referencedRelation: "claims" referencedColumns: ["id"] }, + { + foreignKeyName: "attestations_claims_id_fkey" + columns: ["claims_id"] + isOneToOne: false + referencedRelation: "claims_view" + referencedColumns: ["id"] + }, { foreignKeyName: "attestations_claims_id_fkey" columns: ["claims_id"] @@ -274,6 +281,7 @@ export type Database = { } fractions: { Row: { + burned: boolean claims_id: string creation_block_number: number creation_block_timestamp: number @@ -287,6 +295,7 @@ export type Database = { value: number | null } Insert: { + burned?: boolean claims_id: string creation_block_number: number creation_block_timestamp: number @@ -300,6 +309,7 @@ export type Database = { value?: number | null } Update: { + burned?: boolean claims_id?: string creation_block_number?: number creation_block_timestamp?: number @@ -320,6 +330,13 @@ export type Database = { referencedRelation: "claims" referencedColumns: ["id"] }, + { + foreignKeyName: "fractions_claims_id_fkey" + columns: ["claims_id"] + isOneToOne: false + referencedRelation: "claims_view" + referencedColumns: ["id"] + }, { foreignKeyName: "fractions_claims_id_fkey" columns: ["claims_id"] @@ -389,6 +406,13 @@ export type Database = { referencedRelation: "claims" referencedColumns: ["id"] }, + { + foreignKeyName: "hypercert_allow_lists_claims_id_fkey" + columns: ["claims_id"] + isOneToOne: false + referencedRelation: "claims_view" + referencedColumns: ["id"] + }, { foreignKeyName: "hypercert_allow_lists_claims_id_fkey" columns: ["claims_id"] @@ -559,8 +583,38 @@ export type Database = { } Relationships: [] } + claims_view: { + Row: { + attestations_count: number | null + burned: boolean | null + contracts_id: string | null + creation_block_number: number | null + creation_block_timestamp: number | null + creator_address: string | null + hypercert_id: string | null + id: string | null + last_update_block_number: number | null + last_update_block_timestamp: number | null + owner_address: string | null + sales_count: number | null + token_id: number | null + units: number | null + uri: string | null + value: number | null + } + Relationships: [ + { + foreignKeyName: "claims_contracts_id_fkey" + columns: ["contracts_id"] + isOneToOne: false + referencedRelation: "contracts" + referencedColumns: ["id"] + }, + ] + } fractions_view: { Row: { + burned: boolean | null claims_id: string | null creation_block_number: number | null creation_block_timestamp: number | null @@ -582,6 +636,13 @@ export type Database = { referencedRelation: "claims" referencedColumns: ["id"] }, + { + foreignKeyName: "fractions_claims_id_fkey" + columns: ["claims_id"] + isOneToOne: false + referencedRelation: "claims_view" + referencedColumns: ["id"] + }, { foreignKeyName: "fractions_claims_id_fkey" columns: ["claims_id"]