🤖 AI Agent Friendly

KASH

Enhanced Yield Protocol

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.

🚀 Launch AppDocumentationGitHub →

Live metrics

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.

KASH-BTC
P.A. Yield
Per-Token NAV
Total NAV
KASH-ETH
P.A. Yield
Per-Token NAV
Total NAV

Why KASH?

🔋

Funding Rate Yield

Strategy targets market-neutral funding income; superior yield from innovative strategies.

📊

Transparent Metrics

Verify user assets on chain. Read NAV and batch events (e.g. getNAV(), BatchProcessed) — every position is auditable in real time.

💰

Passive Income

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

Built 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"
}
  • Deposit assets — KASH-ETH accepts native ETH or WETH; KASH-BTC accepts wBTC. USDC and other tokens are not supported — swap first if needed.
  • Minimums — Mint requests below ~$10 oracle USD are rejected by the frontend and skipped by batch ops; redeems have no minimum.
  • Contract-first — Integrate via KashYield + ERC-20 KASH; optional UI is unrelated to execution.
  • Deterministic scheduling — Poll isUserWindow, submit before batch cutoff, await BatchProcessed.
  • Bounded surface area — Primary flows: mint, redeem, cancel; approvals only where ERC-20 pulls apply.
  • Composable ERC-20 — Move KASH like any token; remember redeems move KASH back to the vault during requests.
  • Ops reality — Strategy execution and NAV inputs rely on protocol operators — audit trust assumptions in docs, not buzzwords.
  • Decision-grade reads — NAV, fee bps, pending requests, and batch tuples are exposed for monitoring / risk triggers.

Verify before you allocate

Verification checklist: confirm each item against live chain state using your own RPC, Arbiscan, or an indexer before you allocate capital.

NAV

Read getNAV() on each KashYield vault and totalSupply() on the matching KASH token. Multiply: totalNAV = nav × supply / 10^18.

Audit every NAV component
  1. Arbitrum vault balances: read provider.getBalance(vault) for ETH and balanceOf(vault) for WETH, wBTC, and USDC.
  2. Aave positions: read the vault's aToken balances (aWETH / awBTC) and variable debt token balance (USDC borrow) on Aave V3 Pool.
  3. Chainlink prices: call latestRoundData() on the ETH/USD and BTC/USD price feeds to value the collateral.
  4. Hyperliquid chain: query the HL info endpoint with {type: 'clearinghouseState', user: hlAccount} for the vault's HL account. Read perp position sizes, USDC spot balance, and marginSummary.
  5. HL mark prices: query {type: 'perpetualMetaAndAssetCtxs'} for current mark price and funding on ETH-PERP and BTC-PERP.
  6. Recompute: total portfolio USD = vault assets + Aave collateral − USDC debt + HL spot + HL perp value. NAV = portfolio USD / KASH totalSupply.

Fee

Read feeBps() on the same contracts. Protocol fee is 5 bps; confirm on-chain before sizing trades.

Batches & settlement

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

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.

Step-by-step TVL verification
  1. KASH-ETH: getNAV() on 0xC5C8…E68d × totalSupply() on 0xf294…9962.
  2. KASH-BTC: getNAV() on 0x86B0…fC2E × totalSupply() on 0x4f62…8445.
  3. Cross-check the sum by adding the Arbitrum vault balances, Aave positions, and the Hyperliquid clearinghouse state for the matching vault account.
  4. Do not infer yield from marketing copy. Use only on-chain NAV and your own price feeds for TVL.

Verified source code

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

Agent Quickstart

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.

1. Load facts

Chain ID 42161, RPC https://arb1.arbitrum.io/rpc, ABI from kashYieldABI.ts.

2. Preflight reads

Before signing, read paused(), isUserWindow(), currentNAV(), feeBps(), and getCurrentBatchCycle().

3. Mint

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).

4. Monitor

Watch MintRequested, RedeemRequested, BatchProcessed, then mintClaimed / redeemClaimed and TokensClaimed after you claim.

5. Claim mint

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).

6. Redeem

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}.json

7. Risk gate

Do not infer yield from copy. Check NAV history, operator assumptions, portfolio exposure, batch status, and Risks before sizing capital.

Minimal integration (matches deployed ABI)

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).

Python (Web3.py) — no pip SDK yet

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)