Skip to content

Commit

Permalink
adding reputationToken to 1.5 subgraph
Browse files Browse the repository at this point in the history
  • Loading branch information
rulfo71 committed Feb 23, 2023
1 parent eb43f53 commit f11f09b
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 12 deletions.
11 changes: 9 additions & 2 deletions apps/dao-subgraph/src/mappings/DAOAvatar/mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { log } from '@graphprotocol/graph-ts';
import { OwnershipTransferred } from '../../types/DAOAvatar/DAOAvatar';
import { DAOController as DAOControllerContract } from '../../types/DAOController/DAOController';

import { DAO } from '../../types/schema';
import { DAO, ReputationToken } from '../../types/schema';

export function handleOwnershipTransferred(event: OwnershipTransferred): void {
const daoId = event.address;
Expand All @@ -15,7 +15,14 @@ export function handleOwnershipTransferred(event: OwnershipTransferred): void {
dao.controllerAddress = controllerAddress.toHexString();

if (repToken.reverted) return;
else dao.reputationToken = repToken.value.toHexString();
else {
dao.reputationToken = repToken.value.toHexString();
let reputationToken = ReputationToken.load(repToken.value.toHexString());
if (reputationToken) {
reputationToken.controllerAddress = controllerAddress.toHexString();
reputationToken.save();
}
}

dao.save();
}
Expand Down
2 changes: 1 addition & 1 deletion apps/dao-subgraph/src/mappings/DAOAvatar/schema.graphql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
type DAO @entity {
id: ID!
reputationToken: String!
reputationToken: ReputationToken!
controllerAddress: String!
schemes: [Scheme!] @derivedFrom(field: "avatar")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
entities:
- Member
- ReputationToken
eventHandlers:
- event: Mint(indexed address,uint256)
handler: handleMint
Expand Down
43 changes: 35 additions & 8 deletions apps/dao-subgraph/src/mappings/DAOReputation/mapping.ts
Original file line number Diff line number Diff line change
@@ -1,39 +1,66 @@
import { BigInt } from '@graphprotocol/graph-ts';
import {
Burn,
DAOReputation,
Mint,
} from '../../types/DAOReputation/DAOReputation';
import { Member } from '../../types/schema';
import { BigInt, store } from '@graphprotocol/graph-ts';
import { Member, ReputationToken } from '../../types/schema';

export function handleMint(event: Mint): void {
const tokenAddress = event.address;
const repContract = DAOReputation.bind(tokenAddress);
const repTokenId = tokenAddress.toHexString();

const memberId = `${tokenAddress.toHexString()}-${event.params.to.toHexString()}`;
let reputationToken = ReputationToken.load(repTokenId);
if (!reputationToken) {
reputationToken = new ReputationToken(repTokenId);
reputationToken.address = repTokenId;
reputationToken.name = repContract.name();
reputationToken.symbol = repContract.symbol();
reputationToken.amount = BigInt.fromString('0');
}
reputationToken.amount = reputationToken.amount.plus(event.params.amount);

reputationToken.controllerAddress = repContract.owner().toHexString();

const memberId = `${event.params.to.toHexString()}-${tokenAddress.toHexString()}`;
let member = Member.load(memberId);

if (!member) {
member = new Member(memberId);
member.address = event.params.to.toHexString();
member.reputationToken = repTokenId;
}
const reputation = repContract.balanceOf(event.params.to);
member.reputation = reputation;
member.reputationTokenAmount = repContract.balanceOf(event.params.to);

member.save();
reputationToken.save();
}

export function handleBurn(event: Burn): void {
const tokenAddress = event.address;
const repContract = DAOReputation.bind(tokenAddress);

const memberId = `${tokenAddress}-${event.params.from}`;
const repTokenId = tokenAddress.toHexString();
let reputationToken = ReputationToken.load(repTokenId);
if (!reputationToken) return;

const memberId = `${event.params.from}-${tokenAddress}`;
let member = Member.load(memberId);

if (!member) return;

const reputation = repContract.balanceOf(event.params.from);
member.reputation = reputation;
const memberReputationAmount = repContract.balanceOf(event.params.from);

member.reputationTokenAmount = memberReputationAmount;

reputationToken.amount = reputationToken.amount.minus(event.params.amount);

reputationToken.save();

if (memberReputationAmount == BigInt.fromString('0')) {
member.unset(memberId);
}

member.save();
}
Expand Down
13 changes: 12 additions & 1 deletion apps/dao-subgraph/src/mappings/DAOReputation/schema.graphql
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
type ReputationToken @entity {
id: ID!
address: String!
members: [Member!] @derivedFrom(field: "reputationToken")
name: String!
symbol: String!
controllerAddress: String!
amount: BigInt!
}

type Member @entity {
id: ID!
address: String!
reputation: BigInt!
reputationToken: ReputationToken
reputationTokenAmount: BigInt!
votes: [Vote!] @derivedFrom(field: "member")
}

0 comments on commit f11f09b

Please sign in to comment.