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

Commit

Permalink
feat(stargate): Added Lp Staking time position on Arbitrum and Optimi…
Browse files Browse the repository at this point in the history
…sm (#3083)
  • Loading branch information
wpoulin committed Nov 27, 2023
1 parent 4dde45b commit 7d44c6a
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 32 deletions.
@@ -0,0 +1,42 @@
import { BigNumberish } from 'ethers';

import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator';
import { isViemMulticallUnderlyingError } from '~multicall/errors';
import {
GetMasterChefDataPropsParams,
GetMasterChefTokenBalancesParams,
RewardRateUnit,
} from '~position/template/master-chef.template.contract-position-fetcher';

import { StargateLpStakingTimeContractPositionFetcher } from '../common/stargate.farm-time.contract-position-fetcher';
import { StargateChefTime, StargateChefTimeContract } from '../contracts/viem/StargateChefTime';

@PositionTemplate()
export class ArbitrumStargateLpStakingContractPositionFetcher extends StargateLpStakingTimeContractPositionFetcher {
groupLabel = 'Farms';
chefAddress = '0x9774558534036ff2e236331546691b4eb70594b1';
rewardRateUnit = RewardRateUnit.SECOND;

getStargateChefContract(address: string): StargateChefTimeContract {
return this.contractFactory.stargateChefTime({ address, network: this.network });
}

getStargateTokenAddress(contract: StargateChefTimeContract): Promise<string> {
return contract.read.eToken();
}

getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.eTokenPerSecond();
}

getRewardTokenBalance({
address,
contract,
contractPosition,
}: GetMasterChefTokenBalancesParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.pendingEmissionToken([BigInt(contractPosition.dataProps.poolIndex), address]).catch(err => {
if (isViemMulticallUnderlyingError(err)) return 0;
throw err;
});
}
}
Expand Up @@ -8,33 +8,32 @@ import {
RewardRateUnit,
} from '~position/template/master-chef.template.contract-position-fetcher';

import { StargateFarmBaseContractPositionFetcher } from '../common/stargate.farm-base.contract-position-fetcher';
import { StargateChefBase } from '../contracts/viem';
import { StargateChefBaseContract } from '../contracts/viem/StargateChefBase';
import { StargateLpStakingTimeContractPositionFetcher } from '../common/stargate.farm-time.contract-position-fetcher';
import { StargateChefTime, StargateChefTimeContract } from '../contracts/viem/StargateChefTime';

@PositionTemplate()
export class BaseStargateFarmContractPositionFetcher extends StargateFarmBaseContractPositionFetcher {
export class BaseStargateFarmContractPositionFetcher extends StargateLpStakingTimeContractPositionFetcher {
groupLabel = 'Farms';
chefAddress = '0x06eb48763f117c7be887296cdcdfad2e4092739c';
rewardRateUnit = RewardRateUnit.SECOND;

getStargateChefContract(address: string): StargateChefBaseContract {
return this.contractFactory.stargateChefBase({ address, network: this.network });
getStargateChefContract(address: string): StargateChefTimeContract {
return this.contractFactory.stargateChefTime({ address, network: this.network });
}

getStargateTokenAddress(contract: StargateChefBaseContract): Promise<string> {
getStargateTokenAddress(contract: StargateChefTimeContract): Promise<string> {
return contract.read.eToken();
}

getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefBase>): Promise<BigNumberish> {
getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.eTokenPerSecond();
}

getRewardTokenBalance({
address,
contract,
contractPosition,
}: GetMasterChefTokenBalancesParams<StargateChefBase>): Promise<BigNumberish> {
}: GetMasterChefTokenBalancesParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.pendingEmissionToken([BigInt(contractPosition.dataProps.poolIndex), address]).catch(err => {
if (isViemMulticallUnderlyingError(err)) return 0;
throw err;
Expand Down
Expand Up @@ -10,13 +10,13 @@ import {
} from '~position/template/master-chef.template.contract-position-fetcher';

import { StargateViemContractFactory } from '../contracts';
import { StargateChefBase } from '../contracts/viem';
import { StargateChefBaseContract } from '../contracts/viem/StargateChefBase';
import { StargateChefTime } from '../contracts/viem';
import { StargateChefTimeContract } from '../contracts/viem/StargateChefTime';

export abstract class StargateFarmBaseContractPositionFetcher extends MasterChefTemplateContractPositionFetcher<StargateChefBase> {
abstract getStargateChefContract(address: string): StargateChefBaseContract;
abstract getStargateTokenAddress(contract: StargateChefBaseContract): Promise<string>;
abstract getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefBase>): Promise<BigNumberish>;
export abstract class StargateLpStakingTimeContractPositionFetcher extends MasterChefTemplateContractPositionFetcher<StargateChefTime> {
abstract getStargateChefContract(address: string): StargateChefTimeContract;
abstract getStargateTokenAddress(contract: StargateChefTimeContract): Promise<string>;
abstract getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish>;

constructor(
@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit,
Expand All @@ -29,42 +29,42 @@ export abstract class StargateFarmBaseContractPositionFetcher extends MasterChef
return this.getStargateChefContract(address);
}

async getPoolLength(contract: StargateChefBaseContract): Promise<BigNumberish> {
async getPoolLength(contract: StargateChefTimeContract): Promise<BigNumberish> {
return contract.read.poolLength();
}

async getStakedTokenAddress(contract: StargateChefBaseContract, poolIndex: number): Promise<string> {
async getStakedTokenAddress(contract: StargateChefTimeContract, poolIndex: number): Promise<string> {
return contract.read.poolInfo([BigInt(poolIndex)]).then(v => v[0]);
}

async getRewardTokenAddress(contract: StargateChefBaseContract): Promise<string> {
async getRewardTokenAddress(contract: StargateChefTimeContract): Promise<string> {
return this.getStargateTokenAddress(contract);
}

async getTotalAllocPoints({ contract }: GetMasterChefDataPropsParams<StargateChefBase>): Promise<BigNumberish> {
async getTotalAllocPoints({ contract }: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.totalAllocPoint();
}

async getPoolAllocPoints({
contract,
definition,
}: GetMasterChefDataPropsParams<StargateChefBase>): Promise<BigNumberish> {
}: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.poolInfo([BigInt(definition.poolIndex)]).then(v => v[1]);
}

async getStakedTokenBalance({
address,
contract,
contractPosition,
}: GetMasterChefTokenBalancesParams<StargateChefBase>): Promise<BigNumberish> {
}: GetMasterChefTokenBalancesParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.userInfo([BigInt(contractPosition.dataProps.poolIndex), address]).then(v => v[0]);
}

async getRewardTokenBalance({
address,
contract,
contractPosition,
}: GetMasterChefTokenBalancesParams<StargateChefBase>): Promise<BigNumberish> {
}: GetMasterChefTokenBalancesParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.pendingEmissionToken([BigInt(contractPosition.dataProps.poolIndex), address]).catch(err => {
if (isViemMulticallUnderlyingError(err)) return 0;
throw err;
Expand Down
6 changes: 3 additions & 3 deletions src/apps/stargate/contracts/viem.contract-factory.ts
Expand Up @@ -5,7 +5,7 @@ import { Network } from '~types/network.interface';

import {
StargateChef__factory,
StargateChefBase__factory,
StargateChefTime__factory,
StargateEth__factory,
StargateFactory__factory,
StargatePool__factory,
Expand All @@ -21,8 +21,8 @@ export class StargateViemContractFactory {
stargateChef({ address, network }: ContractOpts) {
return StargateChef__factory.connect(address, this.appToolkit.getViemNetworkProvider(network));
}
stargateChefBase({ address, network }: ContractOpts) {
return StargateChefBase__factory.connect(address, this.appToolkit.getViemNetworkProvider(network));
stargateChefTime({ address, network }: ContractOpts) {
return StargateChefTime__factory.connect(address, this.appToolkit.getViemNetworkProvider(network));
}
stargateEth({ address, network }: ContractOpts) {
return StargateEth__factory.connect(address, this.appToolkit.getViemNetworkProvider(network));
Expand Down
Expand Up @@ -3,7 +3,7 @@
/* eslint-disable */
import { getContract, GetContractReturnType, PublicClient } from 'viem';

export const stargateChefBaseAbi = [
export const stargateChefTimeAbi = [
{
inputs: [
{
Expand Down Expand Up @@ -549,11 +549,11 @@ export const stargateChefBaseAbi = [
},
] as const;

export type StargateChefBase = typeof stargateChefBaseAbi;
export type StargateChefBaseContract = GetContractReturnType<StargateChefBase, PublicClient>;
export type StargateChefTime = typeof stargateChefTimeAbi;
export type StargateChefTimeContract = GetContractReturnType<StargateChefTime, PublicClient>;

export class StargateChefBase__factory {
export class StargateChefTime__factory {
static connect(address: string, client: PublicClient) {
return getContract({ address, abi: stargateChefBaseAbi, publicClient: client });
return getContract({ address, abi: stargateChefTimeAbi, publicClient: client });
}
}
4 changes: 2 additions & 2 deletions src/apps/stargate/contracts/viem/index.ts
Expand Up @@ -2,14 +2,14 @@
/* tslint:disable */
/* eslint-disable */

export type { StargateChefBase } from './StargateChefBase';
export type { StargateChefTime } from './StargateChefTime';
export type { StargateChef } from './StargateChef';
export type { StargateEth } from './StargateEth';
export type { StargateFactory } from './StargateFactory';
export type { StargatePool } from './StargatePool';
export type { StargateVe } from './StargateVe';

export { StargateChefBase__factory } from './StargateChefBase';
export { StargateChefTime__factory } from './StargateChefTime';
export { StargateChef__factory } from './StargateChef';
export { StargateEth__factory } from './StargateEth';
export { StargateFactory__factory } from './StargateFactory';
Expand Down
@@ -0,0 +1,43 @@
import { BigNumberish } from 'ethers';

import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator';
import { isViemMulticallUnderlyingError } from '~multicall/errors';
import {
GetMasterChefDataPropsParams,
GetMasterChefTokenBalancesParams,
RewardRateUnit,
} from '~position/template/master-chef.template.contract-position-fetcher';

import { StargateLpStakingTimeContractPositionFetcher } from '../common/stargate.farm-time.contract-position-fetcher';
import { StargateChefTime } from '../contracts/viem';
import { StargateChefTimeContract } from '../contracts/viem/StargateChefTime';

@PositionTemplate()
export class OptimismStargateLpStakingContractPositionFetcher extends StargateLpStakingTimeContractPositionFetcher {
groupLabel = 'Farms';
chefAddress = '0x4dea9e918c6289a52cd469cac652727b7b412cd2';
rewardRateUnit = RewardRateUnit.SECOND;

getStargateChefContract(address: string): StargateChefTimeContract {
return this.contractFactory.stargateChefTime({ address, network: this.network });
}

getStargateTokenAddress(contract: StargateChefTimeContract): Promise<string> {
return contract.read.eToken();
}

getTotalRewardRate({ contract }: GetMasterChefDataPropsParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.eTokenPerSecond();
}

getRewardTokenBalance({
address,
contract,
contractPosition,
}: GetMasterChefTokenBalancesParams<StargateChefTime>): Promise<BigNumberish> {
return contract.read.pendingEmissionToken([BigInt(contractPosition.dataProps.poolIndex), address]).catch(err => {
if (isViemMulticallUnderlyingError(err)) return 0;
throw err;
});
}
}
4 changes: 4 additions & 0 deletions src/apps/stargate/stargate.module.ts
Expand Up @@ -4,6 +4,7 @@ import { AbstractApp } from '~app/app.dynamic-module';

import { ArbitrumStargateEthTokenFetcher } from './arbitrum/stargate.eth.token-fetcher';
import { ArbitrumStargateFarmContractPositionFetcher } from './arbitrum/stargate.farm.contract-position-fetcher';
import { ArbitrumStargateLpStakingContractPositionFetcher } from './arbitrum/stargate.lp-staking.contract-position-fetcher';
import { ArbitrumStargatePoolTokenFetcher } from './arbitrum/stargate.pool.token-fetcher';
import { ArbitrumStargateVotingEscrowContractPositionFetcher } from './arbitrum/stargate.voting-escrow.contract-position-fetcher';
import { AvalancheStargateFarmContractPositionFetcher } from './avalanche/stargate.farm.contract-position-fetcher';
Expand All @@ -25,6 +26,7 @@ import { FantomStargatePoolTokenFetcher } from './fantom/stargate.pool.token-fet
import { FantomStargateVotingEscrowContractPositionFetcher } from './fantom/stargate.voting-escrow.contract-position-fetcher';
import { OptimismStargateEthTokenFetcher } from './optimism/stargate.eth.token-fetcher';
import { OptimismStargateFarmContractPositionFetcher } from './optimism/stargate.farm.contract-position-fetcher';
import { OptimismStargateLpStakingContractPositionFetcher } from './optimism/stargate.lp-staking.contract-position-fetcher';
import { OptimismStargatePoolTokenFetcher } from './optimism/stargate.pool.token-fetcher';
import { OptimismStargateVotingEscrowContractPositionFetcher } from './optimism/stargate.voting-escrow.contract-position-fetcher';
import { PolygonStargateFarmContractPositionFetcher } from './polygon/stargate.farm.contract-position-fetcher';
Expand All @@ -39,6 +41,7 @@ import { PolygonStargateVotingEscrowContractPositionFetcher } from './polygon/st
ArbitrumStargateFarmContractPositionFetcher,
ArbitrumStargatePoolTokenFetcher,
ArbitrumStargateVotingEscrowContractPositionFetcher,
ArbitrumStargateLpStakingContractPositionFetcher,
// Avalanche
AvalancheStargateFarmContractPositionFetcher,
AvalancheStargatePoolTokenFetcher,
Expand All @@ -65,6 +68,7 @@ import { PolygonStargateVotingEscrowContractPositionFetcher } from './polygon/st
OptimismStargateFarmContractPositionFetcher,
OptimismStargatePoolTokenFetcher,
OptimismStargateVotingEscrowContractPositionFetcher,
OptimismStargateLpStakingContractPositionFetcher,
// Polygon
PolygonStargateFarmContractPositionFetcher,
PolygonStargatePoolTokenFetcher,
Expand Down

0 comments on commit 7d44c6a

Please sign in to comment.