119 lines
4.1 KiB
TypeScript
119 lines
4.1 KiB
TypeScript
|
|
import { BigInt, BigDecimal } from '@graphprotocol/graph-ts'
|
|
import { OrderStarted, Transfer } from '../types/templates/DataToken/DataToken'
|
|
import { log } from '@graphprotocol/graph-ts'
|
|
|
|
import {
|
|
Datatoken, TokenBalance, TokenOrder
|
|
} from '../types/schema'
|
|
import {
|
|
tokenToDecimal,
|
|
updateTokenBalance,
|
|
ZERO_BD,
|
|
MINUS_1, saveTokenTransaction
|
|
} from './helpers'
|
|
|
|
/************************************
|
|
********** Pool Controls ***********
|
|
************************************/
|
|
|
|
export function handleTransfer(event: Transfer): void {
|
|
let tokenId = event.address.toHex()
|
|
|
|
let ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
|
|
|
|
|
|
let amount = tokenToDecimal(event.params.value.toBigDecimal(), 18)
|
|
let tokenShareFrom = event.params.from.toHex()
|
|
let tokenShareTo = event.params.to.toHex()
|
|
let tokenBalanceFromId = tokenId.concat('-').concat(tokenShareFrom)
|
|
let tokenBalanceToId = tokenId.concat('-').concat(tokenShareTo)
|
|
let tokenBalanceFrom = TokenBalance.load(tokenBalanceFromId)
|
|
let tokenBalanceTo = TokenBalance.load(tokenBalanceToId)
|
|
let oldBalanceFrom = BigDecimal.fromString('0.0')
|
|
let oldBalanceTo = BigDecimal.fromString('0.0')
|
|
|
|
let isMint = tokenShareFrom == ZERO_ADDRESS
|
|
let isBurn = tokenShareTo == ZERO_ADDRESS
|
|
|
|
let datatoken = Datatoken.load(tokenId)
|
|
|
|
if (isMint) {
|
|
tokenBalanceTo = TokenBalance.load(tokenBalanceToId)
|
|
oldBalanceTo = (tokenBalanceTo == null) ? ZERO_BD : tokenBalanceTo.balance
|
|
datatoken.supply = datatoken.supply.plus(amount)
|
|
updateTokenBalance(tokenBalanceToId, tokenId, tokenShareTo, amount)
|
|
|
|
} else if (isBurn) {
|
|
tokenBalanceFrom = TokenBalance.load(tokenBalanceFromId)
|
|
oldBalanceFrom = (tokenBalanceFrom == null) ? ZERO_BD : tokenBalanceFrom.balance
|
|
datatoken.supply = datatoken.supply.minus(amount)
|
|
updateTokenBalance(tokenBalanceFromId, tokenId, tokenShareFrom, amount.times(MINUS_1))
|
|
} else {
|
|
|
|
tokenBalanceFrom = TokenBalance.load(tokenBalanceFromId)
|
|
oldBalanceFrom = (tokenBalanceFrom == null) ? ZERO_BD : tokenBalanceFrom.balance
|
|
datatoken.supply = datatoken.supply.minus(amount)
|
|
updateTokenBalance(tokenBalanceFromId, tokenId, tokenShareFrom, amount.times(MINUS_1))
|
|
|
|
tokenBalanceTo = TokenBalance.load(tokenBalanceToId)
|
|
oldBalanceTo = (tokenBalanceTo == null) ? ZERO_BD : tokenBalanceTo.balance
|
|
datatoken.supply = datatoken.supply.plus(amount)
|
|
updateTokenBalance(tokenBalanceToId, tokenId, tokenShareTo, amount)
|
|
}
|
|
|
|
if (
|
|
tokenBalanceTo !== null
|
|
&& tokenBalanceTo.balance.notEqual(ZERO_BD)
|
|
&& oldBalanceTo.equals(ZERO_BD)
|
|
) {
|
|
datatoken.holderCount += BigInt.fromI32(1)
|
|
}
|
|
|
|
if (
|
|
tokenBalanceFrom !== null
|
|
&& tokenBalanceFrom.balance.equals(ZERO_BD)
|
|
&& oldBalanceFrom.notEqual(ZERO_BD)
|
|
) {
|
|
datatoken.holderCount -= BigInt.fromI32(1)
|
|
}
|
|
|
|
datatoken.save()
|
|
saveTokenTransaction(event, 'Transfer')
|
|
}
|
|
|
|
export function handleOrderStarted(event: OrderStarted): void {
|
|
let ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
|
|
let tokenId = event.address.toHex()
|
|
let datatoken = Datatoken.load(tokenId)
|
|
if (datatoken == null) return
|
|
|
|
let payer = event.params.payer.toHex()
|
|
// let feeCollector = event.params.mrktFeeCollector
|
|
// let marketFee = event.params.marketFee
|
|
let tx = event.transaction.hash
|
|
let orderId = tokenId.concat('-').concat(payer).concat('-').concat(tx.toHexString())
|
|
let order = TokenOrder.load(orderId)
|
|
if (order == null) {
|
|
order = new TokenOrder(orderId)
|
|
}
|
|
order.datatokenId = tokenId
|
|
order.amount = tokenToDecimal(event.params.amount.toBigDecimal(), 18)
|
|
order.consumer = event.params.consumer.toHex()
|
|
order.payer = payer
|
|
order.serviceId = event.params.serviceId.toI32()
|
|
order.timestamp = event.params.timestamp.toI32()
|
|
if (event.params.mrktFeeCollector != null && event.params.mrktFeeCollector.toHex() != ZERO_ADDRESS) {
|
|
order.marketFeeCollector = event.params.mrktFeeCollector.toHexString()
|
|
}
|
|
order.marketFee = tokenToDecimal(event.params.marketFee.toBigDecimal(), 18)
|
|
order.tx = tx
|
|
|
|
order.save()
|
|
|
|
datatoken.orderCount = datatoken.orderCount.plus(BigInt.fromI32(1))
|
|
datatoken.save()
|
|
|
|
saveTokenTransaction(event, 'OrderStarted')
|
|
}
|