ocean-subgraph/src/mappings/veOCEAN.ts

84 lines
2.8 KiB
TypeScript

import { BigDecimal, BigInt } from '@graphprotocol/graph-ts'
import { Deposit, Supply, Withdraw } from '../@types/veOCEAN/veOCEAN'
import { weiToDecimal } from './utils/generic'
import { getDeposit, getveOCEAN } from './utils/veUtils'
import {
getTotalOceanLocked,
updateTotalOceanLocked
} from './utils/globalUtils'
export function handleDeposit(event: Deposit): void {
const provider = event.params.provider
const value = event.params.value
const locktime = event.params.locktime
const type = event.params.type
const ts = event.params.ts
const totalOceanLocked = getTotalOceanLocked()
const veOCEAN = getveOCEAN(provider.toHex())
// Create new Deposit entity
const deposit = getDeposit(
provider.toHex() +
'-' +
event.transaction.hash.toHex() +
'-' +
event.logIndex.toString()
)
deposit.provider = provider.toHex()
deposit.value = weiToDecimal(value.toBigDecimal(), 18)
deposit.unlockTime = locktime
deposit.type = type
deposit.timestamp = ts
deposit.block = event.block.number.toI32()
deposit.tx = event.transaction.hash.toHex()
deposit.sender = event.transaction.from.toHex()
deposit.veOcean = veOCEAN.id
deposit.totalOceanLocked = totalOceanLocked.plus(deposit.value)
updateTotalOceanLocked(deposit.totalOceanLocked)
deposit.save()
// --------------------------------------------
const lockedAmount = weiToDecimal(value.toBigDecimal(), 18)
veOCEAN.unlockTime = locktime
veOCEAN.lockedAmount = veOCEAN.lockedAmount.plus(lockedAmount)
veOCEAN.block = event.block.number.toI32()
veOCEAN.save()
}
export function handleSupply(event: Supply): void {}
export function handleWithdraw(event: Withdraw): void {
const totalOceanLocked = getTotalOceanLocked()
const provider = event.params.provider
const value = event.params.value
const ts = event.params.ts
const veOCEAN = getveOCEAN(provider.toHex())
// Create new Deposit entity
const deposit = getDeposit(
provider.toHex() +
'-' +
event.transaction.hash.toHex() +
'-' +
event.logIndex.toString()
)
deposit.provider = provider.toHex()
deposit.value = weiToDecimal(value.toBigDecimal(), 18).neg()
deposit.unlockTime = BigInt.zero()
deposit.type = BigInt.fromI32(4)
deposit.timestamp = ts
deposit.block = event.block.number.toI32()
deposit.tx = event.transaction.hash.toHex()
deposit.eventIndex = event.logIndex.toI32()
deposit.sender = event.transaction.from.toHex()
deposit.veOcean = veOCEAN.id
deposit.totalOceanLocked = totalOceanLocked.plus(deposit.value) // it's already negated above
updateTotalOceanLocked(deposit.totalOceanLocked)
deposit.save()
// --------------------------------------------
veOCEAN.lockedAmount = BigDecimal.zero()
veOCEAN.unlockTime = BigInt.zero()
veOCEAN.block = event.block.number.toI32()
veOCEAN.save()
}