Skip to content

Commit

Permalink
subgraph: modify UpdatedStalkPerBdvPerSeason handler to only update w…
Browse files Browse the repository at this point in the history
…hitelist token settings
  • Loading branch information
soilking committed Apr 15, 2024
1 parent 8a9caab commit b75dbf2
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 46 deletions.
38 changes: 34 additions & 4 deletions projects/subgraph-beanstalk/src/GaugeHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,27 @@ export function handleWhitelistToken_BIP42(event: WhitelistToken): void {
siloSettings.updatedAt = event.block.timestamp;
siloSettings.save();

loadWhitelistTokenHourlySnapshot(event.params.token, currentSeason(event.address), event.block.timestamp);
loadWhitelistTokenDailySnapshot(event.params.token, event.block.timestamp);
let hourly = loadWhitelistTokenHourlySnapshot(event.params.token, currentSeason(event.address), event.block.timestamp);
hourly.selector = siloSettings.selector;
hourly.stalkEarnedPerSeason = siloSettings.stalkEarnedPerSeason;
hourly.stalkIssuedPerBdv = siloSettings.stalkIssuedPerBdv;
hourly.gaugePoints = siloSettings.gaugePoints;
hourly.gpSelector = siloSettings.gpSelector;
hourly.lwSelector = siloSettings.lwSelector;
hourly.optimalPercentDepositedBdv = siloSettings.optimalPercentDepositedBdv;
hourly.updatedAt = siloSettings.updatedAt;
hourly.save();

let daily = loadWhitelistTokenDailySnapshot(event.params.token, event.block.timestamp);
daily.selector = siloSettings.selector;
daily.stalkEarnedPerSeason = siloSettings.stalkEarnedPerSeason;
daily.stalkIssuedPerBdv = siloSettings.stalkIssuedPerBdv;
daily.gaugePoints = siloSettings.gaugePoints;
daily.gpSelector = siloSettings.gpSelector;
daily.lwSelector = siloSettings.lwSelector;
daily.optimalPercentDepositedBdv = siloSettings.optimalPercentDepositedBdv;
daily.updatedAt = siloSettings.updatedAt;
daily.save();
}

export function handleUpdateGaugeSettings(event: UpdateGaugeSettings): void {
Expand All @@ -137,6 +156,17 @@ export function handleUpdateGaugeSettings(event: UpdateGaugeSettings): void {
siloSettings.updatedAt = event.block.timestamp;
siloSettings.save();

loadWhitelistTokenHourlySnapshot(event.params.token, currentSeason(event.address), event.block.timestamp);
loadWhitelistTokenDailySnapshot(event.params.token, event.block.timestamp);
let hourly = loadWhitelistTokenHourlySnapshot(event.params.token, currentSeason(event.address), event.block.timestamp);
hourly.gpSelector = siloSettings.gpSelector;
hourly.lwSelector = siloSettings.lwSelector;
hourly.optimalPercentDepositedBdv = siloSettings.optimalPercentDepositedBdv;
hourly.updatedAt = siloSettings.updatedAt;
hourly.save();

let daily = loadWhitelistTokenDailySnapshot(event.params.token, event.block.timestamp);
daily.gpSelector = siloSettings.gpSelector;
daily.lwSelector = siloSettings.lwSelector;
daily.optimalPercentDepositedBdv = siloSettings.optimalPercentDepositedBdv;
daily.updatedAt = siloSettings.updatedAt;
daily.save();
}
53 changes: 11 additions & 42 deletions projects/subgraph-beanstalk/src/SiloHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ import {
loadSiloWithdraw,
loadSiloDeposit,
loadSiloDepositV3,
loadWhitelistTokenSetting
loadWhitelistTokenSetting,
loadWhitelistTokenHourlySnapshot,
loadWhitelistTokenDailySnapshot
} from "./utils/SiloEntities";
import {
AddDeposit as AddDepositEntity,
Expand Down Expand Up @@ -917,55 +919,22 @@ export function handleWhitelistToken(event: WhitelistToken): void {
rawEvent.save();
}

// TODO: replace this implementation with simply updating the whitelist token settings + hourly/daily snapshots
export function handleUpdatedStalkPerBdvPerSeason(event: UpdatedStalkPerBdvPerSeason): void {
let siloSettings = loadWhitelistTokenSetting(event.params.token);

siloSettings.milestoneSeason = event.params.season.toI32();
siloSettings.stalkEarnedPerSeason = event.params.stalkEarnedPerSeason;
siloSettings.updatedAt = event.block.timestamp;
siloSettings.save();

/// Capture deltas due to new stalk amount.

let beanstalk = loadBeanstalk(BEANSTALK);
let beanstalkSilo = loadSilo(BEANSTALK);

// Update protocol level metrics
let newGrownStalkAmount = ZERO_BI;

for (let i = 0; i < beanstalkSilo.whitelistedTokens.length; i++) {
let asset = loadSiloAsset(BEANSTALK, Address.fromString(beanstalkSilo.whitelistedTokens[i]));
let assetSettings = loadWhitelistTokenSetting(Address.fromString(beanstalkSilo.whitelistedTokens[i]));

newGrownStalkAmount = newGrownStalkAmount.plus(
asset.depositedBDV.times(assetSettings.stalkEarnedPerSeason).div(BigInt.fromI32(1000000))
);
}

beanstalkSilo.grownStalkPerBdvPerSeason = newGrownStalkAmount;
beanstalkSilo.save();

// Update farmer level metrics

for (let i = 0; i < beanstalk.activeFarmers.length; i++) {
newGrownStalkAmount = ZERO_BI;

let account = Address.fromString(beanstalk.activeFarmers[i]);
let farmerSilo = loadSilo(account);
let hourly = loadWhitelistTokenHourlySnapshot(event.params.token, event.params.season.toI32(), event.block.timestamp);
hourly.milestoneSeason = siloSettings.milestoneSeason;
hourly.stalkEarnedPerSeason = siloSettings.stalkEarnedPerSeason;
hourly.save();

for (let i = 0; i < beanstalkSilo.whitelistedTokens.length; i++) {
let asset = loadSiloAsset(account, Address.fromString(beanstalkSilo.whitelistedTokens[i]));
let assetSettings = loadWhitelistTokenSetting(Address.fromString(beanstalkSilo.whitelistedTokens[i]));

newGrownStalkAmount = newGrownStalkAmount.plus(
asset.depositedBDV.times(assetSettings.stalkEarnedPerSeason).div(BigInt.fromI32(1000000))
);
}

farmerSilo.grownStalkPerBdvPerSeason = newGrownStalkAmount;
farmerSilo.save();
}
let daily = loadWhitelistTokenDailySnapshot(event.params.token, event.block.timestamp);
daily.milestoneSeason = siloSettings.milestoneSeason;
daily.stalkEarnedPerSeason = siloSettings.stalkEarnedPerSeason;
daily.save();
}

export function handleWhitelistToken_V3(event: WhitelistToken_V3): void {
Expand Down

0 comments on commit b75dbf2

Please sign in to comment.