From 8c89cee9c10847b07dbd75a902e8982cb102f9db Mon Sep 17 00:00:00 2001 From: Kent Theo Fourie <42357713+GundamDweeb@users.noreply.github.com> Date: Fri, 8 Jul 2022 22:15:14 +0200 Subject: [PATCH] stake additions to Vault --- README.md | 2 + src/helper.ts | 13 +---- src/inventory-staking.ts | 41 +++++++++----- src/tokenxweth-template.ts | 108 +++++++++++++++++++++++-------------- 4 files changed, 98 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index b09fe2a..6af70bc 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,8 @@ eventHandlers: handler: handleFeesReceived - event: PoolUpdated(uint256,address) handler: handlePoolUpdated + - event: PoolCreated(uint256,address) + handler: handleCreated ``` **TokenX & TokenXWeth** diff --git a/src/helper.ts b/src/helper.ts index feaa2a7..11ce182 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -93,25 +93,14 @@ export function getOrUpdateVault( export function getPoolShare( vaultAddress: Address, - vaultId: string, userAddress: Address -): PoolShare { +): PoolShare | null { let poolShare = PoolShare.load( vaultAddress .toHexString() .concat("-") .concat(userAddress.toHexString()) ); - if (!poolShare) { - poolShare = createOrUpdatePoolShare( - vaultAddress, - vaultId, - userAddress, - BigInt.fromI32(0), - BigInt.fromI32(0) - ); - return poolShare; - } return poolShare; } diff --git a/src/inventory-staking.ts b/src/inventory-staking.ts index b67644e..babe205 100644 --- a/src/inventory-staking.ts +++ b/src/inventory-staking.ts @@ -16,6 +16,7 @@ import { updateOrCreateUserVaultFeeAggregate, calculateEarningAmount, getOrCreateToken, + createOrUpdatePoolShare, } from "./helper"; export function handleFeesReceived(event: FeesReceived): void { let vault = getVaultFromId(event.params.vaultId); @@ -72,17 +73,27 @@ export function handleDeposit(event: Deposit): void { vault.save(); let poolShare = getPoolShare( Address.fromBytes(vault.address), - vault.id, event.params.sender ); - poolShare.inventoryShare = poolShare.inventoryShare.plus( - event.params.xTokenAmount.toBigDecimal() - ); - poolShare.save(); - var shares = vault.shares; - shares.push(poolShare.id); - vault.shares = shares; - vault.save(); + if(poolShare){ + poolShare.inventoryShare = poolShare.inventoryShare.plus( + event.params.xTokenAmount.toBigDecimal() + ); + poolShare.save(); + } + else { + poolShare = createOrUpdatePoolShare( + Address.fromBytes(vault.address), + vault.id, + event.params.sender, + event.params.xTokenAmount, + BigInt.fromI32(0) + ); + var shares = vault.shares; + shares.push(poolShare.id); + vault.shares = shares; + vault.save(); + } } } @@ -96,13 +107,15 @@ export function handleWithdraw(event: Withdraw): void { vault.save(); let poolShare = getPoolShare( Address.fromBytes(vault.address), - vault.id, event.params.sender ); - poolShare.inventoryShare = poolShare.inventoryShare.minus( - event.params.xTokenAmount.toBigDecimal() - ); - poolShare.save(); + if(poolShare){ + poolShare.inventoryShare = poolShare.inventoryShare.minus( + event.params.xTokenAmount.toBigDecimal() + ); + poolShare.save(); + } + } } diff --git a/src/tokenxweth-template.ts b/src/tokenxweth-template.ts index 9a812fc..47e5511 100644 --- a/src/tokenxweth-template.ts +++ b/src/tokenxweth-template.ts @@ -1,8 +1,9 @@ -import { Address, BigDecimal, log } from "@graphprotocol/graph-ts"; +import { Address, BigDecimal, log, BigInt } from "@graphprotocol/graph-ts"; import { Token, Vault } from "../generated/schema"; import { Transfer } from "../generated/templates/TokenXWeth/ERC20"; import { ADDRESS_ZERO, + createOrUpdatePoolShare, getOrCreateUser, getPoolShare, } from "./helper"; @@ -20,17 +21,28 @@ export function handleTransfer(event: Transfer): void { vault.save(); let poolShare = getPoolShare( Address.fromBytes(vault.address), - vault.id, event.params.to ); - poolShare.liquidityShare = poolShare.liquidityShare.plus( - event.params.value.toBigDecimal() - ); - poolShare.save(); - var shares = vault.shares; - shares.push(poolShare.id); - vault.shares = shares; - vault.save(); + if(poolShare){ + poolShare.liquidityShare = poolShare.liquidityShare.plus( + event.params.value.toBigDecimal() + ); + poolShare.save(); + } + else { + poolShare = createOrUpdatePoolShare( + Address.fromBytes(vault.address), + vault.id, + event.params.to, + BigInt.fromI32(0), + event.params.value + ); + var shares = vault.shares; + shares.push(poolShare.id); + vault.shares = shares; + vault.save(); + } + log.info("Deposit LP - Vault = {} - txHash = {}", [ vault.id, event.transaction.hash.toHexString(), @@ -42,44 +54,60 @@ export function handleTransfer(event: Transfer): void { vault.save(); let poolShare = getPoolShare( Address.fromBytes(vault.address), - vault.id, event.params.from ); - poolShare.liquidityShare = poolShare.liquidityShare.minus( - event.params.value.toBigDecimal() - ); - poolShare.save(); - log.info("Withdraw LP - Vault = {} - txHash = {}", [ - vault.id, - event.transaction.hash.toHexString(), - ]); + if(poolShare){ + poolShare.liquidityShare = poolShare.liquidityShare.minus( + event.params.value.toBigDecimal() + ); + poolShare.save(); + log.info("Withdraw LP - Vault = {} - txHash = {}", [ + vault.id, + event.transaction.hash.toHexString(), + ]); + } } else { let userSenderPoolShare = getPoolShare( Address.fromBytes(vault.address), - vault.id, event.params.from ); - let transferAmount = event.params.value.toBigDecimal(); - if ( - userSenderPoolShare.liquidityShare != BigDecimal.fromString("0") - ) { - userSenderPoolShare.liquidityShare = userSenderPoolShare.liquidityShare.minus( - transferAmount - ); - userSenderPoolShare.save(); + if(userSenderPoolShare){ + let transferAmount = event.params.value.toBigDecimal(); + if ( + userSenderPoolShare.liquidityShare != BigDecimal.fromString("0") + ) { + userSenderPoolShare.liquidityShare = userSenderPoolShare.liquidityShare.minus( + transferAmount + ); + userSenderPoolShare.save(); + } + getOrCreateUser(event.params.to); + let userReceiverPoolShare = getPoolShare( + Address.fromBytes(vault.address), + event.params.to + ); + if(userReceiverPoolShare) { + userReceiverPoolShare.liquidityShare = userReceiverPoolShare.liquidityShare.plus( + transferAmount + ); + userReceiverPoolShare.save(); + } + else { + userReceiverPoolShare = createOrUpdatePoolShare( + Address.fromBytes(vault.address), + vault.id, + event.params.to, + BigInt.fromI32(0), + event.params.value + ); + userReceiverPoolShare.save(); + var shares = vault.shares; + shares.push(userReceiverPoolShare.id); + vault.shares = shares; + vault.save(); + } } - getOrCreateUser(event.params.to); - let userReceiverPoolShare = getPoolShare( - Address.fromBytes(vault.address), - vault.id, - event.params.to - ); - userReceiverPoolShare.liquidityShare = userReceiverPoolShare.liquidityShare.plus( - transferAmount - ); - userReceiverPoolShare.save(); - - } + } } } }