feat: replace the Holder entity with the Owner and handle transfer and mint cases. (#100)
This commit is contained in:
parent
7e46146a24
commit
f37fcbc315
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.', []);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ dataSources:
|
||||||
- TokenRoleRevoked
|
- TokenRoleRevoked
|
||||||
- Transfer
|
- Transfer
|
||||||
- Token
|
- Token
|
||||||
- Holder
|
- Owner
|
||||||
- Controller
|
- Controller
|
||||||
abis:
|
abis:
|
||||||
- name: FleekNFA
|
- name: FleekNFA
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue