From 5c43ebe0d056019e7739563b0b0e432c69e39ab9 Mon Sep 17 00:00:00 2001 From: Shredder <110225819+EmperorOrokuSaki@users.noreply.github.com> Date: Tue, 14 Mar 2023 00:22:37 +0330 Subject: [PATCH] feat: add handler for burns to the transfer handler [subgraph] (#162) * feat: add handler for burns to the transfer handler * fix: update transfer.ts to include the changes. --- subgraph/src/fleek-nfa.ts | 2 +- subgraph/src/transfer.ts | 68 ++++++++++++++++++++++----------------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/subgraph/src/fleek-nfa.ts b/subgraph/src/fleek-nfa.ts index 75ae7ae..27863d5 100644 --- a/subgraph/src/fleek-nfa.ts +++ b/subgraph/src/fleek-nfa.ts @@ -4,4 +4,4 @@ export * from './approval'; export * from './contract'; export * from './metadata-update'; export * from './mint'; -export * from './transfer'; \ No newline at end of file +export * from './transfer'; diff --git a/subgraph/src/transfer.ts b/subgraph/src/transfer.ts index 08db5e1..6dea3d2 100644 --- a/subgraph/src/transfer.ts +++ b/subgraph/src/transfer.ts @@ -16,47 +16,57 @@ import { } from '../generated/schema'; export function handleTransfer(event: TransferEvent): void { - let entity = new Transfer( - event.transaction.hash.concatI32(event.logIndex.toI32()) + let transfer = new Transfer( + event.transaction.hash.concatI32(event.logIndex.toI32()) ); - entity.from = event.params.from; - entity.to = event.params.to; - entity.tokenId = event.params.tokenId; - - entity.blockNumber = event.block.number; - entity.blockTimestamp = event.block.timestamp; - entity.transactionHash = event.transaction.hash; - - entity.save(); - + + const TokenId = event.params.tokenId; + + transfer.from = event.params.from; + transfer.to = event.params.to; + transfer.tokenId = TokenId; + + transfer.blockNumber = event.block.number; + transfer.blockTimestamp = event.block.timestamp; + transfer.transactionHash = event.transaction.hash; + + transfer.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); + // Create a new owner entity + owner = new Owner(owner_address); } - + if (parseInt(event.params.from.toHexString()) !== 0) { + if (parseInt(event.params.to.toHexString()) === 0) { + // Burn + // Remove the entity from storage + // Its controllers and owner will be affected. + store.remove('Token', TokenId.toString()); + } else { // Transfer - // Load the Token by using its TokenId token = Token.load( - Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId)) + Bytes.fromByteArray(Bytes.fromBigInt(TokenId)) ); - + if (token) { - // Entity exists - token.owner = owner_address; - - // Save both entities - owner.save(); - token.save(); + // Entity exists + token.owner = owner_address; + + // Save both entities + owner.save(); + token.save(); } else { - // Entity does not exist - log.error('Unknown token was transferred.', []); + // Entity does not exist + log.error('Unknown token was transferred.', []); } + } } -} \ No newline at end of file + } +