diff --git a/src/mappings/erc20Templates.ts b/src/mappings/erc20Templates.ts index e4e82a3..0f63927 100644 --- a/src/mappings/erc20Templates.ts +++ b/src/mappings/erc20Templates.ts @@ -1,5 +1,5 @@ import { Order, Nft, OrderReuse } from '../@types/schema' -import { BigInt, BigDecimal, Address } from '@graphprotocol/graph-ts' +import { BigInt, BigDecimal, Address, log } from '@graphprotocol/graph-ts' import { NewPaymentCollector, @@ -20,7 +20,11 @@ import { weiToDecimal } from './utils/generic' import { addOrder } from './utils/globalUtils' import { getToken, getUSDValue } from './utils/tokenUtils' import { getUser } from './utils/userUtils' -import { getOrderId, searchOrderForEvent } from './utils/orderUtils' +import { + getOrderId, + searchOrderForEvent, + searchOrderResusedForEvent +} from './utils/orderUtils' export function handleOrderStarted(event: OrderStarted): void { const order = new Order( @@ -247,37 +251,13 @@ export function handleProviderFee(event: ProviderFee): void { if (order) { order.providerFee = providerFee order.providerFeeValidUntil = event.params.validUntil - order.eventIndex = event.logIndex.toI32() order.save() - return - } - - let orderReuse = OrderReuse.load( - `${event.transaction.hash.toHex()}-${event.logIndex.toI32().toString()}` - ) - if (orderReuse) { - orderReuse.providerFee = providerFee - orderReuse.providerFeeValidUntil = event.params.validUntil - orderReuse.eventIndex = event.logIndex.toI32() - orderReuse.save() } else { - orderReuse = new OrderReuse( - `${event.transaction.hash.toHex()}-${event.logIndex.toI32().toString()}` - ) - orderReuse.providerFee = providerFee - orderReuse.providerFeeValidUntil = event.params.validUntil - orderReuse.order = order.id - orderReuse.createdTimestamp = event.block.timestamp.toI32() - orderReuse.tx = event.transaction.hash.toHex() - orderReuse.eventIndex = event.logIndex.toI32() - orderReuse.block = event.block.number.toI32() - orderReuse.caller = event.transaction.from.toHex() - if (event.transaction.gasPrice) - orderReuse.gasPrice = event.transaction.gasPrice - else orderReuse.gasPrice = BigInt.zero() - if (event.receipt !== null && event.receipt!.gasUsed) { - orderReuse.gasUsed = event.receipt!.gasUsed.toBigDecimal() - } else orderReuse.gasUsed = BigDecimal.zero() - orderReuse.save() + const orderReuse = searchOrderResusedForEvent(event) + if (orderReuse) { + orderReuse.providerFee = providerFee + orderReuse.providerFeeValidUntil = event.params.validUntil + orderReuse.save() + } } } diff --git a/src/mappings/utils/orderUtils.ts b/src/mappings/utils/orderUtils.ts index da70545..c7a0bd6 100644 --- a/src/mappings/utils/orderUtils.ts +++ b/src/mappings/utils/orderUtils.ts @@ -1,5 +1,5 @@ -import { Order } from '../../@types/schema' -import { ethereum } from '@graphprotocol/graph-ts' +import { Order, OrderReuse } from '../../@types/schema' +import { ethereum, log } from '@graphprotocol/graph-ts' export function getOrderId( tx: string, @@ -36,6 +36,7 @@ export function getOrder( export function searchOrderForEvent(event: ethereum.Event): Order { let firstEventIndex = event.logIndex.toI32() - 1 + log.info('firstEventIndex on simple order: ', [firstEventIndex.toString()]) while (true) { const orderId = getOrderId( event.transaction.hash.toHex(), @@ -43,10 +44,44 @@ export function searchOrderForEvent(event: ethereum.Event): Order { event.transaction.from.toHex(), firstEventIndex.toString() ) + log.info('orderId as trial: ', [orderId]) const order = Order.load(orderId) + if (order !== null) { + log.info('order datatoken: ', [order.datatoken]) + } + log.info('event address: ', [event.address.toString()]) if (order !== null && order.datatoken === event.address.toString()) { return order } firstEventIndex-- } } + +export function searchOrderResusedForEvent(event: ethereum.Event): OrderReuse { + let firstEventIndex = event.logIndex.toI32() - 1 + log.info('firstEventIndex on simple order: ', [firstEventIndex.toString()]) + while (true) { + const orderReused = OrderReuse.load( + `${event.transaction.hash.toHex()}-${firstEventIndex}` + ) + + if (orderReused !== null) { + log.info('order reused order: ', [orderReused.order]) + const order = Order.load(orderReused.order) + if (order !== null) { + log.info('order datatoken: ', [order.datatoken]) + } + log.info('event address: ', [event.address.toString()]) + + if ( + orderReused !== null && + order !== null && + order.datatoken === event.address.toString() + ) { + return orderReused + } + } + + firstEventIndex-- + } +} diff --git a/test/integration/SimplePublishConsume.test.ts b/test/integration/SimplePublishConsume.test.ts index dd55d51..a3ab905 100644 --- a/test/integration/SimplePublishConsume.test.ts +++ b/test/integration/SimplePublishConsume.test.ts @@ -307,6 +307,8 @@ describe('Simple Publish & consume test', async () => { setProviderFee ) console.log('orderTx: ', orderTx) + console.log('order tx id: ', orderTx.events.OrderStarted.returnValues) + console.log('provider fee: ', orderTx.events.ProviderFee.returnValues) const orderId = `${orderTx.transactionHash.toLowerCase()}-${datatokenAddress.toLowerCase()}-${user1.toLowerCase()}-${orderTx.events.OrderStarted.logIndex.toString()}` console.log('orderId: ', orderId) const query = { @@ -318,7 +320,7 @@ describe('Simple Publish & consume test', async () => { method: 'POST', body: JSON.stringify(query) }) - await sleep(3000) + await sleep(6000) const queryResult = await response.json() console.log('queryResult: ', queryResult)