Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions src/aludelFactory.ts
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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()]);
Expand All @@ -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 {
Expand Down
23 changes: 23 additions & 0 deletions src/aludelv1.5.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
21 changes: 19 additions & 2 deletions src/crucible.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {}', [aludelAddress.toString()])
} 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;

Expand Down
3 changes: 3 additions & 0 deletions subgraph.template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down