167 lines
4.5 KiB
TypeScript
167 lines
4.5 KiB
TypeScript
import { Address, BigInt, ethereum, log } from '@graphprotocol/graph-ts'
|
|
import {
|
|
Activated,
|
|
Deactivated,
|
|
AcceptedMinter,
|
|
RemovedMinter,
|
|
TokensDispensed,
|
|
OwnerWithdrawed,
|
|
Dispenser as DispenserEntity
|
|
} from '../@types/Dispenser/Dispenser'
|
|
|
|
import {
|
|
Dispenser,
|
|
DispenserTransaction,
|
|
User,
|
|
Datatoken
|
|
} from '../../@types/schema'
|
|
|
|
import { tokenToDecimal } from '../../helpers'
|
|
|
|
function _processDispenserUpdate(
|
|
event: ethereum.Event,
|
|
datatoken: string,
|
|
contractAddress: Address
|
|
): void {
|
|
const dt = Datatoken.load(datatoken)
|
|
if (!dt) {
|
|
return
|
|
}
|
|
let dispenser = Dispenser.load(datatoken)
|
|
if (!dispenser) {
|
|
dispenser = new Dispenser(datatoken)
|
|
}
|
|
const dispenserEntity = DispenserEntity.bind(contractAddress)
|
|
const dispenserStatus = dispenserEntity.try_status(
|
|
Address.fromString(datatoken)
|
|
)
|
|
if (dispenserStatus.reverted) return
|
|
dispenser.active = dispenserStatus.value.value0
|
|
let owner = User.load(dispenserStatus.value.value1.toHexString())
|
|
if (!owner) {
|
|
owner = new User(dispenserStatus.value.value1.toHexString())
|
|
owner.save()
|
|
}
|
|
dispenser.owner = owner.id
|
|
dispenser.minterApproved = dispenserStatus.value.value2
|
|
dispenser.isTrueMinter = dispenserStatus.value.value3
|
|
dispenser.maxTokens = tokenToDecimal(
|
|
dispenserStatus.value.value4.toBigDecimal(),
|
|
18
|
|
)
|
|
dispenser.maxBalance = tokenToDecimal(
|
|
dispenserStatus.value.value5.toBigDecimal(),
|
|
18
|
|
)
|
|
dispenser.balance = tokenToDecimal(
|
|
dispenserStatus.value.value6.toBigDecimal(),
|
|
18
|
|
)
|
|
dispenser.datatoken = dt.id
|
|
dispenser.save()
|
|
}
|
|
|
|
export function handleDispenserActivated(event: Activated): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatokenAddress.toHexString(),
|
|
event.address
|
|
)
|
|
}
|
|
|
|
export function handleDispenserDeactivated(event: Deactivated): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatokenAddress.toHexString(),
|
|
event.address
|
|
)
|
|
}
|
|
export function handleDispenserAcceptedMinter(event: AcceptedMinter): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatokenAddress.toHexString(),
|
|
event.address
|
|
)
|
|
}
|
|
export function handleDispenserRemovedMinter(event: RemovedMinter): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatokenAddress.toHexString(),
|
|
event.address
|
|
)
|
|
}
|
|
|
|
export function handleDispenserTokensDispensed(event: TokensDispensed): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatokenAddress.toHexString(),
|
|
event.address
|
|
)
|
|
const dt = Datatoken.load(event.params.datatokenAddress.toHexString())
|
|
if (!dt) {
|
|
log.warning('Tokens dispensed, but no datatoken ? ', [
|
|
event.params.datatokenAddress.toHexString()
|
|
])
|
|
return
|
|
}
|
|
|
|
const tx = event.transaction.hash
|
|
const id = tx
|
|
.toHexString()
|
|
.concat('-')
|
|
.concat(event.params.datatokenAddress.toHexString())
|
|
log.info('Created dispenser in handleDispenserTokensDispensed with id {}', [
|
|
id
|
|
])
|
|
const dispensers = new DispenserTransaction(id)
|
|
dispensers.dispenserId = event.params.datatokenAddress.toHexString()
|
|
dispensers.datatoken = event.params.datatokenAddress.toHexString()
|
|
dispensers.user = event.params.userAddress.toHexString()
|
|
dispensers.amount = tokenToDecimal(
|
|
event.params.amount.toBigDecimal(),
|
|
BigInt.fromI32(18).toI32()
|
|
)
|
|
dispensers.block = event.block.number.toI32()
|
|
dispensers.timestamp = event.block.timestamp.toI32()
|
|
dispensers.tx = tx
|
|
dispensers.type = 'dispense'
|
|
dispensers.save()
|
|
}
|
|
|
|
export function handleDispenserOwnerWithdrawed(event: OwnerWithdrawed): void {
|
|
_processDispenserUpdate(
|
|
event,
|
|
event.params.datatoken.toHexString(),
|
|
event.address
|
|
)
|
|
const dt = Datatoken.load(event.params.datatoken.toHexString())
|
|
if (!dt) {
|
|
log.warning('Tokens dispensed, but no datatoken ? ', [
|
|
event.params.datatoken.toHexString()
|
|
])
|
|
return
|
|
}
|
|
|
|
const tx = event.transaction.hash
|
|
const id = tx
|
|
.toHexString()
|
|
.concat('-')
|
|
.concat(event.params.datatoken.toHexString())
|
|
log.info('Created dispenser in handleDispenserOwnerWithdrawed with id {} ', [
|
|
id
|
|
])
|
|
const dispensers = new DispenserTransaction(id)
|
|
dispensers.dispenserId = event.params.datatoken.toHexString()
|
|
dispensers.datatoken = event.params.datatoken.toHexString()
|
|
dispensers.user = event.params.owner.toHexString()
|
|
dispensers.amount = tokenToDecimal(
|
|
event.params.amount.toBigDecimal(),
|
|
BigInt.fromI32(18).toI32()
|
|
)
|
|
dispensers.block = event.block.number.toI32()
|
|
dispensers.timestamp = event.block.timestamp.toI32()
|
|
dispensers.tx = tx
|
|
dispensers.type = 'withdraw'
|
|
dispensers.save()
|
|
}
|