From f37fcbc315abdab29c0dcf0479b12a3f3a87b015 Mon Sep 17 00:00:00 2001 From: Shredder <110225819+EmperorOrokuSaki@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:16:26 +0330 Subject: [PATCH] feat: replace the Holder entity with the Owner and handle transfer and mint cases. (#100) --- subgraph/schema.graphql | 4 +-- subgraph/src/fleek-nfa.ts | 53 +++++++++++++++++++++++++++++---------- subgraph/subgraph.yaml | 2 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 70d9bc0..6b11281 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -134,12 +134,12 @@ type Token @entity { id: Bytes! # Token ID mint_transaction_hash: Bytes! tokenId: BigInt! # uint256 - owner: Holder! + owner: Owner! minted_by: Bytes! controllers: [Controller!] } -type Holder @entity { +type Owner @entity { id: Bytes! #address tokens: [Token!] @derivedFrom(field: "owner") } diff --git a/subgraph/src/fleek-nfa.ts b/subgraph/src/fleek-nfa.ts index 2c31f96..296256d 100644 --- a/subgraph/src/fleek-nfa.ts +++ b/subgraph/src/fleek-nfa.ts @@ -28,6 +28,7 @@ import { NewTokenExternalURL, NewTokenImage, NewTokenName, + Owner, Token, TokenRoleGranted, TokenRoleRevoked, @@ -310,25 +311,51 @@ export function handleTransfer(event: TransferEvent): void { entity.save(); + let token: Token | null; + + let owner_address = event.params.to; + let owner = Owner.load(owner_address); + + if (!owner) { + // Create a new owner entity + owner = new Owner(owner_address); + } + if (parseInt(event.params.from.toHexString()) === 0) { - // This is a new mint + // MINT - let id = event.transaction.hash; - let token = new Token(id); - let owner = event.params.to; + // Create a new Token entity + token = new Token( + Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId)) + ); - let holder = Holder.load(owner); - - if (!holder) { - // Create a new holder entity - holder = new Holder(owner); - } - - token.owner = owner; + // Populate Token with data from the event + token.owner = owner_address; + token.mint_transaction_hash = event.transaction.hash; token.minted_by = event.transaction.from; token.tokenId = event.params.tokenId; - holder.save(); + // Save both entities + owner.save(); token.save(); + } else { + // Transfer + + // Load the Token by using its TokenId + token = Token.load( + Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId)) + ); + + if (token) { + // Entity exists + token.owner = owner_address; + + // Save both entities + owner.save(); + token.save(); + } else { + // Entity does not exist + log.error('Unknown token was transferred.', []); + } } } diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index 5bbec51..149d5fd 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -28,7 +28,7 @@ dataSources: - TokenRoleRevoked - Transfer - Token - - Holder + - Owner - Controller abis: - name: FleekNFA