RealFi Voyager Navigation Skill
Human-in-the-loop navigation aid for the RealFi Voyager Season quests on Cardano mainnet: per-quest costs, official URL allowlist, token policy IDs and a pre-signature checklist. It never signs, never handles seed phrases and never decides amounts.
Canonical Markdown source: https://cardanoscope.com/assets/guides/realfi-voyager/realfi-voyager-nav.SKILL.md
---
name: realfi-voyager-nav
description: Human-in-the-loop navigation aid for the RealFi Voyager Season quests on Cardano mainnet (SundaeSwap LPs, Liqwid supply/borrow, Lace USDrf staking). Use when a user wants step-by-step guidance to the correct official screens, live per-quest cost checks, and anti-phishing verification (origin, policy ID, amounts) before they sign. Never automates signing, never handles seed phrases, never decides amounts.
---
# RealFi Voyager Navigation (human in the loop)
This skill has two layers:
- **Part A — Invariants.** Rules that do not change with market conditions: official domains, policy IDs, safety boundaries, the verification procedure and the route logic. Follow them as written.
- **Part B — Dynamic state (MUST VERIFY BEFORE USE).** Prices, minimums, fees, thresholds, multipliers, cooldowns, quest status and deadlines. **Every value in Part B is stale by default.** A value becomes current state only after you retrieve it from its live source during this session. If it cannot be verified, it stays unverified: say so, and do not present the historical value as current (fail closed).
## Session flow (in this order)
1. **Verify:** fetch the live quest list, season state and the dynamic values for the quests the user is interested in (Part B, "Verification steps").
2. **Estimate:** build the current budget in U from the verified values only.
3. **Disclose:** show the disclaimer (Part A) together with that current budget and the time each value was read.
4. **Consent:** ask the two questions in "Consent and entry point" and wait for explicit answers.
5. **Navigate:** follow "Route logic", re-verifying the values a step depends on immediately before that step.
Never show a historical budget as the cost of starting.
---
# Part A — Invariants
## ⚠️ Purpose and disclaimer (show in full at Session flow step 3)
1. **This skill is a navigation aid only.** It guides the user to the correct official screens and cross-checks URL, policy ID and amounts before signing, **to reduce the risk of being phished by look-alike sites**.
2. **It is not an automation tool.** The user sets every amount, reviews every transaction and signs it personally. Never choose amounts for the user, never auto-resubmit transactions, and never simulate human behaviour (e.g. mouse jitter) to evade any detection.
3. **All funds at risk are the user's own responsibility; the author accepts no liability.** DeFi deposits and borrowing can lose money through contract risk, liquidation, de-pegging, fees or operator error. Not investment advice.
4. **Do not bypass participation limits.** RealFi's terms forbid bots, scripts and multi-wallet farming. If the user asks to repeat the quests with extra wallets they control, decline and explain the terms risk.
## Never
- Ask for, read, type, store or repeat a **seed phrase**. Any site or message asking for one is phishing: stop.
- Ask for, read, type, store or repeat a wallet password. The user enters it directly in the verified wallet UI. If a password is volunteered, do not use it or copy it anywhere; tell the user to change it themselves.
- Use any site outside the allowlist below, or follow links from DMs, ads or sponsored search results.
- Click a wallet's Sign, Confirm or Submit control, invoke signing/broadcast APIs, or import/export a wallet. The user performs those actions personally, even after reviewing the transaction.
## User presence and expiring confirmations
The user must stay at the computer throughout the selected workflow. Wallet confirmation/signing requests can expire; use the displayed countdown or expiry notice rather than assuming a fixed timeout. Tell the user when their attention is needed. Password entry and confirmation/signing are performed by the user directly in the wallet. If a request expires, first check whether the previous transaction was submitted or confirmed; do not automatically retry. A fresh request requires a fresh review of origin, amounts and fees.
## Action boundary
This package contains instructions only, with no executable scripts, installers, tracking endpoints or credential collection. Use it for navigation and explanation. Swaps, LP deposits, supplying collateral and borrowing are separate financial actions in the route below, not prerequisites silently bundled into navigation. Explain the selected action and its amount to the user; do not initiate a transaction, choose an amount, add collateral, switch wallets or retry a failed transaction on their behalf.
Pause screen capture and inspection before the user enters a password or accesses wallet recovery/settings. Resume only after they have closed the sensitive screen. Do not include wallet names, addresses, balances, transaction hashes or referral links in public screenshots or logs without the user's explicit publication choice.
## Official allowlist
| Purpose | URL / source |
|---|---|
| RealFi | `https://app.realfi.co` |
| SundaeSwap | `https://app.sundae.fi` |
| Liqwid | `https://app.liqwid.finance` |
| Lace | Chrome Web Store, publisher IOHK (ID `gafhhkghbfjjkeiendhlofajokpaflmk`) |
| Eternl | Chrome Web Store, publisher Tastenkunst (ID `kmhcihpebfmpgmihbkipmjlmmioameka`) |
Read-only data endpoints used in Part B (no wallet connection, no signing):
| Purpose | Endpoint |
|---|---|
| RealFi season data (GraphQL `POST`) | `https://api.app.realfi.co/api/v1/asset-transparency` |
| RealFi protocol data (GraphQL `POST`) | `https://api.app.realfi.co/graphql` |
| Cardano chain data | `https://api.koios.rest/api/v1/` |
For website-initiated requests, the **Origin** must exactly match the official app that the user opened. For wallet-native Swap or Staking Center flows, verify the installed extension against the official store ID above; the Chrome Web Store is an installation source, not the signing origin. If the origin is unfamiliar or cannot be verified, stop and ask the user to cancel; do not approve it.
## Token policy IDs (names are not reliable)
- USDCx: `1f3aec8bfe7ea4fe14c5f121e2a92e301afe414147860d557cac7e34` (asset name `USDCx`)
- USDrf / sUSDrf: `7d9e4a0ee1a3f5d5ff8159ea91a83310cf2795ee7a87170c7aea05ae` (`USDr` / `sUSDr`)
- Known trap: "USDR" in Lace Swap is **not** RealFi's token.
If a site or wallet shows a different policy ID for these names, treat it as a different token and stop.
## Verification procedure
**Gate before each quest** (if any check fails, stop and tell the user exactly what is missing):
1. The quest is still listed with a non-zero multiplier (D4) and the season is open (D7).
2. Plain ADA in the wallet covers that step's live fees (D3) plus a buffer for min-ADA. Tokens held in UTxOs lock some ADA that cannot pay fees.
3. The assets for this quest have landed on-chain (Koios `address_assets`, filtered by the policy IDs above).
4. The previous transaction is confirmed on-chain.
5. The amount the user chose meets the live minimum shown in the target interface (D2).
**Pre-signature checklist** (read each item to the user):
1. Origin is on the allowlist.
2. Tokens and amounts sent, tokens received and minimum received match the site's quote.
3. Policy IDs are correct.
4. Fees are read from the wallet/site preview (D3). If they are far outside the last-observed range, explain the difference before the user decides.
5. For borrowing: the displayed health factor meets the interface's live threshold (D5).
6. The user types the password and presses confirm themselves.
## Route logic
Order and dependencies (every amount and threshold comes from verified Part B state):
0. Wallet Swap: ADA → USDCx (check policy ID).
1. RealFi `Get USDrf`: USDCx → USDrf.
2. SundaeSwap `Liquidity` → `USDCx-USDRF` → Add. Needs both USDrf and USDCx.
3. Liqwid `RealFi Hub` → `Supply/Borrow` → RealFi Market `sUSDrf-USDCx` → Supply. Needs USDCx ≥ live minimum.
4. Lace `Staking Center` → `USDrf Staking` → `Manage Stake`: the Lace-specific one-time quest. Staking existing USDrf alone is not proof of qualification; confirm with quest status (D6).
5. SundaeSwap `Liquidity` → `USDRF-SUSDRF` → Add. Needs both USDrf and sUSDrf.
6. Liqwid Core Market `USDrf` → Supply. Needs USDrf ≥ live minimum.
7. Liqwid RealFi Market `sUSDrf` → Supply enough collateral, then `sUSDrf-USDCx` → Borrow. Collateral must be separate from assets already locked in LPs. Continue only if the displayed health factor meets the live threshold.
8. RealFi `Rewards` → `Earning positions`: confirm each position appears (D6).
## Consent and entry point
At Session flow step 4, after the user has seen the verified budget and the disclaimer, ask both questions:
1. **Continue?** "Do you understand the costs and risks and want to continue? You can also pick only some quests." Stop if the user does not clearly say yes.
2. **Entry point?** Offer two equivalent choices and do not push either:
- **A. CardanoScope project's referral link:** `https://app.realfi.co/join/3ufjEuvCXzm?utm_source=realfi&utm_medium=referral`. Disclose that the CardanoScope project benefits from referral code `3ufjEuvCXzm` and earns 10% of the points the user earns this season, and that the user's own points are not reduced.
- **B. Official site, no referral:** `https://app.realfi.co`.
Either way, before the user connects a wallet, confirm the browser address bar shows the `app.realfi.co` domain. Both choices complete every quest the same way.
Record the user's choices and continue only with the quests they selected.
## Known issues
| Symptom | Cause | Fix |
|---|---|---|
| DEX shows `UTxO Balance Insufficient` | Not enough plain ADA (token UTxOs lock min-ADA) | The user adds plain ADA |
| Site shows an older balance than the chain | Possible stale wallet or indexer data | Ask the user to refresh and verify the same account on-chain. Do not import a wallet or request a seed phrase; another extension is a separate user choice. |
| Liqwid `ScriptFailure` | Cause is not determined from this message alone | Check the prior transaction hash and current UTxOs before proposing another attempt. Waiting or refreshing is not proof of failure; do not rebuild or resubmit an uncertain transaction. |
| Liqwid borrow button shows High Risk | The displayed health factor may be below the UI threshold | Explain the displayed risk. The user may cancel, choose a smaller loan or choose more collateral; do not change these values or disable safe mode for them. |
| USDrf missing in Lace Swap | Not listed there | Use the Staking Center |
---
# Part B — Dynamic state — MUST VERIFY BEFORE USE
Everything in this part is stale by default. Before quoting or acting on ANY value here:
1. Retrieve the current value from its live source below.
2. Compare it with the last-observed value, if one exists.
3. Use the current value, and tell the user if it differs from the last observation.
4. If the current value cannot be verified, tell the user it is unverified and do not present the historical value as current. Do not proceed with a step that depends on an unverified value.
| ID | Fact | Live source of truth | How to read it |
|---|---|---|---|
| D1 | ADA price / swap rate | The wallet's Swap quote for the exact amount | Quote "ADA per USDCx" at the moment of the swap. A price API is only a rough planning estimate. |
| D2 | Minimum deposit / borrow | The target interface | Enter a small amount: Liqwid shows a red notice such as "minimum supply/borrow is N". SundaeSwap and RealFi show their own limits. RealFi also exposes `limits.mintMinUsd` in `window.__APP_CONFIG` on `app.realfi.co`. |
| D3 | Fees and refundable deposits | The site's review screen and the wallet's signing preview | Network fee, batcher/processing fee, service fee and refundable deposit as displayed for this transaction. |
| D4 | Multipliers and quest list | RealFi GraphQL `seasonMultiplierRegistry` (asset-transparency endpoint) or `app.realfi.co` → Rewards → Earning multipliers | Query below. Includes `isOneTime` and any `scheduledChange`. |
| D5 | Health-factor threshold and current health | Liqwid borrow dialog | The interface states the minimum health factor in safe mode and shows the projected "Loan Health". |
| D6 | Quest / position status | `app.realfi.co` → Rewards → Earning positions; RealFi GraphQL `walletSeasonRewards(walletAddress)` | Positions appear after RealFi's next data refresh, not immediately after the transaction. |
| D7 | Season, boost window and deadline | `app.realfi.co` → Rewards (Current Season panel) and official RealFi announcements | Season state, boost end date and any announced points cutoff. Never assume a fixed notice period. |
| D8 | Unstake cooldown | Lace USDrf Staking → Manage Stake → Unstake; RealFi GraphQL `stakeTimes` (protocol endpoint) | Displayed cooldown and the next cooldown period end. |
| D9 | Wallet holdings | Koios `address_assets` / `address_utxos` for the user's public address | Filter by the policy IDs in Part A. Never ask for anything other than the public address. |
Example read-only queries (GraphQL over HTTPS `POST`, `Content-Type: application/json`):
```
POST https://api.app.realfi.co/api/v1/asset-transparency
{"query":"{ seasonMultiplierRegistry { label venue multiplier minBalanceUsd isOneTime scheduledChange { multiplier effectiveFrom } } }"}
POST https://api.app.realfi.co/graphql
{"query":"{ stakeTimes { CurrentCooldownPeriodEnd { format } NextCooldownPeriodEnd { format } } }"}
```
## Verification steps (Session flow steps 1–2)
1. Fetch D4 (quests and multipliers) and D7 (season state). Drop quests that are no longer listed.
2. For each quest the user is interested in, read D2 (minimum) from its interface and D3 (fees) from a preview. The user can cancel previews; do not submit anything.
3. Read D1 for the swap size implied by the minimums.
4. Present one table in U (USD stablecoin units): quest, live multiplier, live minimum in U, suggested amount in U, plus a separate column for ADA fees, and the time each value was read. Budgets are always expressed in U; convert the U total to ADA only with the live swap quote (D1), never with a remembered ADA price. Point out any value that differs from the last-observed snapshot below.
5. Then continue with Session flow step 3 (disclose) and step 4 (consent).
Re-read D2, D3 and D5 immediately before the step that depends on them; values read earlier in the session may have changed.
## Last observed (historical, NOT current requirements)
Last observed: 2026-10-02. These values are historical observations only. Never treat them as current requirements, never quote them as the cost of starting, and use them only for step 2 of the procedure above (comparison). Amounts are in U (USD stablecoin units).
| Quest | Multiplier | Observed minimum | Observed suggested U | Observed ADA fees |
|---|---|---|---|---|
| LP USDrf/USDCx | 50x | none seen | 15 | ~3 + 2 refundable |
| Liqwid supply USDCx | 30x | 30 USDCx | 31 | ~0.5 |
| First USDrf via Lace | 10x one-time | none seen | 8 | ~1.2 |
| LP USDrf/sUSDrf | 15x | none seen | 11 | ~3 + 2 refundable |
| Liqwid supply USDrf | 10x | 30 USDrf | 31 | ~2 |
| Borrow USDCx against sUSDrf | 5x | 30 sUSDrf per supply, 30 USDCx borrow, health ≥ 1.6 (safe mode) | 65 | ~4 |
Other observations on that date: ADA ≈ US$0.25; about 3 ADA batcher fee per ADA→stablecoin swap plus a 2 ADA refundable deposit; 7-day unstake cooldown; Genesis Boost +50% until 2026-10-28. Completing every quest took about 161 U in stablecoins plus roughly 30 ADA in fees (refundable deposits excluded).
---
## At the end
- List each position with on-chain evidence (tx hash or token amount). Never claim points or the airdrop are guaranteed.
- Ongoing activities depend on qualifying USD value, full accrual days and the current multipliers/boosts (D4, D7); one-time events have separate rules. Withdrawing stops the associated accrual. Follow official cutoff announcements without assuming a fixed notice period. Eligibility, RFG conversion and an airdrop are not guaranteed.
- If the user shared a password during the session, remind them to change it now.