From 96ec6d8f114bf102b0805cab49b00875788b80b9 Mon Sep 17 00:00:00 2001 From: Ignacio Tirabasso Date: Fri, 21 Oct 2022 12:31:03 -0300 Subject: [PATCH 1/4] create FactoryRewardProgram entities when a program is manually added --- src/aludelFactory.ts | 22 ++++++++++++++++++++-- src/aludelv1.5.ts | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/aludelFactory.ts b/src/aludelFactory.ts index dd773fd..5029285 100644 --- a/src/aludelFactory.ts +++ b/src/aludelFactory.ts @@ -1,8 +1,9 @@ -import { dataSource, log, store } from "@graphprotocol/graph-ts"; +import { BigInt, dataSource, log, store } from "@graphprotocol/graph-ts"; import { AludelFactory, ProgramAdded, ProgramDelisted, TemplateAdded, TemplateUpdated } from "../generated/AludelFactory/AludelFactory"; import { RewardProgram, Template } from "../generated/schema"; import { AludelV15Template } from "../generated/templates"; import { AludelV15 } from "../generated/templates/AludelV15Template/AludelV15"; +import { registerVaultFactory } from "./aludelv1.5"; import { getAludelId, getIdFromAddress } from "./utils"; export function handleProgramAdded(event: ProgramAdded): void { @@ -25,6 +26,7 @@ export function handleProgramAdded(event: ProgramAdded): void { } let aludel = AludelV15.bind(aludelAddress) + let owner = aludel.try_owner() if (owner.reverted) { log.error("handleInstanceAdded: failed get program's owner: {}", [aludelAddress.toHexString()]); @@ -37,7 +39,23 @@ export function handleProgramAdded(event: ProgramAdded): void { rewardProgram.startTime = data.value.startTime rewardProgram.name = data.value.name rewardProgram.save() - } + + let factoryLength = aludel.try_getVaultFactorySetLength() + if (factoryLength.reverted) { + log.error(": unable to get vault factory length in {}", [aludelAddress.toHexString()]); + return; + } + for (let index = 0; index < factoryLength.value.toI32(); index++) { + let factoryAddress = aludel.try_getVaultFactoryAtIndex(BigInt.fromI32(index)) + if (factoryAddress.reverted) { + log.error(": unable to get vault factory address at index {} in {}", [index.toString(), aludelAddress.toHexString()]); + return; + } + registerVaultFactory(factoryAddress.value, aludelAddress); + } + +} + // we need a remove instance / delist aludel event emitted export function handleProgramDelisted(event: ProgramDelisted): void { diff --git a/src/aludelv1.5.ts b/src/aludelv1.5.ts index 7ed4fc3..6d1bcd1 100644 --- a/src/aludelv1.5.ts +++ b/src/aludelv1.5.ts @@ -113,6 +113,29 @@ export function handleRewardClaimedLegacy(event: RewardClaimedLegacy): void { _handleRewardClaimed(event, aludel, tokenAddress, amount, crucibleAddress); } +export function registerVaultFactory(factoryAddress: Address, programAddress: Address): void { + let factoryId = getIdFromAddress(factoryAddress) + let programId = getIdFromAddress(programAddress) + + let program = RewardProgram.load(programId) + if (program == null) { + log.error('unable to load program {}', [programId]) + return + } + + let factory = VaultFactory.load(factoryId) + if (factory == null) { + factory = new VaultFactory(factoryId) + factory.save() + } + + let id = programId.concat('-').concat(factoryId) + let programFactory = new ProgramVaultFactory(id) + programFactory.rewardProgram = programId + programFactory.vaultFactory = factoryId + programFactory.save() + +} export function handleVaultFactoryRegistered(event: VaultFactoryRegistered): void { let factoryId = getIdFromAddress(event.params.factory) From bf02e75e1a6172324676f89a406f1582a66eaf04 Mon Sep 17 00:00:00 2001 From: Ignacio Tirabasso Date: Fri, 21 Oct 2022 21:19:41 -0300 Subject: [PATCH 2/4] create a RewardProgram on new stakes Pre-factory programs templates need to be created when a stake onto them is executed. --- src/crucible.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/crucible.ts b/src/crucible.ts index fa9367a..1febc67 100644 --- a/src/crucible.ts +++ b/src/crucible.ts @@ -8,14 +8,31 @@ import { BigInt, store, } from "@graphprotocol/graph-ts"; -import { CrucibleEntity, ERC20Token, Leaderboard, Lock, Stake, Unstake } from "../generated/schema"; -import {getCrucibleId, getLockId, getStakeId, getTokenId, getUnstakeId} from "./utils"; +import { CrucibleEntity, ERC20Token, Leaderboard, Lock, RewardProgram, Stake, Unstake } from "../generated/schema"; +import {getAludelId, getCrucibleId, getLockId, getStakeId, getTokenId, getUnstakeId} from "./utils"; import { createERC20Token } from "./erc20Token"; +import { AludelV15Template } from "../generated/templates"; +import { AludelV15 } from "../generated/templates/AludelV15Template/AludelV15"; export function handleLocked(event: Locked): void { let crucibleId = getCrucibleId(event.address); let crucible = CrucibleEntity.load(crucibleId); + let aludelAddress = event.params.delegate + let maybeAludel = AludelV15.bind(aludelAddress) + // if this call reverts the delegate dont have a compatible abi with aludel. + let length = maybeAludel.try_getVaultFactorySetLength(); + if (length.reverted) { + log.warning('delegate is not an aludel', []) + } else { + let program = RewardProgram.load(getAludelId(aludelAddress)) + if (program == null) { + AludelV15Template.create(aludelAddress) + program = new RewardProgram(getAludelId(aludelAddress)) + program.save() + } + } + let delegate = event.params.delegate; let tokenAddress = event.params.token; From f251e69fbcef4c4e8d8a8c8684ea63c7bd602d86 Mon Sep 17 00:00:00 2001 From: Ignacio Tirabasso Date: Sat, 22 Oct 2022 02:14:37 -0300 Subject: [PATCH 3/4] include aludel abi in crucible template --- subgraph.template.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/subgraph.template.yaml b/subgraph.template.yaml index abfdf9a..bfd52f2 100644 --- a/subgraph.template.yaml +++ b/subgraph.template.yaml @@ -111,6 +111,9 @@ templates: file: ./abis/Crucible.json - name: ERC20 file: ./abis/ERC20.json + - name: AludelV15 + file: ./abis/AludelV15.json + eventHandlers: # event Locked(address delegate, address token, uint256 amount); From 8608ba2b7d7528565f97f4d65dddb93b01fd30de Mon Sep 17 00:00:00 2001 From: Ignacio Tirabasso Date: Sat, 21 Jan 2023 08:43:21 -0300 Subject: [PATCH 4/4] display delegate address in logs --- src/crucible.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crucible.ts b/src/crucible.ts index 1febc67..f88fe0b 100644 --- a/src/crucible.ts +++ b/src/crucible.ts @@ -23,7 +23,7 @@ export function handleLocked(event: Locked): void { // if this call reverts the delegate dont have a compatible abi with aludel. let length = maybeAludel.try_getVaultFactorySetLength(); if (length.reverted) { - log.warning('delegate is not an aludel', []) + log.warning('delegate is not an aludel: {}', [aludelAddress.toString()]) } else { let program = RewardProgram.load(getAludelId(aludelAddress)) if (program == null) {