feat: add controller entity and handlers. (#99)
* feat: add controller entity and handlers. * chore: update the log messages to be more precise * fix: mistake in the log of roleRevoked events.
This commit is contained in:
parent
94e8ba3856
commit
7e46146a24
|
|
@ -131,13 +131,20 @@ type Transfer @entity(immutable: true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Token @entity {
|
type Token @entity {
|
||||||
id: Bytes! #transaction hash
|
id: Bytes! # Token ID
|
||||||
|
mint_transaction_hash: Bytes!
|
||||||
tokenId: BigInt! # uint256
|
tokenId: BigInt! # uint256
|
||||||
owner: Holder!
|
owner: Holder!
|
||||||
minted_by: Bytes!
|
minted_by: Bytes!
|
||||||
|
controllers: [Controller!]
|
||||||
}
|
}
|
||||||
|
|
||||||
type Holder @entity {
|
type Holder @entity {
|
||||||
id: Bytes! #address
|
id: Bytes! #address
|
||||||
tokens: [Token!] @derivedFrom(field: "owner")
|
tokens: [Token!] @derivedFrom(field: "owner")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Controller @entity {
|
||||||
|
id: Bytes! #address
|
||||||
|
tokens: [Token!] @derivedFrom(field: "controllers")
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Address, log } from '@graphprotocol/graph-ts';
|
import { Address, Bytes, log } from '@graphprotocol/graph-ts';
|
||||||
import {
|
import {
|
||||||
Approval as ApprovalEvent,
|
Approval as ApprovalEvent,
|
||||||
ApprovalForAll as ApprovalForAllEvent,
|
ApprovalForAll as ApprovalForAllEvent,
|
||||||
|
|
@ -20,12 +20,15 @@ import {
|
||||||
ApprovalForAll,
|
ApprovalForAll,
|
||||||
CollectionRoleGranted,
|
CollectionRoleGranted,
|
||||||
CollectionRoleRevoked,
|
CollectionRoleRevoked,
|
||||||
|
Controller,
|
||||||
|
Holder,
|
||||||
NewBuild,
|
NewBuild,
|
||||||
NewTokenDescription,
|
NewTokenDescription,
|
||||||
NewTokenENS,
|
NewTokenENS,
|
||||||
NewTokenExternalURL,
|
NewTokenExternalURL,
|
||||||
NewTokenImage,
|
NewTokenImage,
|
||||||
NewTokenName,
|
NewTokenName,
|
||||||
|
Token,
|
||||||
TokenRoleGranted,
|
TokenRoleGranted,
|
||||||
TokenRoleRevoked,
|
TokenRoleRevoked,
|
||||||
Transfer,
|
Transfer,
|
||||||
|
|
@ -203,6 +206,41 @@ export function handleTokenRoleGranted(event: TokenRoleGrantedEvent): void {
|
||||||
entity.transactionHash = event.transaction.hash;
|
entity.transactionHash = event.transaction.hash;
|
||||||
|
|
||||||
entity.save();
|
entity.save();
|
||||||
|
|
||||||
|
if (event.params.role === 1) {
|
||||||
|
// This is a new controller being added to a token.
|
||||||
|
// First we add the controller to the token's list of controllers.
|
||||||
|
// Then we create a new controller entity.
|
||||||
|
|
||||||
|
let token = Token.load(
|
||||||
|
Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId))
|
||||||
|
);
|
||||||
|
let controller = Controller.load(event.params.toAddress);
|
||||||
|
|
||||||
|
if (!controller) {
|
||||||
|
// Create a new controller entity
|
||||||
|
log.debug('CONTROLLER IS GOING TO BE CREATED HERE.', []);
|
||||||
|
controller = new Controller(event.params.toAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token !== null) {
|
||||||
|
let token_controllers = token.controllers;
|
||||||
|
if (!token_controllers) {
|
||||||
|
token_controllers = [];
|
||||||
|
}
|
||||||
|
token_controllers.push(event.params.toAddress);
|
||||||
|
token.controllers = token_controllers;
|
||||||
|
} else {
|
||||||
|
log.error(
|
||||||
|
'Handling controller access granted event for tokenId {}. THE TOKEN DOES NOT EXIST. FAILED TO UPDATE THE TOKEN ENTITY.',
|
||||||
|
[event.params.tokenId.toHexString()]
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.save();
|
||||||
|
token.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function handleTokenRoleRevoked(event: TokenRoleRevokedEvent): void {
|
export function handleTokenRoleRevoked(event: TokenRoleRevokedEvent): void {
|
||||||
|
|
@ -219,6 +257,43 @@ export function handleTokenRoleRevoked(event: TokenRoleRevokedEvent): void {
|
||||||
entity.transactionHash = event.transaction.hash;
|
entity.transactionHash = event.transaction.hash;
|
||||||
|
|
||||||
entity.save();
|
entity.save();
|
||||||
|
|
||||||
|
if (event.params.role === 1) {
|
||||||
|
// This is a controller being removed from a token.
|
||||||
|
|
||||||
|
// Load the token with the tokenId.
|
||||||
|
let token = Token.load(
|
||||||
|
Bytes.fromByteArray(Bytes.fromBigInt(event.params.tokenId))
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check if the token entity exists.
|
||||||
|
if (token !== null) {
|
||||||
|
// get the list of controllers.
|
||||||
|
let token_controllers = token.controllers;
|
||||||
|
if (!token_controllers) {
|
||||||
|
token_controllers = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove address from the controllers list
|
||||||
|
const index = token_controllers.indexOf(event.params.toAddress, 0);
|
||||||
|
if (index > -1) {
|
||||||
|
token_controllers.splice(index, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// assign the new controllers list
|
||||||
|
token.controllers = token_controllers;
|
||||||
|
} else {
|
||||||
|
// the token does not exist
|
||||||
|
log.error(
|
||||||
|
'Handling controller access revoked event for tokenId {}. THE TOKEN DOES NOT EXIST. FAILED TO UPDATE THE TOKEN ENTITY.',
|
||||||
|
[event.params.tokenId.toHexString()]
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// save the token data
|
||||||
|
token.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function handleTransfer(event: TransferEvent): void {
|
export function handleTransfer(event: TransferEvent): void {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ dataSources:
|
||||||
- TokenRoleGranted
|
- TokenRoleGranted
|
||||||
- TokenRoleRevoked
|
- TokenRoleRevoked
|
||||||
- Transfer
|
- Transfer
|
||||||
|
- Token
|
||||||
|
- Holder
|
||||||
|
- Controller
|
||||||
abis:
|
abis:
|
||||||
- name: FleekNFA
|
- name: FleekNFA
|
||||||
file: ./abis/FleekNFA.json
|
file: ./abis/FleekNFA.json
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue