diff --git a/schema.graphql b/schema.graphql index 3d18dfd..b7d5b9e 100644 --- a/schema.graphql +++ b/schema.graphql @@ -143,7 +143,7 @@ type OrderReuse @entity { } type Order @entity { - "transaction hash - token address - from address" + "transaction hash - token address - from address - eventIndex" id: ID! datatoken: Token! diff --git a/src/mappings/erc20Templates.ts b/src/mappings/erc20Templates.ts index f5a08a5..a0c2241 100644 --- a/src/mappings/erc20Templates.ts +++ b/src/mappings/erc20Templates.ts @@ -27,7 +27,8 @@ export function handleOrderStarted(event: OrderStarted): void { getOrderId( event.transaction.hash.toHex(), event.address.toHex(), - event.transaction.from.toHex() + event.transaction.from.toHex(), + event.logIndex.toI32().toString() ) ) @@ -107,7 +108,8 @@ export function handlerOrderReused(event: OrderReused): void { const orderId = getOrderId( event.params.orderTxId.toHexString(), event.address.toHex(), - event.params.caller.toHex() + event.params.caller.toHex(), + event.logIndex.toI32().toString() ) const order = Order.load(orderId) @@ -247,7 +249,8 @@ export function handleProviderFee(event: ProviderFee): void { const orderId = getOrderId( event.transaction.hash.toHex(), event.address.toHex(), - event.transaction.from.toHex() + event.transaction.from.toHex(), + event.logIndex.toI32().toString() ) const order = Order.load(orderId) diff --git a/src/mappings/utils/orderUtils.ts b/src/mappings/utils/orderUtils.ts index 497833d..27d36ca 100644 --- a/src/mappings/utils/orderUtils.ts +++ b/src/mappings/utils/orderUtils.ts @@ -3,9 +3,10 @@ import { Order } from '../../@types/schema' export function getOrderId( tx: string, tokenAddress: string, - fromAddress: string + fromAddress: string, + eventIndex: string ): string { - return `${tx}-${tokenAddress}-${fromAddress}` + return `${tx}-${tokenAddress}-${fromAddress}-${eventIndex}` } export function createOrder(orderId: string): Order { @@ -16,9 +17,15 @@ export function createOrder(orderId: string): Order { export function getOrder( transactionHash: string, address: string, - transactionFrom: string + transactionFrom: string, + eventIndex: string ): Order { - const orderId = getOrderId(transactionHash, address, transactionFrom) + const orderId = getOrderId( + transactionHash, + address, + transactionFrom, + eventIndex + ) let newOrder = Order.load(orderId) if (newOrder === null) { newOrder = createOrder(orderId) diff --git a/test/integration/Datatoken.test.ts b/test/integration/Datatoken.test.ts index 52f6092..9630827 100644 --- a/test/integration/Datatoken.test.ts +++ b/test/integration/Datatoken.test.ts @@ -419,7 +419,8 @@ describe('Datatoken tests', async () => { setProviderFee ) assert(orderTx, 'Invalid orderTx') - const orderId = `${orderTx.transactionHash.toLowerCase()}-${newDtAddress.toLowerCase()}-${user1.toLowerCase()}` + console.log('event: ', orderTx.events.OrderStarted.logIndex) + const orderId = `${orderTx.transactionHash.toLowerCase()}-${newDtAddress.toLowerCase()}-${user1.toLowerCase()}-${orderTx.events.OrderStarted.logIndex.toString()}` await sleep(3000) response = await fetch(subgraphUrl, {