Programmable treasury yield on Arbitrum: deposit ETH or wBTC, receive KASH tokens, redeem through daily batches. Returns based on funding rates — verify contracts and risk disclosure before allocating capital.
FOR HUMANS: read Documentation first, then click Launch App to begin.
Indicative yield and on-chain NAV for each KASH product. Refresh market rates with the button in the app; these values read the chain directly.
Strategy targets market-neutral funding income; superior yield from innovative strategies.
Verify user assets on chain. Read NAV and batch events (e.g. getNAV(), BatchProcessed) — every position is auditable in real time.
Deposit wBTC or ETH to receive KASH tokens that increase in value over time. Full redemption within 24 hours.
Everything below this is for AI Agents
Machine-readable integration brief. Deposits require native ETH, WETH, or wBTC on Arbitrum One (minimum $10 notional). Confirm addresses before mainnet execution.
Copy as JSON for tools / planners
{
"chainId": 42161,
"network": "Arbitrum One",
"explorerBase": "https://arbiscan.io",
"appUrl": "https://www.kash-token.io",
"depositAssets": {
"kashEth": "Native ETH or WETH on Arbitrum One only — not USDC or other ERC-20",
"kashBtc": "wBTC on Arbitrum One only (8 decimals) — not USDC or other assets"
},
"minimums": {
"mintUsd": "$10 minimum deposit notional (Chainlink oracle USD at request time)",
"redeemUsd": "No minimum redeem size",
"minHoldingPeriod": "One day — deposit in batch N, redeem earliest in batch N+1"
},
"products": {
"kashEth": {
"kashYield": "0xC5C8B1Dc1fFF6728869C8BCCe6105Caa6Df9E68d",
"kashToken": "0xf29483f62502D714c14CB3141944C6D8CCDF9962",
"mintNativeEth": "requestMint(0) with tx.value = depositWei (or WETH: approve + requestMint(wethWei))",
"redeem": "approve(kashYieldEth, kashWei) on KASH-ETH token, then requestRedeem(kashWei)"
},
"kashBtc": {
"kashYield": "0x86B0095f866c05F53363AE31F994E9540033fC2E",
"kashToken": "0x4f628402227a2Fe292641db7aDa1Fae744568445",
"mint": "approve(kashYieldBtc, wbtcWei) on wBTC, then requestMint(wbtcWei)",
"redeem": "approve(kashYieldBtc, kashWei) on KASH-BTC token, then requestRedeem(kashWei)"
}
},
"scheduleHint": "Mint/redeem requests accepted until batch cutoff (~23:40 UTC); after settlement, call claimMint or claimRedeem with hosted Merkle proofs.",
"reads": [
"isUserWindow()",
"isProcessingWindow()",
"currentNAV() / getNAV()",
"feeBps()",
"getCurrentBatchCycle()",
"getPendingMintRequest(user, batchCycle)",
"getPendingRedeemRequest(user, batchCycle)",
"getBatchInfo(batchCycle)",
"batchClaimInfo(batchCycle)",
"mintClaimed(batchCycle, user)",
"redeemClaimed(batchCycle, user)"
],
"eventsToWatch": [
"MintRequested",
"RedeemRequested",
"BatchProcessed",
"TokensClaimed"
],
"redeemClaimProofs": "https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/redeem-proofs",
"redeemClaimProofPattern": "https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/redeem-proofs/{eth|btc}-batch-{batchCycle}.json",
"mintClaimProofs": "https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/mint-proofs",
"mintClaimProofPattern": "https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/mint-proofs/{eth|btc}-mint-batch-{batchCycle}.json",
"quickstartDocs": "https://kash-2.gitbook.io/kash-enhanced-yield-protocol/agent-integration/agent-quickstart",
"riskDocs": "https://kash-2.gitbook.io/kash-enhanced-yield-protocol/how-it-works/risks",
"mechanicsDocs": "https://kash-2.gitbook.io/kash-enhanced-yield-protocol/how-it-works/how-yield-works"
}isUserWindow, submit before batch cutoff, await BatchProcessed.Verification checklist: confirm each item against live chain state using your own RPC, Arbiscan, or an indexer before you allocate capital.
Read getNAV() on each KashYield vault and totalSupply() on the matching KASH token. Multiply: totalNAV = nav × supply / 10^18.
provider.getBalance(vault) for ETH and balanceOf(vault) for WETH, wBTC, and USDC.latestRoundData() on the ETH/USD and BTC/USD price feeds to value the collateral.{type: 'clearinghouseState', user: hlAccount} for the vault's HL account. Read perp position sizes, USDC spot balance, and marginSummary.{type: 'perpetualMetaAndAssetCtxs'} for current mark price and funding on ETH-PERP and BTC-PERP.Read feeBps() on the same contracts. Protocol fee is 5 bps; confirm on-chain before sizing trades.
Poll isUserWindow() frequently (e.g. every 60s) and submit mint/redeem requests well before the window closes. The cutoff is around 23:40 UTC — validate against the deployed contract. After submission, watch for BatchProcessed and the corresponding TokensClaimed event after claiming.
TVL equals the total NAV of each vault. Verify it directly on-chain: for each product, read getNAV() from KashYield and totalSupply() from the KASH token, then compute totalNAV = nav × supply / 10^18.
getNAV() on 0xC5C8…E68d × totalSupply() on 0xf294…9962.getNAV() on 0x86B0…fC2E × totalSupply() on 0x4f62…8445.KashYield ETH vault: View verified code ↗ (0xC5C8…E68d). KASH-ETH token: 0xf294…9962 ↗. KashYield BTC vault: View verified code ↗ (0x86B0…fC2E). KASH-BTC token: 0x4f62…8445 ↗.
Risks & mechanics: Risks · How yield works · GitBook
Follow this sequence if you are an agent evaluating whether to allocate idle ETH or wBTC. The complete guide is Agent Quickstart in the Documentation.
Chain ID 42161, RPC https://arb1.arbitrum.io/rpc, ABI from kashYieldABI.ts.
Before signing, read paused(), isUserWindow(), currentNAV(), feeBps(), and getCurrentBatchCycle().
Hold the correct asset on Arbitrum One: native ETH or WETH (KASH-ETH), or wBTC (KASH-BTC). Minimum ~$10 oracle USD per mint. ETH: call requestMint(0) with msg.value. wBTC: approve the BTC vault, then call requestMint(wbtcAmount) (8 decimals).
Watch MintRequested, RedeemRequested, BatchProcessed, then mintClaimed / redeemClaimed and TokensClaimed after you claim.
After settlement, fetch the hosted mint proof manifest and call claimMint(batchCycle, amount, proof). Proofs are public JSON at:
https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/mint-proofs/{eth|btc}-mint-batch-{batchCycle}.json(or rebuild from chain if unavailable).
Approve the relevant KASH token to its KashYield vault, call requestRedeem(kashAmount) before the batch cutoff, then call claimRedeem(batchCycle, amount, proof) after settlement. Redeem proofs:
https://rgmuqtp7bm5kimpv.public.blob.vercel-storage.com/redeem-proofs/{eth|btc}-batch-{batchCycle}.jsonDo not infer yield from copy. Check NAV history, operator assumptions, portfolio exposure, batch status, and Risks before sizing capital.
Contracts use requestMint / requestRedeem, then claimMint / claimRedeem after settlement. ABI reference: frontend/lib/contracts/kashYieldABI.ts.
// viem-style sketch — KASH-ETH native deposit
const vaultEth = '0xC5C8B1Dc1fFF6728869C8BCCe6105Caa6Df9E68d' as `0x${string}`;
const kashTokenEth = '0xf29483f62502D714c14CB3141944C6D8CCDF9962' as `0x${string}`;
const open = await client.readContract({ address: vaultEth, abi, functionName: 'isUserWindow' });
if (!open) throw new Error('Outside user window');
const hash = await wallet.writeContract({
address: vaultEth,
abi,
functionName: 'requestMint',
args: [0n], // native ETH path uses msg.value
value: depositWei,
});
// After batch settlement: claimMint(batchCycle, kashAmount, proof) using hosted mint proof JSON.
// To exit: approve KASH, requestRedeem(kashWei), then claimRedeem(batchCycle, amount, proof).Pass the KashYield ABI into Web3.py (same JSONABI shape as Hardhat artifacts)—copy the array from frontend/lib/contracts/kashYieldABI.ts, export it as JSON, or use your compiled contract artifact. There is no published kash_sdk package today.
from web3 import Web3
RPC = "https://arb1.arbitrum.io/rpc"
w3 = Web3(Web3.HTTPProvider(RPC))
vault_eth = Web3.to_checksum_address("0xC5C8B1Dc1fFF6728869C8BCCe6105Caa6Df9E68d")
# abi = json.load(open("kashYield.json"))["abi"]
c = w3.eth.contract(address=vault_eth, abi=abi)
assert c.functions.isUserWindow().call()
tx = c.functions.requestMint(0).build_transaction({
"from": agent_address,
"value": deposit_wei,
"nonce": w3.eth.get_transaction_count(agent_address),
"gas": ...,
"maxFeePerGas": ...,
"maxPriorityFeePerGas": ...,
})
signed = w3.eth.account.sign_transaction(tx, private_key=AGENT_KEY)
w3.eth.send_raw_transaction(signed.raw_transaction)
# KASH-BTC: approve(wbtc, vault_btc) then requestMint(wbtc_amount)
# Redeem: approve(kash_token, vault) then requestRedeem(kash_amount)