feat: replace the Holder entity with the Owner and handle transfer and mint cases. (#100)

This commit is contained in:
Shredder 2023-02-03 18:16:26 +03:30 committed by GitHub
parent 7e46146a24
commit f37fcbc315
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 16 deletions

View File

@ -134,12 +134,12 @@ type Token @entity {
id: Bytes! # Token ID id: Bytes! # Token ID
mint_transaction_hash: Bytes! mint_transaction_hash: Bytes!
tokenId: BigInt! # uint256 tokenId: BigInt! # uint256
owner: Holder! owner: Owner!
minted_by: Bytes! minted_by: Bytes!
controllers: [Controller!] controllers: [Controller!]
} }
type Holder @entity { type Owner @entity {
id: Bytes! #address id: Bytes! #address
tokens: [Token!] @derivedFrom(field: "owner") tokens: [Token!] @derivedFrom(field: "owner")
} }

View File

@ -28,6 +28,7 @@ import {
NewTokenExternalURL, NewTokenExternalURL,
NewTokenImage, NewTokenImage,
NewTokenName, NewTokenName,
Owner,
Token, Token,
TokenRoleGranted, TokenRoleGranted,
TokenRoleRevoked, TokenRoleRevoked,
@ -310,25 +311,51 @@ export function handleTransfer(event: TransferEvent): void {
entity.save(); 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) { if (parseInt(event.params.from.toHexString()) === 0) {
// This is a new mint // MINT
let id = event.transaction.hash; // Create a new Token entity
let token = new Token(id); token = new Token(
let owner = event.params.to; Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId))
);
let holder = Holder.load(owner); // Populate Token with data from the event
token.owner = owner_address;
if (!holder) { token.mint_transaction_hash = event.transaction.hash;
// Create a new holder entity
holder = new Holder(owner);
}
token.owner = owner;
token.minted_by = event.transaction.from; token.minted_by = event.transaction.from;
token.tokenId = event.params.tokenId; token.tokenId = event.params.tokenId;
holder.save(); // Save both entities
owner.save();
token.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.', []);
}
} }
} }

View File

@ -28,7 +28,7 @@ dataSources:
- TokenRoleRevoked - TokenRoleRevoked
- Transfer - Transfer
- Token - Token
- Holder - Owner
- Controller - Controller
abis: abis:
- name: FleekNFA - name: FleekNFA