@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
42 lines (41 loc) • 1.31 kB
JavaScript
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
};
}