335 lines
9.6 KiB
TypeScript
335 lines
9.6 KiB
TypeScript
import { Address, Bytes, log } from '@graphprotocol/graph-ts';
|
|
import {
|
|
Approval as ApprovalEvent,
|
|
ApprovalForAll as ApprovalForAllEvent,
|
|
CollectionRoleGranted as CollectionRoleGrantedEvent,
|
|
CollectionRoleRevoked as CollectionRoleRevokedEvent,
|
|
FleekNFA,
|
|
NewBuild as NewBuildEvent,
|
|
NewTokenDescription as NewTokenDescriptionEvent,
|
|
NewTokenENS as NewTokenENSEvent,
|
|
NewTokenExternalURL as NewTokenExternalURLEvent,
|
|
NewTokenImage as NewTokenImageEvent,
|
|
NewTokenName as NewTokenNameEvent,
|
|
TokenRoleGranted as TokenRoleGrantedEvent,
|
|
TokenRoleRevoked as TokenRoleRevokedEvent,
|
|
Transfer as TransferEvent,
|
|
} from '../generated/FleekNFA/FleekNFA';
|
|
import {
|
|
Approval,
|
|
ApprovalForAll,
|
|
CollectionRoleGranted,
|
|
CollectionRoleRevoked,
|
|
Controller,
|
|
Holder,
|
|
NewBuild,
|
|
NewTokenDescription,
|
|
NewTokenENS,
|
|
NewTokenExternalURL,
|
|
NewTokenImage,
|
|
NewTokenName,
|
|
Token,
|
|
TokenRoleGranted,
|
|
TokenRoleRevoked,
|
|
Transfer,
|
|
} from '../generated/schema';
|
|
|
|
export function handleApproval(event: ApprovalEvent): void {
|
|
let entity = new Approval(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.owner = event.params.owner;
|
|
entity.approved = event.params.approved;
|
|
entity.tokenId = event.params.tokenId;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleApprovalForAll(event: ApprovalForAllEvent): void {
|
|
let entity = new ApprovalForAll(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.owner = event.params.owner;
|
|
entity.operator = event.params.operator;
|
|
entity.approved = event.params.approved;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleCollectionRoleGranted(
|
|
event: CollectionRoleGrantedEvent
|
|
): void {
|
|
let entity = new CollectionRoleGranted(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.role = event.params.role;
|
|
entity.toAddress = event.params.toAddress;
|
|
entity.byAddress = event.params.byAddress;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleCollectionRoleRevoked(
|
|
event: CollectionRoleRevokedEvent
|
|
): void {
|
|
let entity = new CollectionRoleRevoked(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.role = event.params.role;
|
|
entity.toAddress = event.params.toAddress;
|
|
entity.byAddress = event.params.byAddress;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewBuild(event: NewBuildEvent): void {
|
|
let entity = new NewBuild(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.commitHash = event.params.commitHash.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewTokenDescription(
|
|
event: NewTokenDescriptionEvent
|
|
): void {
|
|
let entity = new NewTokenDescription(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.description = event.params.description.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewTokenENS(event: NewTokenENSEvent): void {
|
|
let entity = new NewTokenENS(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.ENS = event.params.ENS.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewTokenExternalURL(
|
|
event: NewTokenExternalURLEvent
|
|
): void {
|
|
let entity = new NewTokenExternalURL(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.externalURL = event.params.externalURL.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewTokenImage(event: NewTokenImageEvent): void {
|
|
let entity = new NewTokenImage(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.image = event.params.image.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleNewTokenName(event: NewTokenNameEvent): void {
|
|
let entity = new NewTokenName(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.token = event.params.token;
|
|
entity.name = event.params.name.toString();
|
|
entity.triggeredBy = event.params.triggeredBy;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
entity.save();
|
|
}
|
|
|
|
export function handleTokenRoleGranted(event: TokenRoleGrantedEvent): void {
|
|
let entity = new TokenRoleGranted(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.tokenId = event.params.tokenId;
|
|
entity.role = event.params.role;
|
|
entity.toAddress = event.params.toAddress;
|
|
entity.byAddress = event.params.byAddress;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
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 {
|
|
let entity = new TokenRoleRevoked(
|
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
|
);
|
|
entity.tokenId = event.params.tokenId;
|
|
entity.role = event.params.role;
|
|
entity.toAddress = event.params.toAddress;
|
|
entity.byAddress = event.params.byAddress;
|
|
|
|
entity.blockNumber = event.block.number;
|
|
entity.blockTimestamp = event.block.timestamp;
|
|
entity.transactionHash = event.transaction.hash;
|
|
|
|
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 {
|
|
let entity = 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();
|
|
|
|
if (parseInt(event.params.from.toHexString()) === 0) {
|
|
// This is a new mint
|
|
|
|
let id = event.transaction.hash;
|
|
let token = new Token(id);
|
|
let owner = event.params.to;
|
|
|
|
let holder = Holder.load(owner);
|
|
|
|
if (!holder) {
|
|
// Create a new holder entity
|
|
holder = new Holder(owner);
|
|
}
|
|
|
|
token.owner = owner;
|
|
token.minted_by = event.transaction.from;
|
|
token.tokenId = event.params.tokenId;
|
|
|
|
holder.save();
|
|
token.save();
|
|
}
|
|
}
|