Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Commit

Permalink
feat(silo-finance): Add Incentive position on Ethereum (#2513)
Browse files Browse the repository at this point in the history
  • Loading branch information
wpoulin committed Apr 4, 2023
1 parent 535fe54 commit f0e8a1e
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 19 deletions.
Expand Up @@ -2,16 +2,33 @@ import { Inject } from '@nestjs/common';
import { BigNumberish } from 'ethers';

import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface';
import { SiloFinanceContractFactory, SiloIncentives } from '../contracts';
import { ContractPositionTemplatePositionFetcher } from '~position/template/contract-position.template.position-fetcher';
import { SiloFinanceDefinitionResolver } from './silo-finance.definition-resolver';
import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present';
import { MetaType } from '~position/position.interface';
import { ContractPositionTemplatePositionFetcher } from '~position/template/contract-position.template.position-fetcher';
import {
GetDataPropsParams,
GetDisplayPropsParams,
GetTokenBalancesParams,
} from '~position/template/contract-position.template.types';

export abstract class SiloFinanceIncentivesContractPositionfetcher extends ContractPositionTemplatePositionFetcher<SiloIncentives>
{
import { SiloFinanceContractFactory, SiloIncentives } from '../contracts';

import { SiloFinanceDefinitionResolver } from './silo-finance.definition-resolver';

export type SiloFinanceIncentivesContractPositionDefinition = {
address: string;
sTokenAddresses: string[];
};

export type SiloFinanceIncentivesContractPositionDataProps = {
sTokenAddresses: string[];
};

export abstract class SiloFinanceIncentivesContractPositionfetcher extends ContractPositionTemplatePositionFetcher<
SiloIncentives,
SiloFinanceIncentivesContractPositionDataProps,
SiloFinanceIncentivesContractPositionDefinition
> {
abstract incentivesAddress: string;

constructor(
Expand All @@ -27,8 +44,16 @@ export abstract class SiloFinanceIncentivesContractPositionfetcher extends Contr
return this.contractFactory.siloIncentives({ address, network: this.network });
}

async getDefinitions() {
return [{ address: this.incentivesAddress }]
async getDefinitions(): Promise<SiloFinanceIncentivesContractPositionDefinition[]> {
const appTokens = await this.appToolkit.getAppTokenPositions({
appId: this.appId,
network: this.network,
groupIds: ['s-token'],
});

const sTokenAddresses = appTokens.map(x => x.address);

return [{ address: this.incentivesAddress, sTokenAddresses }];
}

async getTokenDefinitions({ contract }) {
Expand All @@ -41,18 +66,27 @@ export abstract class SiloFinanceIncentivesContractPositionfetcher extends Contr
];
}

async getLabel() {
return 'Claimable Silo';
async getDataProps({
definition,
}: GetDataPropsParams<
SiloIncentives,
SiloFinanceIncentivesContractPositionDataProps,
SiloFinanceIncentivesContractPositionDefinition
>) {
return { sTokenAddresses: definition.sTokenAddresses };
}

async getTokenBalancesPerPosition({ address, contract }: GetTokenBalancesParams<SiloIncentives>): Promise<BigNumberish[]> {
const markets = await this.siloDefinitionResolver.getSiloDefinition(this.network);
if (!markets) return [];
async getLabel({ contractPosition }: GetDisplayPropsParams<SiloIncentives>) {
return `Claimable ${getLabelFromToken(contractPosition.tokens[0])}`;
}

const assets = markets.map(market => {
return market.marketAssets.map(marketAsset => { return marketAsset.sToken });
}).flat();
async getTokenBalancesPerPosition({
address,
contract,
contractPosition,
}: GetTokenBalancesParams<SiloIncentives, SiloFinanceIncentivesContractPositionDataProps>): Promise<BigNumberish[]> {
const sTokenAddresses = contractPosition.dataProps.sTokenAddresses;

return [await contract.getRewardsBalance(assets, address)];
return [await contract.getRewardsBalance(sTokenAddresses, address)];
}
}
}
@@ -0,0 +1,10 @@
import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator';

import { SiloFinanceIncentivesContractPositionfetcher } from '../common/silo-finance.incentives.contract-position-fetcher';

@PositionTemplate()
export class EthereumSiloFinanceIncentivesContractPositionfetcher extends SiloFinanceIncentivesContractPositionfetcher {
groupLabel = 'Incentives';

incentivesAddress = '0x6c1603ab6cecf89dd60c24530dde23f97da3c229';
}
6 changes: 4 additions & 2 deletions src/apps/silo-finance/silo-finance.module.ts
Expand Up @@ -3,13 +3,14 @@ import { Module } from '@nestjs/common';
import { AbstractApp } from '~app/app.dynamic-module';

import { ArbitrumDTokenTokenFetcher } from './arbitrum/silo-finance.d-token.token-fetcher';
import { ArbitrumSiloFinanceIncentivesContractPositionfetcher } from './arbitrum/silo-finance.incentives.contract-position-fetcher';
import { ArbitrumSTokenTokenFetcher } from './arbitrum/silo-finance.s-token.token-fetcher';
import { ArbitrumSiloFinanceSiloContractPositionFetcher } from './arbitrum/silo-finance.silo.contract-position-fetcher';
import { ArbitrumSPTokenTokenFetcher } from './arbitrum/silo-finance.sp-token.token-fetcher';
import { ArbitrumSiloFinanceIncentivesContractPositionfetcher } from './arbitrum/silo-finance.incentives.contract-position-fetcher';
import { SiloFinanceDefinitionResolver } from './common/silo-finance.definition-resolver';
import { SiloFinanceContractFactory } from './contracts';
import { EthereumDTokenTokenFetcher } from './ethereum/silo-finance.d-token.token-fetcher';
import { EthereumSiloFinanceIncentivesContractPositionfetcher } from './ethereum/silo-finance.incentives.contract-position-fetcher';
import { EthereumSTokenTokenFetcher } from './ethereum/silo-finance.s-token.token-fetcher';
import { EthereumSiloFinanceSiloContractPositionFetcher } from './ethereum/silo-finance.silo.contract-position-fetcher';
import { EthereumSPTokenTokenFetcher } from './ethereum/silo-finance.sp-token.token-fetcher';
Expand All @@ -29,6 +30,7 @@ import { EthereumSPTokenTokenFetcher } from './ethereum/silo-finance.sp-token.to
EthereumSPTokenTokenFetcher,
EthereumDTokenTokenFetcher,
EthereumSiloFinanceSiloContractPositionFetcher,
EthereumSiloFinanceIncentivesContractPositionfetcher,
],
})
export class SiloFinanceAppModule extends AbstractApp() { }
export class SiloFinanceAppModule extends AbstractApp() {}

0 comments on commit f0e8a1e

Please sign in to comment.