quasvel
Version:
Access and interact with Aragon Organizations and their apps.
99 lines (82 loc) • 4.35 kB
text/typescript
import { BigInt, Address } from '@graphprotocol/graph-ts'
import { buildVoteId, buildERC20, updateVoteState, loadOrCreateVoting } from './DisputableVoting'
import {
Vote as VoteEntity,
ArbitratorFee as ArbitratorFeeEntity,
CollateralRequirement as CollateralRequirementEntity
} from '../generated/schema'
import {
Agreement as AgreementContract,
ActionClosed as ActionClosedEvent,
ActionDisputed as ActionDisputedEvent,
ActionSettled as ActionSettledEvent,
ActionChallenged as ActionChallengedEvent,
CollateralRequirementChanged as CollateralRequirementChangedEvent
} from '../generated/templates/Agreement/Agreement'
/* eslint-disable @typescript-eslint/no-use-before-define */
export function handleCollateralRequirementChanged(event: CollateralRequirementChangedEvent): void {
const voting = loadOrCreateVoting(event.params.disputable)
const agreementApp = AgreementContract.bind(event.address)
const requirementId = buildCollateralRequirementId(event.params.disputable, event.params.collateralRequirementId)
const requirement = new CollateralRequirementEntity(requirementId)
const requirementData = agreementApp.getCollateralRequirement(event.params.disputable, event.params.collateralRequirementId)
requirement.token = buildERC20(requirementData.value0)
requirement.voting = event.params.disputable.toHexString()
requirement.challengeDuration = requirementData.value1
requirement.actionAmount = requirementData.value2
requirement.challengeAmount = requirementData.value3
requirement.collateralRequirementId = event.params.collateralRequirementId
requirement.save()
voting.collateralRequirement = requirementId
voting.save()
}
export function handleActionDisputed(event: ActionDisputedEvent): void {
const agreementApp = AgreementContract.bind(event.address)
const actionData = agreementApp.getAction(event.params.actionId)
const challengeData = agreementApp.getChallenge(event.params.challengeId)
const voteId = buildVoteId(actionData.value0, actionData.value1)
const vote = VoteEntity.load(voteId)!
vote.status = 'Disputed'
vote.disputeId = challengeData.value8
vote.disputedAt = event.block.timestamp
const submitterArbitratorFeeId = voteId + '-submitter'
const challengeArbitratorFeesData = agreementApp.getChallengeArbitratorFees(event.params.challengeId)
createArbitratorFee(voteId, submitterArbitratorFeeId, challengeArbitratorFeesData.value0, challengeArbitratorFeesData.value1)
vote.submitterArbitratorFee = submitterArbitratorFeeId
vote.save()
}
export function handleActionSettled(event: ActionSettledEvent): void {
const agreementApp = AgreementContract.bind(event.address)
const actionData = agreementApp.getAction(event.params.actionId)
const voteId = buildVoteId(actionData.value0, actionData.value1)
const vote = VoteEntity.load(voteId)!
vote.status = 'Settled'
vote.settledAt = event.block.timestamp
vote.save()
}
export function handleActionClosed(event: ActionClosedEvent): void {
const agreementApp = AgreementContract.bind(event.address)
const actionData = agreementApp.getAction(event.params.actionId)
updateVoteState(actionData.value0, actionData.value1)
}
export function handleActionChallenged(event: ActionChallengedEvent): void {
const agreementApp = AgreementContract.bind(event.address)
const actionData = agreementApp.getAction(event.params.actionId)
const voteId = buildVoteId(actionData.value0, actionData.value1)
const challengerArbitratorFeeId = voteId + '-challenger'
const challengeArbitratorFeesData = agreementApp.getChallengeArbitratorFees(event.params.challengeId)
createArbitratorFee(voteId, challengerArbitratorFeeId, challengeArbitratorFeesData.value2, challengeArbitratorFeesData.value3)
const vote = VoteEntity.load(voteId)!
vote.challengerArbitratorFee = challengerArbitratorFeeId
vote.save()
}
function createArbitratorFee(voteId: string, id: string, feeToken: Address, feeAmount: BigInt): void {
const arbitratorFee = new ArbitratorFeeEntity(id)
arbitratorFee.vote = voteId
arbitratorFee.amount = feeAmount
arbitratorFee.token = buildERC20(feeToken)
arbitratorFee.save()
}
function buildCollateralRequirementId(disputable: Address, collateralRequirementId: BigInt): string {
return disputable.toHexString() + "-collateral-" + collateralRequirementId.toString()
}