Skip to content

Commit 3ebc29a

Browse files
Issue 471 provider fees (#474)
* Adding providerFee to Order in the schema * Adding ProviderFee to subgraph.template.yaml * Creating order utils * Saving providerFee as a string * Saving providerFee as an array of all previous provider fees * Creating test for providerFee * Removing arrary from providerFee * Updating or Creating OrderResue provider fee * lint:fix * Creating additional tests for testing providerFees on Order and reuseOrder * lint:fix * Updating JSON string notation * Fixing first test * fixing second test: testing provider fees after calling reuseOrder on a using a previous txId * added providerFeeValidUntil Co-authored-by: mihaisc <[email protected]>
1 parent db8cf22 commit 3ebc29a

File tree

7 files changed

+331
-98
lines changed

7 files changed

+331
-98
lines changed

.vscode/extensions.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"recommendations": [
3+
"dbaeumer.vscode-eslint",
4+
"esbenp.prettier-vscode",
5+
"wix.vscode-import-cost"
6+
]
7+
}

.vscode/settings.json

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"editor.codeActionsOnSave": {
3+
"source.fixAll.eslint": true
4+
},
5+
"editor.defaultFormatter": "esbenp.prettier-vscode",
6+
"editor.formatOnSave": true,
7+
"eslint.validate": [
8+
"javascript",
9+
"javascriptreact",
10+
"typescript",
11+
"typescriptreact"
12+
],
13+
"search.exclude": {
14+
"**/.next": true,
15+
"**/out": true
16+
}
17+
}

schema.graphql

+4
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ type OrderReuse @entity {
249249
createdTimestamp: BigInt!
250250
tx: String!
251251
block: BigInt!
252+
providerFee: String
253+
providerFeeValidUntil: BigInt
252254
}
253255
type Order @entity {
254256
"transaction hash - token address - from address"
@@ -265,6 +267,8 @@ type Order @entity {
265267
publishingMarket: User
266268
publishingMarketToken: Token #
267269
publishingMarketAmmount: BigDecimal #call contract to get fee amount
270+
providerFee: String
271+
providerFeeValidUntil: BigInt
268272

269273
consumerMarket: User
270274
consumerMarketToken: Token #

src/mappings/erc20Templates.ts

+38-32
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,16 @@ import {
1010
RemovedMinter,
1111
RemovedPaymentManager,
1212
CleanedPermissions,
13-
OrderReused
13+
OrderReused,
14+
ProviderFee
1415
} from '../@types/templates/ERC20Template/ERC20Template'
1516

1617
import { integer } from './utils/constants'
1718
import { weiToDecimal } from './utils/generic'
1819
import { addOrder } from './utils/globalUtils'
1920
import { getToken, getUSDValue } from './utils/tokenUtils'
2021
import { getUser } from './utils/userUtils'
21-
22-
function getOrderId(
23-
tx: string,
24-
tokenAddress: string,
25-
fromAddress: string
26-
): string {
27-
return `${tx}-${tokenAddress}-${fromAddress}`
28-
}
22+
import { getOrderId } from './utils/orderUtils'
2923

3024
export function handleOrderStarted(event: OrderStarted): void {
3125
const order = new Order(
@@ -204,26 +198,38 @@ export function handleNewPaymentCollector(event: NewPaymentCollector): void {
204198
token.save()
205199
}
206200

207-
// export function handlePublishMarketFees(event: PublishMarketFees): void {
208-
// const order = Order.load(
209-
// getOrderId(
210-
// event.transaction.hash.toHex(),
211-
// event.address.toHex(),
212-
// event.transaction.from.toHex()
213-
// )
214-
// )
215-
216-
// order.save()
217-
// }
218-
219-
// export function handleConsumeMarketFees(event: ConsumeMarketFees): void {
220-
// const order = Order.load(
221-
// getOrderId(
222-
// event.transaction.hash.toHex(),
223-
// event.address.toHex(),
224-
// event.transaction.from.toHex()
225-
// )
226-
// )
227-
228-
// order.save()
229-
// }
201+
export function handleProviderFee(event: ProviderFee): void {
202+
const providerFee: string = `{"providerFeeAddress": "${event.params.providerFeeAddress.toHex()}", "providerFeeToken": "${event.params.providerFeeToken.toHex()}", "providerFeeAmount": "${
203+
event.params.providerFeeAmount
204+
}", "providerData": "${event.params.providerData.toHexString()}", "v": "${
205+
event.params.v
206+
}", "r": "${event.params.r.toHexString()}", "s": "${event.params.s.toHexString()}", "validUntil": "${
207+
event.params.validUntil
208+
}"}`
209+
210+
const orderId = getOrderId(
211+
event.transaction.hash.toHex(),
212+
event.address.toHex(),
213+
event.transaction.from.toHex()
214+
)
215+
const order = Order.load(orderId)
216+
217+
if (order) {
218+
order.providerFee = providerFee
219+
order.providerFeeValidUntil = event.params.validUntil
220+
order.save()
221+
return
222+
}
223+
224+
let orderReuse = OrderReuse.load(event.transaction.hash.toHex())
225+
if (orderReuse) {
226+
orderReuse.providerFee = providerFee
227+
orderReuse.providerFeeValidUntil = event.params.validUntil
228+
orderReuse.save()
229+
} else {
230+
orderReuse = new OrderReuse(event.transaction.hash.toHex())
231+
orderReuse.providerFee = providerFee
232+
orderReuse.providerFeeValidUntil = event.params.validUntil
233+
orderReuse.save()
234+
}
235+
}

src/mappings/utils/orderUtils.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Order } from '../../@types/schema'
2+
3+
export function getOrderId(
4+
tx: string,
5+
tokenAddress: string,
6+
fromAddress: string
7+
): string {
8+
return `${tx}-${tokenAddress}-${fromAddress}`
9+
}
10+
11+
export function createOrder(orderId: string): Order {
12+
const order = new Order(orderId)
13+
return order
14+
}
15+
16+
export function getOrder(
17+
transactionHash: string,
18+
address: string,
19+
transactionFrom: string
20+
): Order {
21+
const orderId = getOrderId(transactionHash, address, transactionFrom)
22+
let newOrder = Order.load(orderId)
23+
if (newOrder === null) {
24+
newOrder = createOrder(orderId)
25+
}
26+
return newOrder
27+
}

subgraph.template.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ templates:
113113
handler: handleRemovedPaymentManager
114114
- event: CleanedPermissions(indexed address,uint256,uint256)
115115
handler: handleCleanedPermissions
116+
- event: ProviderFee(indexed address,indexed address,uint256,bytes,uint8,bytes32,bytes32,uint256)
117+
handler: handleProviderFee
116118

117119
- name: BPool
118120
kind: ethereum/contract

0 commit comments

Comments
 (0)