UNPKG

@chorus-one/ethereum

Version:

All-in-one toolkit for building staking dApps on Ethereum network

50 lines (49 loc) 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildStakeTx = void 0; const viem_1 = require("viem"); const vaultAbi_1 = require("../contracts/vaultAbi"); const keeperAbi_1 = require("../contracts/keeperAbi"); const getHarvestParams_1 = require("../utils/getHarvestParams"); const getDefaultTrackingAddress_1 = require("../utils/getDefaultTrackingAddress"); async function buildStakeTx(request) { const DEFAULT_SDK_TRACKING_ADDRESS = (0, getDefaultTrackingAddress_1.getDefaultTrackingAddress)(); const { userAccount, connector, vault, amount, referrer = DEFAULT_SDK_TRACKING_ADDRESS } = request; const canHarvest = await connector.eth.readContract({ abi: keeperAbi_1.keeperABI, address: connector.keeper, functionName: 'canHarvest', args: [vault] }); let tx; const harvestParams = await (0, getHarvestParams_1.getHarvestParams)(connector, vault); if (canHarvest) { tx = (0, viem_1.encodeFunctionData)({ abi: vaultAbi_1.VaultABI, functionName: 'updateStateAndDeposit', args: [ userAccount, referrer, { proof: harvestParams.proof, rewardsRoot: harvestParams.rewardsRoot, reward: harvestParams.reward, unlockedMevReward: harvestParams.unlockedMevReward } ] }); } else { tx = (0, viem_1.encodeFunctionData)({ abi: vaultAbi_1.VaultABI, functionName: 'deposit', args: [userAccount, referrer] }); } return { to: vault, data: tx, value: amount }; } exports.buildStakeTx = buildStakeTx;