import { Address } from "@celo/utils/lib/address"; import { Multicall } from "@node-fi/multicall"; import BigNumber from "bignumber.js"; import Web3 from "web3"; import { TransactionReceipt } from "web3-core"; import { NodeRoute } from "../Routing"; import { TokenAmount } from "../Tokens"; import { BigNumberString, ChainId } from "../constants"; import { Wallet } from "../wallet"; declare type EarnType = "SNX" | "LG3" | "Aave-V2"; export interface Reward { _type: "VeToken" | "SNX"; order: number; contract: string; rewardToken: string; totalRewardRate?: string; } export interface EarnBase { _type: EarnType; eid: number; name: string; protocol: string; apr: number; tvl: number; depositToken: string; chainId: ChainId; totalSupply: string; } export interface YieldFarmDetails extends EarnBase { address: string; rewards: Reward[]; } export interface DepositData { addr: string; extra: string; } export interface LendingMarketDetails extends EarnBase { debtToken: string; } export interface DepositTransactionDetails { expectedOut?: BigNumber; routerAddress?: string; routes?: NodeRoute[]; depositData?: DepositData; oneClickFarmAddress?: Address; error?: string; } export declare abstract class EarnPosition { protected base: EarnBase; private wallet?; protected web3: Web3; private amountDeposited?; private depositToken; private totalSupply; constructor(base: EarnBase, wallet?: Wallet | undefined); get id(): number; get tvl(): number; get protocol(): string; get _type(): EarnType; get apr(): number; get supply(): TokenAmount; get deposited(): TokenAmount | undefined; setAmountDeposited(amount: string | BigNumber): void; abstract balanceOfMulticall(owner: string): Multicall; abstract getExpectedDeposit(tokenIn: Address, amountIn: BigNumberString): Promise<{ expectedOut?: BigNumber; routerAddress?: string; routes?: NodeRoute[]; depositData?: DepositData; oneClickFarmAddress?: Address; error?: string; }>; abstract withdrawToUnderlying(amount: BigNumber): Promise<{ directOutput?: { [address: Address]: BigNumber; }; error?: string; }>; abstract withdrawToSelectedToken(amountToWithdraw: BigNumber, tokenOut: Address): Promise<{ directOutput?: { [address: Address]: BigNumber; }; expectedOut?: BigNumber | undefined; routerAddress?: string | undefined; underlyingRoutes?: NodeRoute[] | undefined; error?: string | undefined; }>; performDeposit(details: DepositTransactionDetails, to: Address, slippage: number, wallet?: Wallet): Promise; abstract formatTransaction(details: DepositTransactionDetails, to: Address, slippage: number): { to: string; data: string; gas: string; } | undefined; abstract canDirectlySwap(): boolean; } export {};