Fix poolSnapshot and fixed rate balance (#357)

* fix

* fix lint

* fix import
This commit is contained in:
mihaisc 2022-02-23 19:12:51 +02:00 committed by GitHub
parent 5918c8b035
commit 48ba47be52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 334 additions and 26 deletions

1
package-lock.json generated
View File

@ -5,7 +5,6 @@
"requires": true,
"packages": {
"": {
"name": "ocean-subgraph",
"version": "1.2.0",
"license": "Apache-2.0",
"dependencies": {

View File

@ -1,4 +1,3 @@
import { log } from '@graphprotocol/graph-ts'
import { NFTCreated, TokenCreated } from '../@types/ERC721Factory/ERC721Factory'
import { decimal } from './utils/constants'
import { weiToDecimal } from './utils/generic'
@ -8,7 +7,6 @@ import { getToken, getNftToken } from './utils/tokenUtils'
import { addDatatoken } from './utils/globalUtils'
export function handleNftCreated(event: NFTCreated): void {
log.warning('nft handleNftCreated {}', [event.params.tokenURI.toString()])
// const nft = new Nft(event.params.newTokenAddress.toHexString())
const nft = getNftToken(event.params.newTokenAddress)
const user = getUser(event.params.admin.toHexString())

View File

@ -7,7 +7,8 @@ import {
ExchangeMintStateChanged,
ExchangeRateChanged,
Swapped,
PublishMarketFeeChanged
PublishMarketFeeChanged,
TokenCollected
} from '../@types/templates/FixedRateExchange/FixedRateExchange'
import {
FixedRateExchange,
@ -218,3 +219,21 @@ export function handlePublishMarketFeeChanged(
fixedRateExchange.save()
}
}
export function handleTokenCollected(event: TokenCollected): void {
const fixedRateId = getFixedRateGraphID(
event.params.exchangeId.toHexString(),
event.address
)
const fixedRateExchange = getFixedRateExchange(fixedRateId)
if (event.params.token.toHexString() == fixedRateExchange.baseToken) {
const baseToken = getToken(event.params.token, false)
fixedRateExchange.baseTokenBalance =
fixedRateExchange.baseTokenBalance.minus(
weiToDecimal(event.params.amount.toBigDecimal(), baseToken.decimals)
)
fixedRateExchange.save()
}
}

View File

@ -36,7 +36,7 @@ export function handleJoin(event: LOG_JOIN): void {
pool.joinCount = pool.joinCount.plus(integer.ONE)
// get token, update pool transaction, poolSnapshot
const poolSnapshot = getPoolSnapshot(pool.id, event.block.timestamp.toI32())
const token = getToken(event.params.tokenIn, false)
const ammount = weiToDecimal(
event.params.tokenAmountIn.toBigDecimal(),
@ -45,24 +45,36 @@ export function handleJoin(event: LOG_JOIN): void {
if (token.isDatatoken) {
poolTx.datatoken = token.id
poolTx.datatokenValue = ammount
if (pool.isFinalized) {
const poolSnapshot = getPoolSnapshot(
pool.id,
event.block.timestamp.toI32()
)
poolSnapshot.datatokenLiquidity =
poolSnapshot.datatokenLiquidity.plus(ammount)
poolSnapshot.datatokenLiquidity =
poolSnapshot.datatokenLiquidity.plus(ammount)
poolSnapshot.save()
}
pool.datatokenLiquidity = pool.datatokenLiquidity.plus(ammount)
} else {
poolTx.baseToken = token.id
poolTx.baseTokenValue = ammount
poolSnapshot.baseTokenLiquidity =
poolSnapshot.baseTokenLiquidity.plus(ammount)
if (pool.isFinalized) {
const poolSnapshot = getPoolSnapshot(
pool.id,
event.block.timestamp.toI32()
)
poolSnapshot.baseTokenLiquidity =
poolSnapshot.baseTokenLiquidity.plus(ammount)
poolSnapshot.save()
}
pool.baseTokenLiquidity = pool.baseTokenLiquidity.plus(ammount)
addLiquidity(token.id, ammount)
}
poolSnapshot.save()
poolTx.save()
pool.save()
}
@ -225,15 +237,19 @@ export function handleSetup(event: LOG_SETUP): void {
poolTx.type = PoolTransactionType.SETUP
poolTx.baseToken = token.id
poolTx.datatoken = datatoken.id
pool.save()
poolTx.save()
const poolSnapshot = getPoolSnapshot(pool.id, event.block.timestamp.toI32())
poolSnapshot.spotPrice = spotPrice
poolSnapshot.baseTokenLiquidity = pool.baseTokenLiquidity
poolSnapshot.datatokenLiquidity = pool.datatokenLiquidity
poolSnapshot.totalShares = pool.totalShares
poolTx.save()
poolSnapshot.save()
const globalStats = getGlobalStats()
globalStats.poolCount = globalStats.poolCount + 1
globalStats.save()
pool.save()
datatoken.save()
}
@ -243,10 +259,6 @@ export function handlerBptTransfer(event: Transfer): void {
const poolAddress = event.address.toHex()
const caller = getUser(event.transaction.from.toHex())
const poolTx = getPoolTransaction(event, caller.id, PoolTransactionType.SWAP)
const poolSnapshot = getPoolSnapshot(
poolAddress,
event.block.timestamp.toI32()
)
// btoken has 18 decimals
const ammount = weiToDecimal(event.params.amt.toBigDecimal(), 18)
@ -261,7 +273,15 @@ export function handlerBptTransfer(event: Transfer): void {
pool.totalShares = pool.totalShares.plus(ammount)
// check tx?
poolSnapshot.totalShares = pool.totalShares
if (pool.isFinalized) {
const poolSnapshot = getPoolSnapshot(
poolAddress,
event.block.timestamp.toI32()
)
poolSnapshot.totalShares = pool.totalShares
poolSnapshot.save()
}
pool.save()
} else {
if (poolAddress != fromAddress) {
@ -275,7 +295,14 @@ export function handlerBptTransfer(event: Transfer): void {
// remove
const pool = getPool(poolAddress)
pool.totalShares = pool.totalShares.minus(ammount)
poolSnapshot.totalShares = pool.totalShares
if (pool.isFinalized) {
const poolSnapshot = getPoolSnapshot(
poolAddress,
event.block.timestamp.toI32()
)
poolSnapshot.totalShares = pool.totalShares
poolSnapshot.save()
}
pool.save()
} else {
if (poolAddress != toAddress) {
@ -286,7 +313,6 @@ export function handlerBptTransfer(event: Transfer): void {
}
poolTx.save()
poolSnapshot.save()
}
export function handlePublishMarketFeeChanged(

View File

@ -99,7 +99,6 @@ export function createPoolSnapshot(
const snapshotId = getPoolSnapshotId(poolAddress, timestamp)
const pool = getPool(poolAddress)
const snapshot = new PoolSnapshot(snapshotId)
snapshot.pool = poolAddress

View File

@ -28,7 +28,7 @@ dataSources:
handler: handleNftCreated
- event: TokenCreated(indexed address,indexed address,string,string,uint256,address)
handler: handleNewToken
- kind: ethereum/contract
name: FactoryRouter
network: __NETWORK__
@ -71,7 +71,6 @@ dataSources:
handler: handleDispenserContractRemoved
templates:
- name: ERC20Template
kind: ethereum/contract
network: __NETWORK__
@ -262,7 +261,9 @@ templates:
handler: handleSwap
- event: PublishMarketFeeChanged(indexed bytes32,address,address,uint256)
handler: handlePublishMarketFeeChanged
- event: TokenCollected(indexed bytes32,indexed address,indexed address,uint256)
handler: handleTokenCollected
- name: SSContract
kind: ethereum/contract
network: __NETWORK__
@ -277,9 +278,9 @@ templates:
- SSContract
abis:
- name: SSContract
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/ssContracts/SideStaking.sol/SideStaking.json
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/ssContracts/SideStaking.sol/SideStaking.json
eventHandlers:
- event: VestingCreated(indexed address,indexed address,uint256,uint256)
handler: handleVestingCreated
- event: Vesting(indexed address,indexed address,indexed address,uint256)
handler: handleVesting
handler: handleVesting

266
subgraph.yaml Normal file
View File

@ -0,0 +1,266 @@
specVersion: 0.0.3
description: Ocean provides data sharing through IDOs
repository: https://github.com/oceanprotocol/ocean-subgraph
schema:
file: ./schema.graphql
dataSources:
- kind: ethereum/contract
name: ERC721Factory
network: rinkeby
source:
address: '0x1b1FE18bE79249AE8A30b3cEef03d70ca299a75b'
abi: ERC721Factory
startBlock: 10182337
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/erc721Factory.ts
entities:
- ERC721Factory
abis:
- name: ERC721Factory
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: NFTCreated(indexed address,indexed address,string,address,string,string)
handler: handleNftCreated
- event: TokenCreated(indexed address,indexed address,string,string,uint256,address)
handler: handleNewToken
- kind: ethereum/contract
name: FactoryRouter
network: rinkeby
source:
address: '0x6CE85a8B9dF0aEbd6deE3593d4E9cde7398ff842'
abi: FactoryRouter
startBlock: 10182337
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/factoryRouter.ts
entities:
- FactoryRouter
abis:
- name: FactoryRouter
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/FactoryRouter.sol/FactoryRouter.json
- name: ERC20
file: ./abis/ERC20.json
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)
handler: handleSSContractRemoved
- event: FixedRateContractAdded(indexed address,indexed address)
handler: handleFixedRateContractAdded
- event: FixedRateContractRemoved(indexed address,indexed address)
handler: handleFixedRateContractRemoved
- event: DispenserContractAdded(indexed address,indexed address)
handler: handleDispenserContractAdded
- event: DispenserContractRemoved(indexed address,indexed address)
handler: handleDispenserContractRemoved
templates:
- name: ERC20Template
kind: ethereum/contract
network: rinkeby
source:
abi: ERC20Template
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/erc20Templates.ts
entities:
- ERC20Template
abis:
- name: ERC20Template
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/templates/ERC20Template.sol/ERC20Template.json
- name: ERC20TemplateEnterprise
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/templates/ERC20TemplateEnterprise.sol/ERC20TemplateEnterprise.json
- name: ERC20
file: ./abis/ERC20.json
- name: ERC20Roles
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/utils/ERC20Roles.sol/ERC20Roles.json
eventHandlers:
- event: OrderStarted(indexed address,address,uint256,uint256,uint256,indexed address,uint256)
handler: handleOrderStarted
- event: NewPaymentCollector(indexed address,indexed address,uint256,uint256)
handler: handleNewPaymentCollector
- event: PublishMarketFee(indexed address,indexed address,uint256)
handler: handlePublishMarketFee
- event: PublishMarketFeeChanged(address,address,address,uint256)
handler: handlePublishMarketFeeChanged
- event: AddedMinter(indexed address,indexed address,uint256,uint256)
handler: handleAddedMinter
- event: AddedPaymentManager(indexed address,indexed address,uint256,uint256)
handler: handleAddedPaymentManager
- event: RemovedMinter(indexed address,indexed address,uint256,uint256)
handler: handleRemovedMinter
- event: RemovedPaymentManager(indexed address,indexed address,uint256,uint256)
handler: handleRemovedPaymentManager
- event: CleanedPermissions(indexed address,uint256,uint256)
handler: handleCleanedPermissions
- name: BPool
kind: ethereum/contract
network: rinkeby
source:
abi: BPool
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/pool.ts
entities:
- BPool
abis:
- name: BPool
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BPool.sol/BPool.json
- name: BToken
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BToken.sol/BToken.json
- name: BMath
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/balancer/BMath.sol/BMath.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: LOG_SWAP(indexed address,indexed address,indexed address,uint256,uint256,uint256)
handler: handleSwap
- event: LOG_JOIN(indexed address,indexed address,uint256,uint256)
handler: handleJoin
- event: LOG_EXIT(indexed address,indexed address,uint256,uint256)
handler: handleExit
- event: LOG_SETUP(indexed address,indexed address,uint256,uint256,indexed address,uint256,uint256)
handler: handleSetup
- event: Transfer(indexed address,indexed address,uint256)
handler: handlerBptTransfer
- event: PublishMarketFeeChanged(address,address,uint256)
handler: handlePublishMarketFeeChanged
- event: SwapFeeChanged(address,uint256)
handler: handleSwapFeeChanged
- name: ERC721Template
kind: ethereum/contract
network: rinkeby
source:
abi: ERC721Template
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/nftUpdate.ts
entities:
- ERC721Template
abis:
- name: ERC721Template
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/templates/ERC721Template.sol/ERC721Template.json
- name: ERC721RolesAddress
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/utils/ERC721RolesAddress.sol/ERC721RolesAddress.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: MetadataCreated(indexed address,uint8,string,bytes,bytes,bytes32,uint256,uint256)
handler: handleMetadataCreated
- event: MetadataUpdated(indexed address,uint8,string,bytes,bytes,bytes32,uint256,uint256)
handler: handleMetadataUpdated
- event: MetadataState(indexed address,uint8,uint256,uint256)
handler: handleMetadataState
- event: TokenURIUpdate(indexed address,string,uint256,uint256,uint256)
handler: handleTokenUriUpdate
- event: AddedManager(indexed address,indexed address,uint256,uint256)
handler: handleAddedManager
- event: AddedTo725StoreList(indexed address,indexed address,uint256,uint256)
handler: handleAddedTo725StoreList
- event: AddedToCreateERC20List(indexed address,indexed address,uint256,uint256)
handler: handleAddedToCreateERC20List
- event: AddedToMetadataList(indexed address,indexed address,uint256,uint256)
handler: handleAddedToMetadataList
- event: RemovedFrom725StoreList(indexed address,indexed address,uint256,uint256)
handler: handleRemovedFrom725StoreList
- event: RemovedFromCreateERC20List(indexed address,indexed address,uint256,uint256)
handler: handleRemovedFromCreateERC20List
- event: RemovedFromMetadataList(indexed address,indexed address,uint256,uint256)
handler: handleRemovedFromMetadataList
- event: RemovedManager(indexed address,indexed address,uint256,uint256)
handler: handleRemovedManager
- event: CleanedPermissions(indexed address,uint256,uint256)
handler: handleCleanedPermissions
- name: Dispenser
kind: ethereum/contract
network: rinkeby
source:
abi: Dispenser
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/dispenser.ts
entities:
- Dispenser
abis:
- name: Dispenser
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/dispenser/Dispenser.sol/Dispenser.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: DispenserCreated(indexed address,indexed address,uint256,uint256,address)
handler: handleNewDispenser
- event: DispenserActivated(indexed address)
handler: handleActivate
- event: DispenserDeactivated(indexed address)
handler: handleDeactivate
- event: DispenserAllowedSwapperChanged(indexed address,indexed address)
handler: handleAllowedSwapperChanged
- event: TokensDispensed(indexed address,indexed address,uint256)
handler: handleTokensDispensed
- event: OwnerWithdrawed(indexed address,indexed address,uint256)
handler: handleOwnerWinthdraw
- name: FixedRateExchange
kind: ethereum/contract
network: rinkeby
source:
abi: FixedRateExchange
mapping:
kind: ethereum/events
apiVersion: 0.0.6
language: wasm/assemblyscript
file: ./src/mappings/fixedRateExchange.ts
entities:
- FixedRateExchange
abis:
- name: FixedRateExchange
file: ./node_modules/@oceanprotocol/contracts/artifacts/contracts/pools/fixedRate/FixedRateExchange.sol/FixedRateExchange.json
- name: ERC20
file: ./abis/ERC20.json
eventHandlers:
- event: ExchangeCreated(indexed bytes32,indexed address,indexed address,address,uint256)
handler: handleExchangeCreated
- event: ExchangeRateChanged(indexed bytes32,indexed address,uint256)
handler: handleRateChange
- event: ExchangeMintStateChanged(indexed bytes32,indexed address,bool)
handler: handleMintStateChanged
- event: ExchangeActivated(indexed bytes32,indexed address)
handler: handleActivated
- event: ExchangeDeactivated(indexed bytes32,indexed address)
handler: handleDeactivated
- event: ExchangeAllowedSwapperChanged(indexed bytes32,indexed address)
handler: handleAllowedSwapperChanged
- event: Swapped(indexed bytes32,indexed address,uint256,uint256,address,uint256,uint256,uint256)
handler: handleSwap
- event: PublishMarketFeeChanged(indexed bytes32,address,address,uint256)
handler: handlePublishMarketFeeChanged
- event: TokenCollected(indexed bytes32,indexed address,indexed address,uint256)
handler: handleTokenCollected