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

Commit

Permalink
feat(plutus): Add plsGLP, plvGLP, and plvGLP farm (#1307)
Browse files Browse the repository at this point in the history
  • Loading branch information
immasandwich authored Aug 31, 2022
1 parent 5ccef3c commit 6ea68eb
Show file tree
Hide file tree
Showing 24 changed files with 4,112 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsDpxLpContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPlsDpxLp> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPlsDpxLp.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsDPX LP Farm';

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsDpxV2ContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPlsDpxV2> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPlsDpxV2.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsDPX Farm V2';

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsDpxContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPlsDpx> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPlsDpx.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsDPX Farm';

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsJonesLpContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPlsJonesLp> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPlsJonesLp.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsJONES LP Farm';

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsJonesContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPlsJones> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPlsJones.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsJONES Farm';

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlsContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPls> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.farmPls.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'PLS Farm';

constructor(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { Inject } from '@nestjs/common';

import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface';
import { Register } from '~app-toolkit/decorators';
import { GetDataPropsParams, GetTokenBalancesParams } from '~position/template/contract-position.template.types';
import {
SingleStakingFarmDataProps,
SingleStakingFarmDefinition,
SingleStakingFarmTemplateContractPositionFetcher,
} from '~position/template/single-staking.template.contract-position-fetcher';
import { Network } from '~types/network.interface';

import { PlutusContractFactory, PlutusFarmPls } from '../contracts';
import PLUTUS_DEFINITION from '../plutus.definition';

const appId = PLUTUS_DEFINITION.id;
const groupId = PLUTUS_DEFINITION.groups.farmPlvGlp.id;
const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusFarmPlvGlpContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusFarmPls> {
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plvGLP Farm';

constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
@Inject(PlutusContractFactory) protected readonly contractFactory: PlutusContractFactory,
) {
super(appToolkit);
}

getContract(address: string): PlutusFarmPls {
return this.contractFactory.plutusFarmPls({ address, network: this.network });
}

async getFarmDefinitions(): Promise<SingleStakingFarmDefinition[]> {
return [
{
address: '0x4e5cf54fde5e1237e80e87fcba555d829e1307ce',
stakedTokenAddress: '0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1',
rewardTokenAddresses: [
'0x51318b7d00db7acc4026c88c3952b66278b6a67f', // PLS
],
},
];
}

async getRewardRates({ contract }: GetDataPropsParams<PlutusFarmPls, SingleStakingFarmDataProps>) {
return contract.plsPerSecond();
}

async getStakedTokenBalance({ contract, address }: GetTokenBalancesParams<PlutusFarmPls>) {
return contract.userInfo(0, address).then(v => v.amount);
}

async getRewardTokenBalances({ contract, address }: GetTokenBalancesParams<PlutusFarmPls>) {
return contract.pendingPls(0, address);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ const PLUTUS_LOCKS = [

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusLockContractPositionFetcher extends SingleStakingFarmTemplateContractPositionFetcher<PlutusLock> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.lock.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'Locked PLS';

constructor(
Expand Down
6 changes: 3 additions & 3 deletions src/apps/plutus/arbitrum/plutus.pls-dpx.token-fetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.TokenPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusPlsDpxTokenFetcher extends AppTokenTemplatePositionFetcher<Erc20> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.plsDpx.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsDPX';

constructor(
Expand Down
41 changes: 41 additions & 0 deletions src/apps/plutus/arbitrum/plutus.pls-glp.token-fetcher.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Inject } from '@nestjs/common';

import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface';
import { Register } from '~app-toolkit/decorators';
import { Erc20 } from '~contract/contracts';
import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher';
import { Network } from '~types/network.interface';

import { PlutusContractFactory } from '../contracts';
import PLUTUS_DEFINITION from '../plutus.definition';

const appId = PLUTUS_DEFINITION.id;
const groupId = PLUTUS_DEFINITION.groups.plsGlp.id;
const network = Network.ARBITRUM_MAINNET;

@Register.TokenPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusPlsGlpTokenFetcher extends AppTokenTemplatePositionFetcher<Erc20> {
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsGLP';

constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
@Inject(PlutusContractFactory) protected readonly contractFactory: PlutusContractFactory,
) {
super(appToolkit);
}

getContract(address: string) {
return this.contractFactory.erc20({ address, network: this.network });
}

async getAddresses() {
return ['0x530f1cbb2ebd71bec58d351dcd3768148986a467'];
}

async getUnderlyingTokenAddresses() {
return ['0x4277f8f2c384827b5273592ff7cebd9f2c1ac258'];
}
}
6 changes: 3 additions & 3 deletions src/apps/plutus/arbitrum/plutus.pls-jones.token-fetcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.TokenPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusPlsJonesTokenFetcher extends AppTokenTemplatePositionFetcher<Erc20> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.plsJones.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plsJONES';

constructor(
Expand Down
67 changes: 67 additions & 0 deletions src/apps/plutus/arbitrum/plutus.plv-glp.token-fetcher.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { Inject } from '@nestjs/common';
import { BigNumber } from 'ethers';

import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface';
import { Register } from '~app-toolkit/decorators';
import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher';
import {
GetDataPropsParams,
GetPricePerShareParams,
GetUnderlyingTokensParams,
} from '~position/template/app-token.template.types';
import { Network } from '~types/network.interface';

import { PlutusContractFactory } from '../contracts';
import { PlutusPlvGlp } from '../contracts/ethers/PlutusPlvGlp';
import { PLUTUS_DEFINITION } from '../plutus.definition';

const appId = PLUTUS_DEFINITION.id;
const groupId = PLUTUS_DEFINITION.groups.plvGlp.id;
const network = Network.ARBITRUM_MAINNET;

type PlutusPlvGlpTokenDataProps = {
reserve: number;
liquidity: number;
};

@Register.TokenPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusPlvGlpTokenFetcher extends AppTokenTemplatePositionFetcher<
PlutusPlvGlp,
PlutusPlvGlpTokenDataProps
> {
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'plvGLP';

constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
@Inject(PlutusContractFactory) protected readonly contractFactory: PlutusContractFactory,
) {
super(appToolkit);
}

getContract(address: string): PlutusPlvGlp {
return this.contractFactory.plutusPlvGlp({ address, network: this.network });
}

getAddresses() {
return ['0x5326e71ff593ecc2cf7acae5fe57582d6e74cff1'];
}

async getUnderlyingTokenAddresses({ contract }: GetUnderlyingTokensParams<PlutusPlvGlp>) {
return contract.asset();
}

async getPricePerShare({ contract }: GetPricePerShareParams<PlutusPlvGlp>) {
const pricePerShareRaw = await contract.convertToAssets(BigNumber.from(10).pow(18).toString());
return Number(pricePerShareRaw) / 10 ** 18;
}

async getDataProps({ appToken, contract }: GetDataPropsParams<PlutusPlvGlp>) {
const reserveRaw = await contract.totalAssets();
const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals;
const liquidity = reserve * appToken.tokens[0].price;
return { reserve, liquidity };
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ const network = Network.ARBITRUM_MAINNET;

@Register.ContractPositionFetcher({ appId, groupId, network })
export class ArbitrumPlutusTgeClaimableContractPositionFetcher extends ContractPositionTemplatePositionFetcher<PlutusPrivateTgeVester> {
appId = PLUTUS_DEFINITION.id;
groupId = PLUTUS_DEFINITION.groups.tgeClaimable.id;
network = Network.ARBITRUM_MAINNET;
appId = appId;
groupId = groupId;
network = network;
groupLabel = 'Private TGE Allocation';

constructor(
Expand Down
Loading

0 comments on commit 6ea68eb

Please sign in to comment.