@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
46 lines (45 loc) • 1.53 kB
JavaScript
import { encodeFunctionData } from 'viem';
import { VaultABI } from '../contracts/vaultAbi';
import { keeperABI } from '../contracts/keeperAbi';
import { getHarvestParams } from '../utils/getHarvestParams';
import { getDefaultTrackingAddress } from '../utils/getDefaultTrackingAddress';
export async function buildStakeTx(request) {
const DEFAULT_SDK_TRACKING_ADDRESS = getDefaultTrackingAddress();
const { userAccount, connector, vault, amount, referrer = DEFAULT_SDK_TRACKING_ADDRESS } = request;
const canHarvest = await connector.eth.readContract({
abi: keeperABI,
address: connector.keeper,
functionName: 'canHarvest',
args: [vault]
});
let tx;
const harvestParams = await getHarvestParams(connector, vault);
if (canHarvest) {
tx = encodeFunctionData({
abi: VaultABI,
functionName: 'updateStateAndDeposit',
args: [
userAccount,
referrer,
{
proof: harvestParams.proof,
rewardsRoot: harvestParams.rewardsRoot,
reward: harvestParams.reward,
unlockedMevReward: harvestParams.unlockedMevReward
}
]
});
}
else {
tx = encodeFunctionData({
abi: VaultABI,
functionName: 'deposit',
args: [userAccount, referrer]
});
}
return {
to: vault,
data: tx,
value: amount
};
}