Skip to content

Commit

Permalink
Fix bugs from testing with scripts gns mappings for phase 1
Browse files Browse the repository at this point in the history
davekaj committed Aug 14, 2020
1 parent 05f01bc commit cf92b74
Showing 6 changed files with 70 additions and 28 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
"build": "graph build",
"deploy-beta": "yarn prepare:kovan && graph deploy graphprotocol/graph-network-beta --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/",
"deploy-phase1": "yarn prepare:rinkeby && graph deploy graphprotocol/graph-network-rinkeby --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/",
"deploy-testing": "yarn prepare:kovan && graph deploy davekaj/graph-network-phase-one-kovan --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/",
"deploy-testing": "yarn prepare:rinkeby && graph deploy davekaj/graph-network-rinkeby-practice --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/",
"prepare:addresses:kovan": "ts-node config/kovanAddressScript.ts && mustache ./config/generatedAddresses.json ./config/addresses.template.ts > ./config/addresses.ts",
"prepare:kovan": "yarn prepare:addresses:kovan && mustache ./config/generatedAddresses.json subgraph.template.yaml > subgraph.yaml && yarn codegen",
"prepare:addresses:rinkeby": "ts-node config/rinkebyAddressScript.ts && mustache ./config/generatedAddresses.json ./config/addresses.template.ts > ./config/addresses.ts",
11 changes: 4 additions & 7 deletions schema.graphql
Original file line number Diff line number Diff line change
@@ -206,6 +206,8 @@ type Subgraph @entity {
pastVersions: [SubgraphVersion!]!
"Creation timestamp"
createdAt: Int!
"Updated timestamp"
updatedAt: Int!

# Name curation data for bonding curve
# Note that the Subgraphs V signal is actually stored in a Signal object, which
@@ -557,6 +559,8 @@ type Curator @entity {
totalNameSignalledTokens: BigInt!
"Total tokens unsignalled on all names"
totalNameUnsignalledTokens: BigInt!
"Total withdrawn tokens from deprecated subgraphs"
totalWithdrawnTokens: BigInt!
"Subgraphs the curator is curating"
nameSignals: [NameSignal!]! @derivedFrom(field: "curator")

@@ -706,13 +710,6 @@ type Epoch @entity {
queryFeeRebates: BigInt!
"Total indexing rewards earned in this epoch"
totalRewards: BigInt!
"Status of the Epoch"
status: EpochStatus!
# todo - DO I NEED totalQueryFees / Protocol rebates earned?
}

enum EpochStatus {
Rewarding
Settling
Finalized
}
4 changes: 3 additions & 1 deletion src/mappings/curation.ts
Original file line number Diff line number Diff line change
@@ -42,7 +42,7 @@ export function handleSignalled(event: Signalled): void {
deployment.signalAmount = deployment.signalAmount.plus(event.params.signal)

let curation = Curation.bind(event.address)
deployment.reserveRatio = curation.pools(event.params.subgraphDeploymentID).value0.toI32()
deployment.reserveRatio = curation.pools(event.params.subgraphDeploymentID).value1.toI32()
deployment.save()

// Update epoch
@@ -72,6 +72,8 @@ export function handleBurned(event: Burned): void {
let subgraphDeploymentID = event.params.subgraphDeploymentID.toHexString()
let signalID = joinID([id, subgraphDeploymentID])
let signal = Signal.load(signalID)
// Note - if you immediately deposited and then withdrew, you would lose 5%, and you were
// realize this loss by seeing unsignaled tokens being 95 and signalled 100
signal.unsignalledTokens = signal.unsignalledTokens.plus(event.params.tokens)
signal.signal = signal.signal.minus(event.params.signal)
signal.save()
58 changes: 48 additions & 10 deletions src/mappings/gns.ts
Original file line number Diff line number Diff line change
@@ -12,12 +12,13 @@ import {
SetDefaultName,
} from '../types/GNS/GNS'

import { Subgraph, SubgraphVersion, GraphAccount } from '../types/schema'
import { Subgraph, SubgraphVersion, GraphAccount, Curator } from '../types/schema'

import { jsonToString } from './utils'
import {
createOrLoadSubgraphDeployment,
createOrLoadGraphAccount,
createOrLoadCurator,
addQm,
resolveName,
createOrLoadSubgraph,
@@ -26,7 +27,11 @@ import {
} from './helpers'

export function handleSetDefaultName(event: SetDefaultName): void {
let graphAccount = GraphAccount.load(event.params.graphAccount.toString())
let graphAccount = createOrLoadGraphAccount(
event.params.graphAccount.toHexString(),
event.params.graphAccount,
event.block.timestamp,
)
graphAccount.defaultName = resolveName(
event.params.graphAccount,
event.params.name,
@@ -56,6 +61,7 @@ export function handleSubgraphMetadataUpdated(event: SubgraphMetadataUpdated): v
subgraph.website = jsonToString(data.get('subgraphWebsite'))
}
}
subgraph.updatedAt = event.block.timestamp.toI32()
subgraph.save()
}

@@ -90,11 +96,14 @@ export function handleSubgraphPublished(event: SubgraphPublished): void {

// Creates Graph Account, if needed
createOrLoadGraphAccount(graphAccountID, event.params.graphAccount, event.block.timestamp)

subgraph.updatedAt = event.block.timestamp.toI32()
subgraph.save()

// Create subgraph version
// Create subgraph deployment, if needed. Can happen if the deployment has never been staked on
let subgraphDeploymentID = event.params.subgraphDeploymentID.toHexString()
createOrLoadSubgraphDeployment(subgraphDeploymentID, event.block.timestamp)

// Create subgraph version
let subgraphVersion = new SubgraphVersion(versionID)
subgraphVersion.subgraph = subgraphID
subgraphVersion.subgraphDeployment = subgraphDeploymentID
@@ -114,8 +123,7 @@ export function handleSubgraphPublished(event: SubgraphPublished): void {
}
subgraphVersion.save()

// Create subgraph deployment, if needed. Can happen if the deployment has never been staked on
createOrLoadSubgraphDeployment(subgraphDeploymentID, event.block.timestamp)

}
/**
* @dev handleSubgraphDeprecated
@@ -133,6 +141,7 @@ export function handleSubgraphDeprecated(event: SubgraphDeprecated): void {
pastVersions.push(subgraph.currentVersion)
subgraph.pastVersions = pastVersions
subgraph.currentVersion = null
subgraph.updatedAt = event.block.timestamp.toI32()
subgraph.save()
}

@@ -157,7 +166,17 @@ export function handleNSignalMinted(event: NSignalMinted): void {
subgraph.signalledTokens = subgraph.signalledTokens.plus(event.params.tokensDeposited)
subgraph.save()

let nameSignal = createOrLoadNameSignal(event.params.nameCurator.toHexString(), subgraphID)
let curator = createOrLoadCurator(event.params.nameCurator.toHexString(), event.block.timestamp)
curator.totalNameSignalledTokens = curator.totalNameSignalledTokens.plus(
event.params.tokensDeposited,
)
curator.save()

let nameSignal = createOrLoadNameSignal(
event.params.nameCurator.toHexString(),
subgraphID,
event.block.timestamp,
)
nameSignal.nameSignal = nameSignal.nameSignal.plus(event.params.nSignalCreated)
nameSignal.signalledTokens = nameSignal.signalledTokens.plus(event.params.tokensDeposited)
nameSignal.lastNameSignalChange = event.block.timestamp.toI32()
@@ -174,8 +193,18 @@ export function handleNSignalBurned(event: NSignalBurned): void {
subgraph.unsignalledTokens = subgraph.unsignalledTokens.plus(event.params.tokensReceived)
subgraph.save()

let nameSignal = createOrLoadNameSignal(event.params.nameCurator.toHexString(), subgraphID)
nameSignal.nameSignal = nameSignal.nameSignal.plus(event.params.nSignalBurnt)
let curator = createOrLoadCurator(event.params.nameCurator.toHexString(), event.block.timestamp)
curator.totalNameUnsignalledTokens = curator.totalNameUnsignalledTokens.plus(
event.params.tokensReceived,
)
curator.save()

let nameSignal = createOrLoadNameSignal(
event.params.nameCurator.toHexString(),
subgraphID,
event.block.timestamp,
)
nameSignal.nameSignal = nameSignal.nameSignal.minus(event.params.nSignalBurnt)
nameSignal.unsignalledTokens = nameSignal.unsignalledTokens.plus(event.params.tokensReceived)
nameSignal.lastNameSignalChange = event.block.timestamp.toI32()
nameSignal.save()
@@ -211,13 +240,22 @@ export function handleGRTWithdrawn(event: GRTWithdrawn): void {
let subgraphNumber = event.params.subgraphNumber.toString()
let subgraphID = joinID([graphAccount, subgraphNumber])
let subgraph = Subgraph.load(subgraphID)
subgraph.withdrawableTokens = subgraph.withdrawableTokens.minus(event.params.withdrawnGRT)
subgraph.withdrawnTokens = subgraph.withdrawnTokens.plus(event.params.withdrawnGRT)
subgraph.nameSignalAmount = subgraph.nameSignalAmount.minus(event.params.nSignalBurnt)
subgraph.save()

let nameSignal = createOrLoadNameSignal(event.params.nameCurator.toHexString(), subgraphID)
let nameSignal = createOrLoadNameSignal(
event.params.nameCurator.toHexString(),
subgraphID,
event.block.timestamp,
)
nameSignal.withdrawnTokens = event.params.withdrawnGRT
nameSignal.nameSignal = nameSignal.nameSignal.minus(event.params.nSignalBurnt)
nameSignal.lastNameSignalChange = event.block.timestamp.toI32()
nameSignal.save()

let curator = Curator.load(event.params.nameCurator.toHexString())
curator.totalWithdrawnTokens = curator.totalWithdrawnTokens.plus(event.params.withdrawnGRT)
curator.save()
}
11 changes: 6 additions & 5 deletions src/mappings/graphtoken.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Approval, Transfer } from '../types/GraphToken/GraphToken'
import { Approval, Transfer, GraphToken } from '../types/GraphToken/GraphToken'
import { createOrLoadGraphNetwork, createOrLoadGraphAccount } from './helpers'
import { GraphNetwork, GraphAccount } from '../types/schema'
import { GraphNetwork } from '../types/schema'

/**
* @dev handleTransfer
@@ -41,12 +41,13 @@ export function handleTransfer(event: Transfer): void {
}

// decrease approval , if it was a transferFrom from one of the core contracts
let graphToken = GraphToken.bind(event.address)
if (to == staking) {
userFrom.stakingApproval = userFrom.stakingApproval.minus(value)
userFrom.stakingApproval = graphToken.allowance(event.params.from, event.params.to)
} else if (to == curation) {
userFrom.curationApproval = userFrom.curationApproval.minus(value)
userFrom.curationApproval = graphToken.allowance(event.params.from, event.params.to)
} else if (to == gns) {
userFrom.gnsApproval = userFrom.gnsApproval.minus(value)
userFrom.gnsApproval = graphToken.allowance(event.params.from, event.params.to)
}

userTo.save()
12 changes: 8 additions & 4 deletions src/mappings/helpers.ts
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@ export function createOrLoadSubgraph(
subgraph.owner = owner.toHexString()
subgraph.pastVersions = []
subgraph.createdAt = timestamp.toI32()
subgraph.updatedAt = timestamp.toI32()

subgraph.signalledTokens = BigInt.fromI32(0)
subgraph.unsignalledTokens = BigInt.fromI32(0)
@@ -170,6 +171,7 @@ export function createOrLoadCurator(id: string, timestamp: BigInt): Curator {

curator.totalNameSignalledTokens = BigInt.fromI32(0)
curator.totalNameUnsignalledTokens = BigInt.fromI32(0)
curator.totalWithdrawnTokens = BigInt.fromI32(0)

curator.realizedRewards = BigInt.fromI32(0)
curator.annualizedReturn = BigDecimal.fromString('0')
@@ -205,12 +207,13 @@ export function createOrLoadSignal(curator: string, subgraphDeploymentID: string
return signal as Signal
}

export function createOrLoadNameSignal(curator: string, subgraphID: string): NameSignal {
export function createOrLoadNameSignal(curator: string, subgraphID: string, timestamp: BigInt): NameSignal {
let nameSignalID = joinID([curator, subgraphID])
let nameSignal = NameSignal.load(nameSignalID)
if (nameSignal == null) {
nameSignal = new NameSignal(nameSignalID)
nameSignal.curator = curator
let underlyingCurator = createOrLoadCurator(curator, timestamp)
nameSignal.curator = underlyingCurator.id
nameSignal.subgraph = subgraphID
nameSignal.signalledTokens = BigInt.fromI32(0)
nameSignal.unsignalledTokens = BigInt.fromI32(0)
@@ -270,6 +273,8 @@ export function createOrLoadEpoch(blockNumber: BigInt): Epoch {
epochsSinceLastUpdate.toI32() > graphNetwork.currentEpoch ||
(graphNetwork.currentEpoch == 0 && epochsSinceLastUpdate.toI32() == 0) // edge case where no epochs exist
) {


let newEpoch = graphNetwork.currentEpoch + epochsSinceLastUpdate.toI32()
if (newEpoch == 0){ // there is no 0 epoch. we start at 1
newEpoch = 1
@@ -283,7 +288,6 @@ export function createOrLoadEpoch(blockNumber: BigInt): Epoch {
epoch.stakeDeposited = BigInt.fromI32(0)
epoch.queryFeeRebates = BigInt.fromI32(0)
epoch.totalRewards = BigInt.fromI32(0)
epoch.status = 'Rewarding'
epoch.save()

graphNetwork.currentEpoch = newEpoch
@@ -430,7 +434,7 @@ function checkTLD(name: string, node: string): boolean {
// namehash('test') = 0x04f740db81dc36c853ab4205bddd785f46e79ccedca351fc6dfcbd8cc9a33dd6
// NOTE - test registrar is in use for now for quick testing. TODO - switch when we are ready
let testNode = ByteArray.fromHexString(
'0x04f740db81dc36c853ab4205bddd785f46e79ccedca351fc6dfcbd8cc9a33dd6',
'0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae',
)

let nameHash = crypto.keccak256(concatByteArrays(testNode, labelHash)).toHexString()

0 comments on commit cf92b74

Please sign in to comment.