Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions config/matic.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
"fakeCardStartBlock": 34520146,
"fakeGotchisAddress": "0xA4E3513c98b30d4D7cc578d2C328Bd550725D1D0",
"fakeGotchisStartBlock": 34520176,
"wearableAddress": "0x58de9AaBCaeEC0f69883C94318810ad79Cc6a44f",
"wearableStartBlock": 35999793,
"network": "matic"
}
7 changes: 7 additions & 0 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ type ItemType @entity {
kinshipBonus: Int
experienceBonus: BigInt
consumed: BigInt!
owners: [ItemTypeOwnership!]! @derivedFrom(field: "itemType") # Add this line
}

type WearableSet @entity {
Expand Down Expand Up @@ -643,3 +644,9 @@ type TokenCommitment @entity {
usedBalance: BigInt!
roleAssignments: [RoleAssignment!] @derivedFrom(field: "tokenCommitment")
}

type ItemTypeOwnership @entity {
id: ID! # Format: itemTypeId-ownerAddress
itemType: ItemType!
owner: Bytes!
}
33 changes: 33 additions & 0 deletions src/mappings/diamond.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ import {
ERC1155BuyOrderAdd,
ERC1155BuyOrderExecute,
ERC1155BuyOrderCancel,
TransferSingle,
TransferBatch,
} from "../../generated/AavegotchiDiamond/AavegotchiDiamond";
import {
getOrCreateUser,
Expand Down Expand Up @@ -129,6 +131,7 @@ import {
RealmDiamond,
ResyncParcel,
} from "../../generated/AavegotchiDiamond/RealmDiamond";
import { updateOwnership } from "./helpers";

export function handleBuyPortals(event: BuyPortals): void {
let contract = AavegotchiDiamond.bind(event.address);
Expand Down Expand Up @@ -1986,3 +1989,33 @@ export function handleERC1155BuyOrderCancel(
entity.canceled = true;
entity.save();
}

export function handleTransferSingle(event: TransferSingle): void {
const to = event.params._to;
const id = event.params._id.toString();

// if (from.notEqual(Address.zero())) {
// updateOwnership(id, from, amount.neg(), timestamp);
// }

if (to.notEqual(Address.zero())) {
updateOwnership(id, to);
}
}

export function handleTransferBatch(event: TransferBatch): void {
const to = event.params._to;
const ids = event.params._ids;

for (let i = 0; i < ids.length; i++) {
const id = ids[i].toString();

// if (from.notEqual(Address.zero())) {
// updateOwnership(id, from, amount.neg(), timestamp);
// }

if (to.notEqual(Address.zero())) {
updateOwnership(id, to);
}
}
}
24 changes: 24 additions & 0 deletions src/mappings/helpers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { BigInt, Address, ethereum, store } from "@graphprotocol/graph-ts";
import { ItemTypeOwnership } from "../../generated/schema";

// Address of the actual wearable token contract
export const WEARABLE_TOKEN_ADDRESS = Address.fromString(
"0x58de9AaBCaeEC0f69883C94318810ad79Cc6a44f"
);

export function updateOwnership(itemTypeId: string, owner: Address): void {
const ownershipId = `${itemTypeId}-${owner.toHexString()}`;
let ownership = ItemTypeOwnership.load(ownershipId);

if (!ownership) {
ownership = new ItemTypeOwnership(ownershipId);
ownership.itemType = itemTypeId;
ownership.owner = owner;
}

// if (ownership.balance.equals(BigInt.fromI32(0))) {
// store.remove("ItemTypeOwnership", ownershipId);
// } else {
ownership.save();
// }
}
39 changes: 39 additions & 0 deletions src/mappings/itemTransfers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { Address } from "@graphprotocol/graph-ts";

import { updateOwnership } from "./helpers";
import {
TransferBatch,
TransferSingle,
} from "../../generated/AavegotchiDiamond/AavegotchiDiamond";

export function handleTransferSingle(event: TransferSingle): void {
const from = event.params._from;
const to = event.params._to;
const id = event.params._id.toString();

// if (from.notEqual(Address.zero())) {
// updateOwnership(id, from, amount.neg(), timestamp);
// }

if (to.notEqual(Address.zero())) {
updateOwnership(id, to);
}
}

export function handleTransferBatch(event: TransferBatch): void {
const from = event.params._from;
const to = event.params._to;
const ids = event.params._ids;

for (let i = 0; i < ids.length; i++) {
const id = ids[i].toString();

// if (from.notEqual(Address.zero())) {
// updateOwnership(id, from, amount.neg(), timestamp);
// }

if (to.notEqual(Address.zero())) {
updateOwnership(id, to);
}
}
}
26 changes: 26 additions & 0 deletions subgraph.template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,10 @@ dataSources:
handler: handleERC1155BuyOrderExecute
- event: ERC1155BuyOrderCancel(indexed uint256,uint256)
handler: handleERC1155BuyOrderCancel
- event: TransferSingle(indexed address,indexed address,indexed address,uint256,uint256)
handler: handleTransferSingle
- event: TransferBatch(indexed address,indexed address,indexed address,uint256[],uint256[])
handler: handleTransferBatch
- event: WearablesConfigCreated(indexed address,indexed uint256,indexed uint16,uint16[16],uint256)
handler: handleWearablesConfigCreated
- event: WearablesConfigUpdated(indexed address,indexed uint256,indexed uint16,uint16[16])
Expand Down Expand Up @@ -255,3 +259,25 @@ dataSources:
- event: MetadataLike(indexed uint256,address)
handler: handleMetadataLike
file: ./src/mappings/fakeGotchisNFT.ts
- kind: ethereum/contract
name: WearableDiamond
network: "{{network}}"
source:
address: "{{wearableAddress}}"
abi: AavegotchiDiamond
startBlock: {{wearableStartBlock}}
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/itemTransfers.ts
entities:
- ItemTypeOwnership
abis:
- name: AavegotchiDiamond
file: ./abis/AavegotchiDiamond.json
eventHandlers:
- event: TransferSingle(indexed address,indexed address,indexed address,uint256,uint256)
handler: handleTransferSingle
- event: TransferBatch(indexed address,indexed address,indexed address,uint256[],uint256[])
handler: handleTransferBatch
26 changes: 26 additions & 0 deletions subgraph.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,10 @@ dataSources:
handler: handleERC1155BuyOrderExecute
- event: ERC1155BuyOrderCancel(indexed uint256,uint256)
handler: handleERC1155BuyOrderCancel
- event: TransferSingle(indexed address,indexed address,indexed address,uint256,uint256)
handler: handleTransferSingle
- event: TransferBatch(indexed address,indexed address,indexed address,uint256[],uint256[])
handler: handleTransferBatch
- event: WearablesConfigCreated(indexed address,indexed uint256,indexed uint16,uint16[16],uint256)
handler: handleWearablesConfigCreated
- event: WearablesConfigUpdated(indexed address,indexed uint256,indexed uint16,uint16[16])
Expand Down Expand Up @@ -255,3 +259,25 @@ dataSources:
- event: MetadataLike(indexed uint256,address)
handler: handleMetadataLike
file: ./src/mappings/fakeGotchisNFT.ts
- kind: ethereum/contract
name: WearableDiamond
network: "matic"
source:
address: "0x58de9AaBCaeEC0f69883C94318810ad79Cc6a44f"
abi: AavegotchiDiamond
startBlock: 35999793
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/itemTransfers.ts
entities:
- ItemTypeOwnership
abis:
- name: AavegotchiDiamond
file: ./abis/AavegotchiDiamond.json
eventHandlers:
- event: TransferSingle(indexed address,indexed address,indexed address,uint256,uint256)
handler: handleTransferSingle
- event: TransferBatch(indexed address,indexed address,indexed address,uint256[],uint256[])
handler: handleTransferBatch