import { createPublicClient, http, parseAbi, parseUnits } from "viem";
import { kaia } from "viem/chains";
const client = createPublicClient({ chain: kaia, transport: http() });
const router = "0x7437892a3e2e658038758dd7ca638334c0c2006c";
const vault = "0x2e4e573d86c70688cd97d76bc5ddc1bb265bf5d6";
const amount = parseUnits("100", 6);
const quote = await client.readContract({
address: router,
abi: parseAbi([
"function previewDeposit(address yVault, uint256 amount) view returns (uint256)"
]),
functionName: "previewDeposit",
args: [vault, amount]
});
function minimumOutput(quoted: bigint, toleranceBps: bigint): bigint {
if (quoted <= 0n || toleranceBps < 0n || toleranceBps >= 10_000n)
throw new Error("Invalid quote or tolerance");
const minimum = quoted * (10_000n - toleranceBps) / 10_000n;
if (minimum === 0n) throw new Error("Minimum output rounds to zero");
return minimum;
}
// 예시 정책: 50 bps (0.5%). 연동·사용자 정책으로 설정합니다.
const minSharesOut = minimumOutput(quote, 50n);