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.
This commit is contained in:
Shredder 2023-03-14 00:22:37 +03:30 committed by GitHub
parent 3414a96c65
commit 5c43ebe0d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 30 deletions

View File

@ -4,4 +4,4 @@ export * from './approval';
export * from './contract'; export * from './contract';
export * from './metadata-update'; export * from './metadata-update';
export * from './mint'; export * from './mint';
export * from './transfer'; export * from './transfer';

View File

@ -16,47 +16,57 @@ import {
} from '../generated/schema'; } from '../generated/schema';
export function handleTransfer(event: TransferEvent): void { export function handleTransfer(event: TransferEvent): void {
let entity = new Transfer( let transfer = new Transfer(
event.transaction.hash.concatI32(event.logIndex.toI32()) event.transaction.hash.concatI32(event.logIndex.toI32())
); );
entity.from = event.params.from;
entity.to = event.params.to; const TokenId = event.params.tokenId;
entity.tokenId = event.params.tokenId;
transfer.from = event.params.from;
entity.blockNumber = event.block.number; transfer.to = event.params.to;
entity.blockTimestamp = event.block.timestamp; transfer.tokenId = TokenId;
entity.transactionHash = event.transaction.hash;
transfer.blockNumber = event.block.number;
entity.save(); transfer.blockTimestamp = event.block.timestamp;
transfer.transactionHash = event.transaction.hash;
transfer.save();
let token: Token | null; let token: Token | null;
let owner_address = event.params.to; let owner_address = event.params.to;
let owner = Owner.load(owner_address); let owner = Owner.load(owner_address);
if (!owner) { if (!owner) {
// Create a new owner entity // Create a new owner entity
owner = new Owner(owner_address); owner = new Owner(owner_address);
} }
if (parseInt(event.params.from.toHexString()) !== 0) { 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 // Transfer
// Load the Token by using its TokenId // Load the Token by using its TokenId
token = Token.load( token = Token.load(
Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId)) Bytes.fromByteArray(Bytes.fromBigInt(TokenId))
); );
if (token) { if (token) {
// Entity exists // Entity exists
token.owner = owner_address; token.owner = owner_address;
// Save both entities // Save both entities
owner.save(); owner.save();
token.save(); token.save();
} else { } else {
// Entity does not exist // Entity does not exist
log.error('Unknown token was transferred.', []); log.error('Unknown token was transferred.', []);
} }
}
} }
} }