import BigNumber from "bignumber.js"; import invariant from "tiny-invariant"; import { TransactionReceipt } from "web3-core"; import { getErc20, getSNXContract } from "../constants/contracts"; import { Wallet } from "../wallet"; import { DepositTransactionDetails } from "./EarnPosition"; import { YieldFarm } from "./YieldFarm"; export class YieldFarmSynthetix extends YieldFarm { public async performDeposit( details: DepositTransactionDetails, to: string, slippage: number, wallet?: Wallet | undefined ): Promise { invariant(wallet && wallet.address, "Wallet is undefined"); const topAddress = this.rewards[this.rewards.length - 1].contract; const stakingToken = getErc20(this.web3, this.base.depositToken); const snx = getSNXContract(this.web3, topAddress); const balanceBefore = await stakingToken?.methods .balanceOf(wallet.address) .call(); await super.performDeposit(details, to, slippage, wallet); const balanceAfter = await stakingToken?.methods .balanceOf(wallet.address) .call(); const amountToDeposit = new BigNumber( balanceAfter?.toString() ?? "0" ).minus(new BigNumber(balanceBefore?.toString() ?? "0")); const calldata = snx?.methods.stake(amountToDeposit.toFixed(0)).encodeABI(); const receipt = await wallet.signAndSendTransaction([ { to: topAddress, data: calldata, gas: "800000", }, ]); return receipt; } }