UNPKG

@chorus-one/ethereum

Version:

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

42 lines (41 loc) 1.31 kB
import { encodeFunctionData } from 'viem'; import { keeperABI } from '../contracts/keeperAbi'; import { VaultABI } from '../contracts/vaultAbi'; export async function buildUnstakeTx(request) { const { userAccount, connector, vault, amount } = request; const isCollateralized = await connector.eth.readContract({ abi: keeperABI, address: connector.keeper, functionName: 'isCollateralized', args: [vault] }); const shares = await connector.eth.readContract({ abi: VaultABI, address: vault, functionName: 'convertToShares', args: [amount] }); let tx; if (isCollateralized) { // This branch of logic is invoked when the stake locked in vault // is collateralized in form of beacon chain validators tx = encodeFunctionData({ abi: VaultABI, functionName: 'enterExitQueue', args: [shares, userAccount] }); } else { // This branch of logic is invoked when the stake locked in vault // does not actually power any validators tx = encodeFunctionData({ abi: VaultABI, functionName: 'redeem', args: [shares, userAccount] }); } return { to: vault, data: tx }; }