This commit is contained in:
mihaisc 2022-07-27 11:15:13 +03:00
parent 4353b15391
commit 449e71f75b
9 changed files with 3199 additions and 3912 deletions

6851
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -33,7 +33,7 @@
"changelog": "auto-changelog -p"
},
"devDependencies": {
"@graphprotocol/graph-cli": "^0.33.0",
"@graphprotocol/graph-cli": "^0.29.0",
"@graphprotocol/graph-ts": "^0.27.0",
"@types/chai": "^4.3.1",
"@types/chai-spies": "^1.0.3",
@ -48,20 +48,18 @@
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-standard": "^5.0.0",
"mocha": "^10.0.0",
"mock-local-storage": "^1.1.21",
"prettier": "^2.7.1",
"release-it": "^15.1.4",
"release-it": "^15.1.0",
"source-map-support": "^0.5.21",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
"ts-node-register": "^1.0.0",
"typescript": "^4.7.4"
"typescript": "^4.6.4"
},
"dependencies": {
"@oceanprotocol/lib": "^1.1.6",
"@oceanprotocol/lib": "^1.1.3",
"cross-fetch": "^3.1.4"
},
"repository": {

View File

@ -120,7 +120,7 @@ type Pool @entity {
id: ID!
"owner address, pool controller"
controller: String
controller: String!
"only finalized pools are relevant to us"
isFinalized: Boolean!
@ -207,7 +207,7 @@ type PoolShare @entity {
}
type PoolTransaction @entity {
"tx address + eventIndex"
"tx address + caller address"
id: ID!
"pool related to this tx"
pool: Pool!
@ -222,7 +222,6 @@ type PoolTransaction @entity {
timestamp: Int!
"pool creation transaction id"
tx: String!
eventIndex: BigInt
"block number when it was created"
block: Int
@ -247,11 +246,9 @@ type OrderReuse @entity {
id: ID!
order: Order!
caller: String!
createdTimestamp: Int!
createdTimestamp: BigInt!
tx: String!
block: Int!
providerFee: String
providerFeeValidUntil: BigInt
block: BigInt!
}
type Order @entity {
"transaction hash - token address - from address"
@ -268,8 +265,6 @@ type Order @entity {
publishingMarket: User
publishingMarketToken: Token #
publishingMarketAmmount: BigDecimal #call contract to get fee amount
providerFee: String
providerFeeValidUntil: BigInt
consumerMarket: User
consumerMarketToken: Token #
@ -502,19 +497,6 @@ type GlobalStatistic @entity {
version: String
}
type OPC @entity {
id: ID!
"fee in percent for swaps involving OPC approved tokens"
swapOceanFee: BigDecimal
"fee in percent for swaps involving non OPC approved tokens"
swapNonOceanFee: BigDecimal
"fee in percent taken by OPC from orderFees"
orderFee: BigDecimal
"fee in percent taken by OPC from providerFees"
providerFee: BigDecimal
approvedTokens: [Token!]
}
enum NftUpdateType {
METADATA_CREATED,
METADATA_UPDATED,
@ -552,4 +534,3 @@ type Template @entity{
ssTemplates: [String!]
}

View File

@ -10,8 +10,7 @@ import {
RemovedMinter,
RemovedPaymentManager,
CleanedPermissions,
OrderReused,
ProviderFee
OrderReused
} from '../@types/templates/ERC20Template/ERC20Template'
import { integer } from './utils/constants'
@ -19,7 +18,14 @@ import { weiToDecimal } from './utils/generic'
import { addOrder } from './utils/globalUtils'
import { getToken, getUSDValue } from './utils/tokenUtils'
import { getUser } from './utils/userUtils'
import { getOrderId } from './utils/orderUtils'
function getOrderId(
tx: string,
tokenAddress: string,
fromAddress: string
): string {
return `${tx}-${tokenAddress}-${fromAddress}`
}
export function handleOrderStarted(event: OrderStarted): void {
const order = new Order(
@ -93,9 +99,9 @@ export function handlerOrderReused(event: OrderReused): void {
const reuseOrder = new OrderReuse(event.transaction.hash.toHex())
reuseOrder.order = orderId
reuseOrder.caller = event.params.caller.toHexString()
reuseOrder.createdTimestamp = event.params.timestamp.toI32()
reuseOrder.createdTimestamp = event.params.timestamp
reuseOrder.tx = event.transaction.hash.toHex()
reuseOrder.block = event.params.number.toI32()
reuseOrder.block = event.params.number
reuseOrder.save()
}
@ -198,43 +204,26 @@ export function handleNewPaymentCollector(event: NewPaymentCollector): void {
token.save()
}
export function handleProviderFee(event: ProviderFee): void {
const providerFee: string = `{"providerFeeAddress": "${event.params.providerFeeAddress.toHex()}", "providerFeeToken": "${event.params.providerFeeToken.toHex()}", "providerFeeAmount": "${
event.params.providerFeeAmount
}", "providerData": "${event.params.providerData.toHexString()}", "v": "${
event.params.v
}", "r": "${event.params.r.toHexString()}", "s": "${event.params.s.toHexString()}", "validUntil": "${
event.params.validUntil
}"}`
// export function handlePublishMarketFees(event: PublishMarketFees): void {
// const order = Order.load(
// getOrderId(
// event.transaction.hash.toHex(),
// event.address.toHex(),
// event.transaction.from.toHex()
// )
// )
const orderId = getOrderId(
event.transaction.hash.toHex(),
event.address.toHex(),
event.transaction.from.toHex()
)
const order = Order.load(orderId)
// order.save()
// }
if (order) {
order.providerFee = providerFee
order.providerFeeValidUntil = event.params.validUntil
order.save()
return
}
// export function handleConsumeMarketFees(event: ConsumeMarketFees): void {
// const order = Order.load(
// getOrderId(
// event.transaction.hash.toHex(),
// event.address.toHex(),
// event.transaction.from.toHex()
// )
// )
let orderReuse = OrderReuse.load(event.transaction.hash.toHex())
if (orderReuse) {
orderReuse.providerFee = providerFee
orderReuse.providerFeeValidUntil = event.params.validUntil
orderReuse.save()
} else {
orderReuse = new OrderReuse(event.transaction.hash.toHex())
orderReuse.providerFee = providerFee
orderReuse.providerFeeValidUntil = event.params.validUntil
orderReuse.order = orderId
orderReuse.createdTimestamp = event.block.timestamp.toI32()
orderReuse.tx = event.transaction.hash.toHex()
orderReuse.block = event.block.number.toI32()
orderReuse.caller = event.transaction.from.toHex()
orderReuse.save()
}
}
// order.save()
// }

View File

@ -1,9 +1,6 @@
import { log } from '@graphprotocol/graph-ts'
import {
NewPool,
TokenAdded,
TokenRemoved,
OPCFeeChanged,
FactoryRouter,
SSContractAdded,
SSContractRemoved,
FixedRateContractAdded,
@ -11,95 +8,19 @@ import {
DispenserContractAdded,
DispenserContractRemoved
} from '../@types/FactoryRouter/FactoryRouter'
import { BigInt } from '@graphprotocol/graph-ts'
import { Pool } from '../@types/schema'
import { BPool, FixedRateExchange, Dispenser } from '../@types/templates'
import { addPool, getOPC, getTemplates } from './utils/globalUtils'
import { weiToDecimal } from './utils/generic'
import { getToken } from './utils/tokenUtils'
import { addPool, getTemplates } from './utils/globalUtils'
export function handleNewPool(event: NewPool): void {
BPool.create(event.params.poolAddress)
log.error('POOL START CREATE', [])
const pool = new Pool(event.params.poolAddress.toHexString())
pool.save()
log.error('POOL CREATED', [])
addPool()
}
export function handleOPCFeeChanged(event: OPCFeeChanged): void {
const opc = getOPC()
const decimals = BigInt.fromI32(18).toI32()
opc.swapOceanFee = weiToDecimal(
event.params.newSwapOceanFee.toBigDecimal(),
decimals
)
opc.swapNonOceanFee = weiToDecimal(
event.params.newSwapNonOceanFee.toBigDecimal(),
decimals
)
opc.orderFee = weiToDecimal(
event.params.newConsumeFee.toBigDecimal(),
decimals
)
opc.providerFee = weiToDecimal(
event.params.newProviderFee.toBigDecimal(),
decimals
)
opc.save()
}
export function handleTokenAdded(event: TokenAdded): void {
const contract = FactoryRouter.bind(event.address)
const oceanFees = contract.try_getOPCFees()
if (oceanFees.reverted) return
const opc = getOPC()
const decimals = BigInt.fromI32(18).toI32()
opc.swapOceanFee = weiToDecimal(
oceanFees.value.value0.toBigDecimal(),
decimals
)
opc.swapNonOceanFee = weiToDecimal(
oceanFees.value.value1.toBigDecimal(),
decimals
)
const newOrderFee = contract.try_getOPCConsumeFee()
if (newOrderFee.reverted) return
const newProviderFee = contract.try_getOPCProviderFee()
if (newProviderFee.reverted) return
opc.orderFee = weiToDecimal(newOrderFee.value.toBigDecimal(), decimals)
opc.providerFee = weiToDecimal(newProviderFee.value.toBigDecimal(), decimals)
// add token to approvedTokens
let existingTokens: string[]
if (!opc.approvedTokens) existingTokens = []
else existingTokens = opc.approvedTokens as string[]
if (!existingTokens.includes(event.params.token.toHexString())) {
const newToken = getToken(event.params.token, false)
existingTokens.push(newToken.id)
}
opc.approvedTokens = existingTokens
opc.save()
}
export function handleTokenRemoved(event: TokenRemoved): void {
const opc = getOPC()
const newList: string[] = []
let existingTokens: string[]
if (!opc.approvedTokens) existingTokens = []
else existingTokens = opc.approvedTokens as string[]
if (!existingTokens || existingTokens.length < 1) return
while (existingTokens.length > 0) {
const role = existingTokens.shift().toString()
if (!role) break
if (role !== event.params.token.toHexString()) newList.push(role)
}
opc.approvedTokens = newList
opc.save()
}
export function handleSSContractAdded(event: SSContractAdded): void {
// add token to approvedTokens
const templates = getTemplates()

View File

@ -32,12 +32,7 @@ import { getUser } from './utils/userUtils'
export function handleJoin(event: LOG_JOIN): void {
const pool = getPool(event.address.toHex())
const user = getUser(event.params.caller.toHex())
const poolTx = getPoolTransaction(
event,
user.id,
PoolTransactionType.JOIN,
event.logIndex
)
const poolTx = getPoolTransaction(event, user.id, PoolTransactionType.JOIN)
pool.transactionCount = pool.transactionCount.plus(integer.ONE)
pool.joinCount = pool.joinCount.plus(integer.ONE)
@ -77,12 +72,7 @@ export function handleJoin(event: LOG_JOIN): void {
export function handleExit(event: LOG_EXIT): void {
const pool = getPool(event.address.toHex())
const user = getUser(event.params.caller.toHex())
const poolTx = getPoolTransaction(
event,
user.id,
PoolTransactionType.EXIT,
event.logIndex
)
const poolTx = getPoolTransaction(event, user.id, PoolTransactionType.EXIT)
pool.transactionCount = pool.transactionCount.plus(integer.ONE)
pool.joinCount = pool.joinCount.plus(integer.ONE)
@ -119,12 +109,7 @@ export function handleExit(event: LOG_EXIT): void {
export function handleSwap(event: LOG_SWAP): void {
const pool = getPool(event.address.toHex())
const user = getUser(event.params.caller.toHex())
const poolTx = getPoolTransaction(
event,
user.id,
PoolTransactionType.SWAP,
event.logIndex
)
const poolTx = getPoolTransaction(event, user.id, PoolTransactionType.SWAP)
pool.transactionCount = pool.transactionCount.plus(integer.ONE)
pool.joinCount = pool.joinCount.plus(integer.ONE)
@ -242,8 +227,7 @@ export function handleSetup(event: LOG_SETUP): void {
const poolTx = getPoolTransaction(
event,
fromUser.id,
PoolTransactionType.SETUP,
event.logIndex
PoolTransactionType.SETUP
)
poolTx.type = PoolTransactionType.SETUP
poolTx.baseToken = token.id
@ -275,12 +259,7 @@ export function handlerBptTransfer(event: Transfer): void {
const toAddress = event.params.dst.toHexString()
const poolAddress = event.address.toHex()
const caller = getUser(event.transaction.from.toHex())
const poolTx = getPoolTransaction(
event,
caller.id,
PoolTransactionType.SWAP,
event.logIndex
)
const poolTx = getPoolTransaction(event, caller.id, PoolTransactionType.SWAP)
// btoken has 18 decimals
const ammount = weiToDecimal(event.params.amt.toBigDecimal(), 18)

View File

@ -4,7 +4,6 @@ import {
GlobalTotalFixedSwapPair,
GlobalTotalLiquidityPair,
GlobalTotalPoolSwapPair,
OPC,
Template
} from '../../@types/schema'
@ -26,15 +25,6 @@ export function getGlobalStats(): GlobalStatistic {
return globalStats
}
export function getOPC(): OPC {
let globalStats = OPC.load(GLOBAL_ID)
if (!globalStats) {
globalStats = new OPC(GLOBAL_ID)
globalStats.save()
}
return globalStats
}
export function getTemplates(): Template {
let templates = Template.load(GLOBAL_ID)
if (!templates) {

View File

@ -1,4 +1,4 @@
import { Address, BigDecimal, BigInt, ethereum } from '@graphprotocol/graph-ts'
import { Address, BigDecimal, ethereum } from '@graphprotocol/graph-ts'
import {
Pool,
PoolShare,
@ -19,20 +19,19 @@ export function getPoolShareId(
export function getPoolTransactionId(
txHash: string,
eventIndex: BigInt
userAddress: string
): string {
return `${txHash}-` + eventIndex.toString()
return `${txHash}-${userAddress}`
}
export function getPoolTransaction(
event: ethereum.Event,
userAddress: string,
type: string,
eventIndex: BigInt
type: string
): PoolTransaction {
const txId = getPoolTransactionId(
event.transaction.hash.toHexString(),
eventIndex
userAddress
)
let poolTx = PoolTransaction.load(txId)
@ -46,7 +45,6 @@ export function getPoolTransaction(
poolTx.timestamp = event.block.timestamp.toI32()
poolTx.tx = event.transaction.hash.toHex()
poolTx.eventIndex = eventIndex
poolTx.block = event.block.number.toI32()
poolTx.gasPrice = gweiToEth(event.transaction.gasPrice.toBigDecimal())

View File

@ -51,12 +51,6 @@ dataSources:
eventHandlers:
- event: NewPool(indexed address,bool)
handler: handleNewPool
- event: TokenAdded(indexed address,indexed address)
handler: handleTokenAdded
- event: TokenRemoved(indexed address,indexed address)
handler: handleTokenRemoved
- event: OPCFeeChanged(indexed address,uint256,uint256,uint256,uint256)
handler: handleOPCFeeChanged
- event: SSContractAdded(indexed address,indexed address)
handler: handleSSContractAdded
- event: SSContractRemoved(indexed address,indexed address)
@ -113,8 +107,6 @@ templates:
handler: handleRemovedPaymentManager
- event: CleanedPermissions(indexed address,uint256,uint256)
handler: handleCleanedPermissions
- event: ProviderFee(indexed address,indexed address,uint256,bytes,uint8,bytes32,bytes32,uint256)
handler: handleProviderFee
- name: BPool
kind: ethereum/contract