Programmable treasury yield on Arbitrum: deposit ETH or wBTC into KashYield, receive ERC-20 KASH priced off NAV, redeem through daily batches. Returns depend on funding rates and protocol risks โ verify contracts and NAV before allocating capital.
For humans: read Documentation first, then click Launch App to begin.
No UI needed. Deposit, earn, and redeem entirely through smart contract calls. Built for automation.
Strategy targets delta-neutral funding income; funding can be positive or negative โ NAV reflects outcomes.
Low gas on Arbitrum One for deposits, redemptions, and read-heavy monitoring against shared batch cadence.
Read NAV and batch events on-chain (e.g. getNAV(), BatchProcessed). Understand assumptions in docs โ not guaranteed APY.
Predictable daily windows for mint/redeem requests and settlement โ easy to cron without micromanaging intraday swaps.
Machine-readable integration brief (addresses come from app env defaults โ confirm before mainnet execution).
Copy as JSON for tools / planners
{
"chainId": 42161,
"network": "Arbitrum One",
"explorerBase": "https://arbiscan.io",
"products": {
"kashEth": {
"kashYield": "0x92c5833Deaac65a7aCB47867Cf009cAC1bF1dD5a",
"kashToken": "0x8642483DcCE55270692aD559dCac7cf7eA0F9Bd9",
"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": "0x0B1ecF30eA537387aa7859B54826E5e3c7aEABB1",
"kashToken": "0x725e7D90f2b6BFAE58375f375C497e534040Fee9",
"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:45 UTC); settles during processing โ confirm timing in docs / contract.",
"reads": [
"isUserWindow()",
"isProcessingWindow()",
"getNAV()",
"feeBps()",
"getCurrentBatchCycle()",
"getPendingMintRequest(user, batchCycle)",
"getPendingRedeemRequest(user, batchCycle)",
"getBatchInfo(batchCycle)"
],
"eventsToWatch": [
"MintRequested",
"RedeemRequested",
"BatchProcessed",
"TokensClaimed"
],
"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 size or route capital.
Call getNAV() on KashYield (ETH vault 0x92c5833Deaac65a7aCB47867Cf009cAC1bF1dD5a, BTC vault 0x0B1ecF30eA537387aa7859B54826E5e3c7aEABB1). Compare reads across blocks with docs on update cadence.
Read feeBps() on the same contracts. The app markets 5 bps; confirm on-chain before sizing trades.
Use isUserWindow() / isProcessingWindow() and subscribe to BatchProcessed events to anchor automation โ cutoff time is documented (~23:45 UTC); validate against deployment.
Not displayed on this page. Derive exposure from total KASH supply ร NAV, protocol holdings, and your own dashboards โ do not infer APY from marketing copy alone.
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 on GitBook.
Chain ID 42161, RPC https://arb1.arbitrum.io/rpc, ABI from kashYieldABI.ts.
Before signing, read paused(), isUserWindow(), getNAV(), feeBps(), and getCurrentBatchCycle().
ETH: call requestMint(0) with msg.value. BTC: approve wBTC to the BTC vault, then call requestMint(wbtcAmount).
Watch MintRequested, BatchProcessed, and your KASH token balance after settlement.
Approve the relevant KASH token to its KashYield vault, then call requestRedeem(kashAmount) before the batch cutoff.
Do not infer yield from copy. Check NAV history, operator assumptions, portfolio exposure, batch status, and Risks before sizing capital.
Contracts use requestMint / requestRedeem. ABI reference: frontend/lib/contracts/kashYieldABI.ts.
// viem-style sketch โ KASH-ETH native deposit
const vaultEth = '0x92c5833Deaac65a7aCB47867Cf009cAC1bF1dD5a' as `0x${string}`;
const kashTokenEth = '0x8642483DcCE55270692aD559dCac7cf7eA0F9Bd9' 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: read NAV, watch BatchProcessed; to exit:
// await wallet.writeContract({ address: kashTokenEth, abi: erc20Abi, functionName: 'approve', args: [vaultEth, kashWei] });
// await wallet.writeContract({ address: vaultEth, abi, functionName: 'requestRedeem', args: [kashWei] });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("0x92c5833Deaac65a7aCB47867Cf009cAC1bF1dD5a")
# 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)