diff --git a/package-lock.json b/package-lock.json index 3210a6d..b2c22df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "ocean-subgraph", "version": "1.2.0", "license": "Apache-2.0", "dependencies": { diff --git a/src/mappings/erc721Factory.ts b/src/mappings/erc721Factory.ts index 4640655..0604897 100644 --- a/src/mappings/erc721Factory.ts +++ b/src/mappings/erc721Factory.ts @@ -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()) diff --git a/src/mappings/fixedRateExchange.ts b/src/mappings/fixedRateExchange.ts index 855158e..352aef8 100644 --- a/src/mappings/fixedRateExchange.ts +++ b/src/mappings/fixedRateExchange.ts @@ -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() + } +} diff --git a/src/mappings/pool.ts b/src/mappings/pool.ts index a672824..36b3a56 100644 --- a/src/mappings/pool.ts +++ b/src/mappings/pool.ts @@ -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( diff --git a/src/mappings/utils/poolUtils.ts b/src/mappings/utils/poolUtils.ts index 95ae05a..760e74d 100644 --- a/src/mappings/utils/poolUtils.ts +++ b/src/mappings/utils/poolUtils.ts @@ -99,7 +99,6 @@ export function createPoolSnapshot( const snapshotId = getPoolSnapshotId(poolAddress, timestamp) const pool = getPool(poolAddress) - const snapshot = new PoolSnapshot(snapshotId) snapshot.pool = poolAddress diff --git a/subgraph.template.yaml b/subgraph.template.yaml index 567e79d..c4a0b00 100644 --- a/subgraph.template.yaml +++ b/subgraph.template.yaml @@ -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 \ No newline at end of file + handler: handleVesting diff --git a/subgraph.yaml b/subgraph.yaml new file mode 100644 index 0000000..8e332cc --- /dev/null +++ b/subgraph.yaml @@ -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 \ No newline at end of file