ocean-subgraph/src/mappings/utils/dispenserUtils.ts

46 lines
1.5 KiB
TypeScript

import { Dispenser } from '../../@types/schema'
import { getToken } from './tokenUtils'
import { Address } from '@graphprotocol/graph-ts'
import { weiToDecimal } from './generic'
import { Dispenser as DispenserContract } from '../../@types/templates/Dispenser/Dispenser'
export function getDispenserGraphID(
contractAddress: Address,
datatokenAddress: Address
): string {
return contractAddress.toHexString() + '-' + datatokenAddress.toHexString()
}
export function createDispenser(dispenserID: string): Dispenser {
const dispenser = new Dispenser(dispenserID)
dispenser.save()
return dispenser
}
export function getDispenser(dispenserID: string): Dispenser {
let dispenser = Dispenser.load(dispenserID)
if (dispenser === null) {
dispenser = createDispenser(dispenserID)
}
return dispenser
}
export function updateDispenserDetails(
contractAddress: Address,
datatokenAddress: Address
): void {
const dispenserID = getDispenserGraphID(contractAddress, datatokenAddress)
const dispenser = getDispenser(dispenserID)
const contract = DispenserContract.bind(contractAddress)
const dispenserDetails = contract.try_status(datatokenAddress)
if (dispenserDetails == null) return
const token = getToken(datatokenAddress, true)
dispenser.balance = weiToDecimal(
dispenserDetails.value.value5.toBigDecimal(),
token.decimals
)
dispenser.isMinter = dispenserDetails.value.value2
dispenser.active = dispenserDetails.value.value0
dispenser.save()
}