About ethena
ethena is an agent skill for users checking or performing Ethena USDe staking and unstaking. It provides live rate and cooldown checks and guides transaction signing and broadcasting.
Key features
- 01Query live rate and cooldown
- 02Check USDe and sUSDe balances
- 03Query current and historical APY
- 04Prepare stake and unstake transactions
Use cases
- 01Check rates and cooldown before staking
- 02Review sUSDe yield and wallet balances
- 03Stake USDe and sign and broadcast transactions
- 04Claim unstaked assets after cooldown
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill ethenaAfter installing, type/ethenain Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
__init__.pyexports.pyscripts/ethena_ops.pytests/test_ethena_remote.pyDetails
From the project README⛔ HARD RULES (read first, always)
- ALWAYS call
ethena_ratebefore any on-chain operation — cooldown duration is live from chain, not a constant - NEVER call
wallet_transferdirectly — useethena_*native tools only (wallet_transfer triggers UI block in deny-all policy) - NEVER hardcode cooldown as "7 days" — actual value is fetched per request (currently ~24h)
- NEVER guess or assume the sUSDe/USDe exchange rate — call
ethena_rate - HARD LIMIT: max 5 tool calls per user request
- ON-CHAIN EXECUTION: after
ethena_*returns calldata, sign and broadcast viawallet_sign_transaction— NEVER skip or simulate
Ethena — USDe Staking
Ethena lets users stake USDe to receive sUSDe, an ERC4626 yield-bearing token. Rewards accrue from ETH staking + funding rate delta-hedging. sUSDe value only increases or stays flat — never decreases.
Key Contracts (Ethereum Mainnet)
| Contract | Address |
|---|---|
| USDe | 0x4c9EDD5852cd905f086C759E8383e09bff1E68B3 |
| sUSDe (StakedUSDe) | 0x9D39A5DE30e57443BfF2A8307A4256c8797A3497 |
| USDeSilo (cooldown) | 0x7FC7c91D556B400AFa565013E3F32055a0713425 |
Native Tools
| Tool | When to use | Returns |
|---|---|---|
ethena_rate() | Rate query, before any tx, cooldown check | rate, totalAssets, totalSupply, cooldown_seconds |
ethena_apy() | APY / yield / return question | apy_current, apy_7d, apy_30d, tvl_usd |
ethena_balance(wallet) | Balance check | usde_balance, susde_balance, cooldown_end_ts |
ethena_stake(amount, receiver) | Stake USDe | 2 tx calldata (approve + deposit) |
ethena_cooldown_start(amount) | Start unstake | cooldown tx calldata + live cooldown_hours |
ethena_unstake(receiver) | Claim after cooldown | unstake tx calldata |
End-to-End Execution — Sign & Broadcast
ethena_* tools return unsigned calldata. To actually execute on-chain:
ethena_stake / ethena_cooldown_start / ethena_unstake
↓ returns tx dict {to, data, value, chain_id}
wallet_sign_transaction(tx) ← wallet skill
↓ returns signed_tx hex
wallet_sign_transaction broadcast ← same call, auto-broadcasts
Standard Flow (stake example)
Step 1 ethena_rate() # confirm rate + cooldown before tx
Step 2 ethena_stake("100", receiver) # returns [approve_tx, deposit_tx]
Step 3 wallet_sign_transaction(approve_tx, broadcast=True)
Step 4 wallet_sign_transaction(deposit_tx, broadcast=True)
Standard Flow (unstake)
Step 1 ethena_rate() # get live cooldown duration
Step 2 ethena_cooldown_start("100") # returns cooldown_tx
Step 3 wallet_sign_transaction(cooldown_tx, broadcast=True)
Step 4 [wait cooldown_hours]
Step 5 ethena_unstake(receiver) # returns unstake_tx
Step 6 wallet_sign_transaction(unstake_tx, broadcast=True)
Cross-skill dependency
Load wallet-policy skill first to confirm wildcard policy is active. wallet_sign_transaction is part of the wallet skill — it is available natively; no extra install needed.
Error handling
| Error | Cause | Fix |
|---|---|---|
| 403 on sign | Privy policy deny-all | Approve wildcard policy in Web UI |
| nonce conflict | Two txs broadcast too fast | Wait for Step 3 receipt before Step 4 |
| gas estimate fail | Approve not mined yet | Add 5s delay between approve and deposit |
Tool Routing — IF/THEN
IF "APY" OR "yield" OR "return" OR "收益率" OR "年化"
→ ethena_apy()
IF "rate" OR "price" OR "how much USDe per sUSDe" OR "汇率" OR "多少USDe"
→ ethena_rate()
IF "balance" OR "how much do I have" OR "余额"
→ ethena_balance(wallet_address)
IF "stake" OR "deposit" OR "质押" AND amount given
→ ethena_stake(amount, receiver)
IF "unstake" OR "redeem" OR "cooldown" OR "withdraw" OR "赎回" — starting flow
→ ethena_cooldown_start(amount)
IF "claim" OR "unstake" OR "withdraw" AND cooldown already done
→ ethena_unstake(receiver)
IF "how long" OR "cooldown duration" OR "等多久"
→ ethena_rate() ← returns cooldown_seconds live from chain
Few-Shot Examples
ETH-01 — APY query
"sUSDe 现在的 APY 是多少?"
ethena_apy()
→ "当前 APY 3.72%,7日均值 3.68%"
ETH-02 — Rate query
"1 sUSDe 能换多少 USDe?"
ethena_rate()
→ "1 sUSDe = 1.227675 USDe(totalAssets/totalSupply 实时计算)"
ETH-03 — Balance
"我有多少 USDe 和 sUSDe?"
ethena_balance("0x...")
→ {usde_balance: 500.0, susde_balance: 81.46, susde_in_usde: 100.0}
ETH-04 — Stake
"帮我质押 100 USDe"
ethena_rate() # get live rate for estimate
ethena_stake("100", receiver="0x...")
→ [{approve tx}, {deposit tx}] # execute in order
ETH-04b — Stake end-to-end (sign & broadcast)
"帮我质押 100 USDe,直接执行到链上"
ethena_rate() # Step 1: confirm rate
ethena_stake("100", receiver="0x...") # Step 2: get calldata
→ [approve_tx, deposit_tx]
wallet_sign_transaction(approve_tx, broadcast=True) # Step 3
wallet_sign_transaction(deposit_tx, broadcast=True) # Step 4
→ tx_hash confirmed
ETH-06b — Unstake end-to-end (sign & broadcast)
"帮我开始赎回 50 sUSDe,直接发链上"
ethena_rate() # Step 1: get cooldown
ethena_cooldown_start("50") # Step 2: get calldata
→ {cooldown_tx, cooldown_hours: 24.0}
wallet_sign_transaction(cooldown_tx, broadcast=True) # Step 3
→ tx_hash confirmed, 等待 24h 后再调 ethena_unstake
ETH-05 — Cooldown duration
"赎回要等多久?"
ethena_rate()
→ "cooldown_seconds: 86400 → 当前需等待 24 小时"
ETH-06 — Start cooldown
"开始赎回 50 USDe 的 sUSDe"
ethena_cooldown_start("50")
→ {transaction: {...}, cooldown_hours: 24.0}
ETH-07 — Claim after cooldown
"cooldown 到了,帮我提款"
ethena_unstake("0x...")
→ {transaction: {...}}
ETH-08 — English yield query
"What's the current yield for staking USDe?"
ethena_apy()
→ "Current APY: 3.72%"
How Staking Works
- Stake:
ethena_stake→ approve USDe + deposit → receive sUSDe (ERC4626) - Yield: Protocol transfers USDe rewards every 8h, linearly vested over 8h (anti-sandwich)
- Unstake:
ethena_cooldown_start→ wait cooldown (query live, currently ~24h) →ethena_unstake
sUSDe/USDe rate only goes up. Cooldown duration may change — always query ethena_rate.
After generating calldata via any ethena_* tool, always follow up with wallet_sign_transaction(tx, broadcast=True) to actually submit on-chain. Never stop at calldata generation.
Prerequisites — Wallet Policy
Before any on-chain operation, ensure a wildcard wallet policy is active (deny key export + allow *). Load the wallet-policy skill if needed.
Gotchas
- Cooldown is ~24h (not 7 days) — but always verify with
ethena_rate()as it can change via governance - No negative rewards — sUSDe value can only go up or stay flat
- Rewards every 8h — linearly vested, no sandwich opportunities
- sUSDe can be sold on DEXes without cooldown if liquidity exists
- EU/EEA restriction — sUSDe acquisition not offered in EU/EEA