Skip to content

Commit

Permalink
stake additions to Vault
Browse files Browse the repository at this point in the history
  • Loading branch information
GundamDweeb committed Jul 8, 2022
1 parent e857695 commit 8c89cee
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 66 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ eventHandlers:
handler: handleFeesReceived
- event: PoolUpdated(uint256,address)
handler: handlePoolUpdated
- event: PoolCreated(uint256,address)
handler: handleCreated
```

**TokenX & TokenXWeth**
Expand Down
13 changes: 1 addition & 12 deletions src/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
41 changes: 27 additions & 14 deletions src/inventory-staking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
updateOrCreateUserVaultFeeAggregate,
calculateEarningAmount,
getOrCreateToken,
createOrUpdatePoolShare,
} from "./helper";
export function handleFeesReceived(event: FeesReceived): void {
let vault = getVaultFromId(event.params.vaultId);
Expand Down Expand Up @@ -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();
}
}
}

Expand All @@ -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();
}

}
}

Expand Down
108 changes: 68 additions & 40 deletions src/tokenxweth-template.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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(),
Expand All @@ -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();

}
}
}
}
}

0 comments on commit 8c89cee

Please sign in to comment.