Skip to content

Commit

Permalink
feat: update subgraph to match the new build and mint interfaces + ca…
Browse files Browse the repository at this point in the history
…tegories.
  • Loading branch information
EmperorOrokuSaki committed Jul 12, 2023
1 parent a6f730c commit 3aae1da
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 6 deletions.
3 changes: 3 additions & 0 deletions subgraph/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type NewMint @entity(immutable: true) {
ipfsHash: String!
logo: String!
color: Int!
category: String!
accessPointAutoApproval: Boolean!
triggeredBy: Bytes! # address
owner: Owner! # address
Expand All @@ -47,6 +48,7 @@ type MetadataUpdate @entity(immutable: true) {
uint24Value: Int
multipleStringValue: [String!]!
booleanValue: Boolean
enumValue: Int
byAddress: Bytes!
blockNumber: BigInt!
blockTimestamp: BigInt!
Expand All @@ -73,6 +75,7 @@ type Token @entity {
ENS: String!
logo: String!
color: Int!
category: String!
accessPointAutoApproval: Boolean!
owner: Owner!
mintedBy: Bytes!
Expand Down
8 changes: 8 additions & 0 deletions subgraph/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,11 @@ export enum CollectionRoles {
export enum TokenRoles {
Controller,
}

export enum Categories {
DeFi,
NFT,
Analytics,
Infrastructure,
Gaming,
}
69 changes: 67 additions & 2 deletions subgraph/src/metadata-update.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { Bytes } from '@graphprotocol/graph-ts';
import { Bytes, log } from '@graphprotocol/graph-ts';

// Event Imports [based on the yaml config]
import {
MetadataUpdate1 as MetadataUpdateEvent1,
MetadataUpdate2 as MetadataUpdateEvent2,
MetadataUpdate3 as MetadataUpdateEvent3,
MetadataUpdate4 as MetadataUpdateEvent4,
MetadataUpdate5 as MetadataUpdateEvent5,
} from '../generated/FleekNFA/FleekNFA';

// Entity Imports [based on the schema]
Expand All @@ -15,6 +16,7 @@ import {
Token,
Build,
} from '../generated/schema';
import { Categories } from './constants';

export function handleMetadataUpdateWithStringValue(
event: MetadataUpdateEvent1
Expand Down Expand Up @@ -62,6 +64,59 @@ export function handleMetadataUpdateWithStringValue(
}
}

export function handleMetadataUpdateWithEnumValue(
event: MetadataUpdateEvent5
): void {
/**
* Metadata handled here:
* Category
* */
const entity = new MetadataUpdate(
event.transaction.hash.concatI32(event.logIndex.toI32())
);

entity.tokenId = event.params._tokenId;
entity.key = event.params.key;
entity.enumValue = event.params.value;
entity.blockNumber = event.block.number;
entity.blockTimestamp = event.block.timestamp;
entity.transactionHash = event.transaction.hash;

entity.save();

// UPDATE TOKEN
const token = Token.load(
Bytes.fromByteArray(Bytes.fromBigInt(event.params._tokenId))
);

if (token) {
if (event.params.key == 'category') {
switch (event.params.value) {
case Categories.DeFi:
token.category = 'DeFi';
break;

case Categories.Gaming:
token.category = 'Gaming';
break;

case Categories.Analytics:
token.category = 'Analytics';
break;

case Categories.NFT:
token.category = 'NFT';
break;

case Categories.Infrastructure:
token.category = 'Infrastructure';
break;
}
}
token.save();
}
}

export function handleMetadataUpdateWithMultipleStringValues(
event: MetadataUpdateEvent3
): void {
Expand All @@ -82,9 +137,19 @@ export function handleMetadataUpdateWithMultipleStringValues(
entity.save();

// CREATE BUILD
const build = new Build(
const token = Token.load(
Bytes.fromByteArray(Bytes.fromBigInt(event.params._tokenId))
);

if (token == null) {
log.error('Received new build for non-existent token id: {}', [
event.params._tokenId.toString(),
]);
return;
}

let buildId = token.builds.length;
const build = new Build(Bytes.fromByteArray(Bytes.fromI32(buildId)));
if (event.params.key == 'build') {
let gitRepositoryEntity = GitRepositoryEntity.load(event.params.value[1]);
if (!gitRepositoryEntity) {
Expand Down
39 changes: 36 additions & 3 deletions subgraph/src/mint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import {
GitRepository,
Collection,
Verifier,
Build,
} from '../generated/schema';
import { Categories } from './constants';

export function handleNewMint(event: NewMintEvent): void {
const newMintEntity = new NewMint(
Expand All @@ -27,11 +29,36 @@ export function handleNewMint(event: NewMintEvent): void {
const commitHash = event.params.commitHash;
const logo = event.params.logo;
const color = event.params.color;
const accessPointAutoApproval = event.params.accessPointAutoApproval;
const tokenId = event.params.tokenId;
const categoryParam = event.params.category;
const ownerAddress = event.params.owner;
const verifierAddress = event.params.verifier;

let category = '';

switch (categoryParam) {
case Categories.DeFi:
category = 'DeFi';
break;

case Categories.Gaming:
category = 'Gaming';
break;

case Categories.Analytics:
category = 'Analytics';
break;

case Categories.NFT:
category = 'NFT';
break;

case Categories.Infrastructure:
category = 'Infrastructure';
break;
}

newMintEntity.category = category;
newMintEntity.tokenId = tokenId;
newMintEntity.name = name;
newMintEntity.description = description;
Expand All @@ -42,7 +69,6 @@ export function handleNewMint(event: NewMintEvent): void {
newMintEntity.ipfsHash = ipfsHash;
newMintEntity.logo = logo;
newMintEntity.color = color;
newMintEntity.accessPointAutoApproval = accessPointAutoApproval;
newMintEntity.triggeredBy = event.params.minter;
newMintEntity.owner = ownerAddress;
newMintEntity.verifier = verifierAddress;
Expand Down Expand Up @@ -72,7 +98,7 @@ export function handleNewMint(event: NewMintEvent): void {
token.ENS = ENS;
token.logo = logo;
token.color = color;
token.accessPointAutoApproval = accessPointAutoApproval;
token.category = category;
token.owner = ownerAddress;
token.verified = false;
token.mintTransaction = event.transaction.hash.concatI32(
Expand All @@ -99,6 +125,13 @@ export function handleNewMint(event: NewMintEvent): void {
collection.save();
}

const build = new Build(Bytes.fromByteArray(Bytes.fromI32(0)));
build.commitHash = commitHash;
build.gitRepository = gitRepository;
build.ipfsHash = ipfsHash;
build.domain = externalURL;
build.save();

// Save entities
owner.save();
token.save();
Expand Down
5 changes: 4 additions & 1 deletion subgraph/subgraph.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ dataSources:
- ChangeAccessPointAutoApproval
abis:
- name: FleekNFA
file: ../contracts/deployments/qanet/FleekERC721.json
# file: ../contracts/artifacts/contracts/FleekERC721.sol/FleekERC721.json # For local builds
file: ../contracts/deployments/qanet/FleekERC721.json # For QA Network Builds
eventHandlers:
- event: Approval(indexed address,indexed address,indexed uint256)
handler: handleApproval
Expand All @@ -47,6 +48,8 @@ dataSources:
handler: handleMetadataUpdateWithIntValue
- event: MetadataUpdate(indexed uint256,string,bool,indexed address)
handler: handleMetadataUpdateWithBooleanValue
- event: MetadataUpdate(indexed uint256,string,uint24,indexed address)
handler: handleMetadataUpdateWithEnumValue
- event: NewMint(indexed uint256,string,string,string,string,string,string,string,string,uint24,bool,indexed address,indexed address,address)
handler: handleNewMint
- event: Transfer(indexed address,indexed address,indexed uint256)
Expand Down

0 comments on commit 3aae1da

Please sign in to comment.