diff --git a/src/apps/redacted-cartel/ethereum/redacted-cartel.revenue-lock.contract-position-fetcher.ts b/src/apps/redacted-cartel/ethereum/redacted-cartel.revenue-lock.contract-position-fetcher.ts index 43370808f..1d710af25 100644 --- a/src/apps/redacted-cartel/ethereum/redacted-cartel.revenue-lock.contract-position-fetcher.ts +++ b/src/apps/redacted-cartel/ethereum/redacted-cartel.revenue-lock.contract-position-fetcher.ts @@ -1,50 +1,86 @@ import { Inject } from '@nestjs/common'; -import { BigNumberish } from 'ethers'; +import axios from 'axios'; +import { BigNumberish, Contract } from 'ethers'; import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; +import { ZERO_ADDRESS } from '~app-toolkit/constants/address'; import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; +import { DefaultDataProps } from '~position/display.interface'; +import { MetaType } from '~position/position.interface'; import { isSupplied } from '~position/position.utils'; +import { ContractPositionTemplatePositionFetcher } from '~position/template/contract-position.template.position-fetcher'; import { + GetDefinitionsParams, + DefaultContractPositionDefinition, GetTokenDefinitionsParams, - GetTokenBalancesParams, + UnderlyingTokenDefinition, GetDisplayPropsParams, + GetTokenBalancesParams, } from '~position/template/contract-position.template.types'; -import { VotingEscrowTemplateContractPositionFetcher } from '~position/template/voting-escrow.template.contract-position-fetcher'; import { RedactedCartelContractFactory, RedactedRevenueLock } from '../contracts'; @PositionTemplate() -export class EthereumRedactedCartelRevenueLockContractPositionFetcher extends VotingEscrowTemplateContractPositionFetcher { +export class EthereumRedactedCartelRevenueLockContractPositionFetcher extends ContractPositionTemplatePositionFetcher { groupLabel = 'Revenue Lock'; - - veTokenAddress = '0x742b70151cd3bc7ab598aaff1d54b90c3ebc6027'; - rewardAddress = '0x74c6cade3ef61d64dcc9b97490d9fbb231e4bdcc'; + rlBTRFLY = '0x742b70151cd3bc7ab598aaff1d54b90c3ebc6027'; + BTRFLYv2 = '0xc55126051b22ebb829d00368f4b12bde432de5da'; constructor( @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(RedactedCartelContractFactory) protected readonly contractFactory: RedactedCartelContractFactory, + @Inject(RedactedCartelContractFactory) + protected readonly contractFactory: RedactedCartelContractFactory, ) { super(appToolkit); } - getEscrowContract(address: string): RedactedRevenueLock { + getContract(address: string): RedactedRevenueLock { return this.contractFactory.redactedRevenueLock({ address, network: this.network }); } - async getEscrowedTokenAddress({ contract }: GetTokenDefinitionsParams) { - return contract.btrflyV2(); + async getDefinitions(_params: GetDefinitionsParams): Promise { + return [{ address: this.rlBTRFLY }]; } - async getEscrowedTokenBalance({ - address, - contract, - }: GetTokenBalancesParams): Promise { - return (await contract.lockedBalances(address)).locked; + async getTokenDefinitions( + _params: GetTokenDefinitionsParams, + ): Promise { + return [ + { + metaType: MetaType.SUPPLIED, + address: this.BTRFLYv2, + network: this.network, + }, + { + metaType: MetaType.CLAIMABLE, + address: this.BTRFLYv2, + network: this.network, + }, + { + metaType: MetaType.CLAIMABLE, + address: ZERO_ADDRESS, + network: this.network, + }, + ]; } - async getLabel({ contractPosition }: GetDisplayPropsParams) { + async getLabel({ + contractPosition, + }: GetDisplayPropsParams): Promise { const suppliedToken = contractPosition.tokens.find(isSupplied)!; - return `Revenue Lock ${getLabelFromToken(suppliedToken)}`; + return `Voting Escrow ${getLabelFromToken(suppliedToken)}`; + } + + async getTokenBalancesPerPosition({ + address, + contract, + }: GetTokenBalancesParams): Promise { + const lockedBalances = await contract.lockedBalances(address); + const { data } = await axios.get(`https://app.redacted.finance/api/rewards/1/${address}`, { headers: {} }); + const ethRewards = data?.data?.find(t => t.symbol === 'ETH'); + const btrRewards = data?.data?.find(t => t.symbol === 'BTRFLY'); + + return [lockedBalances.total, btrRewards?.claimable, ethRewards?.claimable]; } }