Read-only Solana dApp · live from the chain

My €1 of debt — live on the Solana chain

From my own wallet I deposited 1 SOL as collateral and borrowed 1.14 USDC (≈ €1) on Hobba. This page reads the state straight from the chain and shows how Hobba's yield engine works every day to service that debt. No backend, no database, nothing taken on trust — all of it publicly verifiable.

New, 25 Aug 2026: on 14 Aug my position was harvested for the first time — the contract emitted UserHarvestPayout and 0.266654 USDC of yield went into repaying debt. The counter that had read zero for a month no longer reads zero. Over the same period the engine re-levered the position three more times, and my debt — by Hobba's own definition — fell from 1.140000 to ~1.1352 USDC: negative interest, measured. All three are broken down below, to the micro-USDC, together with two corrections to earlier claims on this page.

Connecting to Solana RPC… SOL Last updated: · auto-refresh every 60 s
My position · live

1 SOL locked, ~€1 borrowed — and all of it works for me

The fixed amounts (collateral and borrowed USDC) are a verified snapshot of the transaction from 8 Jul 2026. Everything else — SOL price, collateral value, LTV and distance to liquidation — is computed live from the current price.

snapshot
Collateral
1 SOL
in Hobba · self-custody
snapshot
Borrowed
1.14 USDC
≈ €1
Collateral value
live · 1 SOL × price
LTV — my loan
only what I borrowed myself
LTV — whole position
includes the engine's working borrow
To liquidation (gross)
how far SOL would have to fall
snapshot
Collateral works in
Yield vault
vault_provider=1 · switched twice in August
Why the position is “self-repaying”. The collateral is deployed into a yield vault, and Hobba's engine periodically harvests the yield and repays debt with it. At protocol level this is not theory: decoding every UserHarvestPayout event between 14 Apr and 25 Aug 2026 we counted 1,981 harvests, 2,433.72 USDC of gross yield and 1,940.73 USDC of debt repaid out of that yield. For comparison, on 27 Jul the same figures were 1,280.73 and 1,033.01 — almost doubled in 29 days. The engine ran again today. On my position the effect is now measurable rather than projected for the first time: the debt fell from 1.140000 to 1.135197 USDC (25 Aug, right after the first harvest), and at today's rates the net repayment pace is . How that is computed, and where its limits are — right below.
First harvest · 14 Aug 2026 · measured on-chain

The counter that stood at zero has moved

From the position opening on 8 Jul until mid-August, not a single UserHarvestPayout existed for my wallet. This page said so honestly: the measured repayment counter stood at 0.00. On 14 Aug 2026 at 10:28 UTC that changed — Hobba's contract harvested my position for the first time and emitted an event carrying every number. These are those numbers, decoded from the Program data: log of transaction 3jWzKkgw…U2yVJN ↗.

event
Gross yield
0.313710 USDC
gross_harvest · crystallised out of the share price
event
Protocol fee
0.047056
fee_amount · 15.000% of gross, exactly
event
Into debt
0.266654
debt_repaid · 85% of the yield → repayment
event
Paid out to me
0.000000
user_amount · all of it went to debt, none to pocket
Where the money physically went — verified, not assumed. That transaction burned 0.288676 vault shares, 0.313710 USDC left the vault reserve, of which 0.047056 landed in Hobba's treasury 6vCAxJ6m… and 0.266654 in the JupLend pool 7s1da8Dd… that carries the debt. The sums reconcile to the micro-USDC.
Along the way we measured something that could not be read before. The vault share price is not exposed as a readable account — but a harvest reveals it: divide the USDC that came out by the shares that were burned. 0.313710 ÷ 0.288676 = 1.086727 USDC per share on 14 Aug. My account today holds 42.118669 shares at an implied cost basis of 1.087748 — so after the harvest and three fresh leverage deposits the position sits roughly at its new cost basis.
Correction: the earlier projection of “first harvest around 2 Nov 2026” was wrong — and here is why. It was derived from a hypothesis about a fixed ~1 USDC threshold (first harvests of small positions were 1.0008–1.0035 USDC). My harvest fired at 0.313710 — far below that threshold, and 80 days earlier than projected. The data points to a different explanation: 14 Aug was a mass sweep day — 68 harvests across 47 wallets, where a typical day covers 8–15 wallets. So this was not a threshold I crossed but operator policy that happened to sweep small positions that day. The threshold hypothesis is thereby falsified, not confirmed — and that is how we record it.
Where the money actually goes · with live rates

Why 1 SOL does not earn 8%, but about 1 USDC a year

The most common misreading of this model — I held it myself — goes: “I put in ~$97, savings pay 8%, so I earn ~$8 a year and a 1.14 loan disappears in two months.” It does not work that way, and it is worth understanding why. The SOL does not go into savings. The SOL is only collateral. What goes into the yield vault is borrowed USDC — and borrowed money pays interest. What you earn is the spread between two rates, and only on the borrowed amount.

flowchart TD SOL["1 SOL collateral
≈ ${{sol}} · stays yours"]:::own SOL -->|"deposited as security"| JL["Jupiter Lend
collateral itself earns +{{collApy}}% (in SOL)"]:::lend JL -->|"opens borrowing capacity
up to ~60% LTV"| CAP["≈ {{cap}} USDC of borrowing room"]:::cap CAP -->|"you took 1.14"| MY["YOUR LOAN
1.14 USDC → airKUNA treasury"]:::mine CAP -->|"Hobba takes the rest"| WB["WORKING BORROW
{{wb}} USDC · never leaves the protocol"]:::engine WB --> V["{{vaultName}}
+{{vaultApy}}% gross"]:::vault V -->|"harvest ~every hour"| H{"Yield split"}:::split H -->|"15%"| FEE["Hobba fee
−{{fee}} $ / yr"]:::cost H -->|"85%"| PAY["Gross toward debt
+{{payGross}} $ / yr"]:::good JL ==>|"interest {{borrowApy}}% on the WHOLE debt of {{total}}"| INT["Interest
−{{int}} $ / yr"]:::cost PAY --> NET["NET AGAINST YOUR DEBT
+{{net}} $ / yr"]:::net INT --> NET classDef own fill:#fff,stroke:#002F6C,color:#002F6C,font-weight:600; classDef lend fill:#0A3B82,stroke:#001631,color:#fff,font-weight:600; classDef cap fill:#fff,stroke:#5B6B82,color:#14202E,font-weight:600; classDef mine fill:#C8912A,stroke:#9a6f1f,color:#fff,font-weight:600; classDef engine fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef vault fill:#0A3B82,stroke:#001631,color:#fff,font-weight:600; classDef split fill:#fff,stroke:#C8912A,color:#002F6C,font-weight:600; classDef cost fill:#C0181C,stroke:#7d1013,color:#fff,font-weight:600; classDef good fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:600; classDef net fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:700;
Gold = money you actually received. Navy = capital that works but never leaves the protocol. Red = cost. Green = what repays your debt.

The same story in numbers, per year

Rates are pulled live from Hobba's public API, so this table does not go stale. Last reading: .

Vault yield, gross
Perena USDC · on USDC of working borrow
Hobba fee
15% of the gross yield
Interest on the borrow
on the whole debt of USDC
Net against your debt
rate spread — this is the entire engine
At those rates the 1.14 USDC loan is repaid in . Not in 8 months — that earlier projection took the gross yield and ignored the cost of borrowing entirely, which made it twice as optimistic as reality. Here both are deducted: the fee and the interest.
The collateral earns its own yield along the way — but in SOL. Jupiter Lend pays on deposited SOL, so our collateral has grown from 1.000000 to SOL. That is ≈ SOL a year and it does not repay the USDC debt — it grows the asset. Taken together: your net worth grows faster than the repayment pace suggests, but these are two separate things and should not be conflated.

So why does the debt read 46.95 USDC when I borrowed 1.14?

Because two borrowings hang on the same obligation. The larger one is not yours — it is money Hobba borrowed and immediately turned into vault shares of equal value. Debt and asset cancel out, leaving only your part. That is exactly how Hobba's own SDK computes it.

flowchart TD T["TOTAL OBLIGATION DEBT
{{total}} USDC
(this is what you see on Jupiter Lend)"]:::tot T --> A["Your loan
1.14 USDC"]:::mine T --> B["Hobba's working borrow
{{wb}} USDC"]:::engine B <-->|"equal value —
they cancel out"| C["Vault shares
{{shares}} shares ≈ {{wb}} USDC"]:::vault A --> R["YOUR ACTUAL DEBT
= {{total}} − {{wb}}
= {{mine}} USDC"]:::res C -.->|"nets out"| R classDef tot fill:#fff,stroke:#5B6B82,color:#14202E,font-weight:600; classDef mine fill:#C8912A,stroke:#9a6f1f,color:#fff,font-weight:600; classDef engine fill:#002F6C,stroke:#001631,color:#fff,font-weight:600; classDef vault fill:#0A3B82,stroke:#001631,color:#fff,font-weight:600; classDef res fill:#1A7A3C,stroke:#0c3f23,color:#fff,font-weight:700;
Hobba's SDK, literally: userDebt = total obligation debt − deposited_to_vault. The working borrow nets out because it is covered by the vault position it bought.
This is why the debt sometimes goes up — and that is normal, not a bug. Interest accrues continuously, while the debt only falls at the moment of a harvest. Between two harvests your debt creeps up, then drops at the harvest. A sawtooth, not a straight line. Concretely: on 25 Aug the debt was 1.135197 (below the original 1.14), and a day later already , because days have passed since the last harvest. So the difference between two days is not a measure of yield — the measure is the rate spread in the table above.
Repayment progress · measured + projected

Two debts on one position — and what is actually measurable about each

This position carries two separate debts, and their counters behave completely differently. The first is the engine's debt — leverage Hobba's operator took against my collateral — and it is measurable on-chain to the last digit. The second is my own 1.14 USDC loan — which is measured not by events but by netting, something this page previously got wrong. Both are broken down below.

Debt 1 · engine leverage
55.999670 USDC
borrowed across 4 events
Returned to the pool
2 × OperatorRepaid
Of which out of yield
0.266654 USDC
debt_repaid
Outstanding (live from chain)
deposited_to_vault
first OperatorBorrowed · 8 Jul 2026reading the position account…
This is not a projection — it is the chain's arithmetic. Against my 1 SOL of collateral the engine borrowed a total of 55.999670 USDC (8 Jul → 45.038455; then 18 Aug → 2.782185; 19 Aug → 4.727125; 22 Aug → 3.451905) and returned 10.185183 USDC (12 Jul → 7.634980; 2 Aug → 2.550203). The deposited_to_vault field on the position account today reads 45.814488 USDC — and 55.999670 − 10.185183 gives 45.814487. The difference is 0.000001 USDC, one micro-USDC of rounding on share purchases. The decoded events and the live account state agree to the last digit, and the figure above is re-read every 60 seconds.
Engine debt over timeeach step is one on-chain event · USDC
Drawing from decoded events…
Leverage is not a one-way progress bar — and that is the point, not a problem. Between 27 Jul and today SOL rose from ~$77 to ~$99. More collateral means more borrowing capacity, so the engine re-levered the position three times instead of only paying debt down. That is why the outstanding amount today (45.81) looks almost identical to the starting one (45.04), even though 10.19 USDC has genuinely been returned in the meantime. An earlier version of this page measured repayment against a fixed principal of 45.038455 and would therefore show 0% today — which would be wrong. It now measures against cumulative borrowed.

Debt 2 · my 1.14 USDC — negative interest, measured

Here we have to correct ourselves. This page used to say the counter on my loan stood at zero because no UserRepaid exists for my wallet — still true, but not the right measure. Hobba's own SDK defines the debt as my debt = total obligation debt − deposited_to_vault. The engine's working borrow is therefore netted out. By that definition my debt has gone down — and it can be checked with a number.

Loan at the start
1.140000 USDC
Debt today (Hobba's definition)
Net repaid
Change since the start
sawtooth — rises between harvests
Estimated full repayment
from live rates
Explicit repayments (UserRepaid)
0.00 USDC
deposit · 8 Jul 2026
Why the repayment is far smaller than the harvest — and why that is the honest number. The harvest returned 0.266654 USDC, but over the same period interest of USDC accrued on the entire obligation (~47 USDC, not just on my 1.14). The net is the difference: the debt fell from 1.140000 to . Small — but the sign is negative, and that is the whole thesis: the yield on the collateral exceeds the interest on the loan, so the loan repays itself. This is realised to date, not a rate and not a promise.
The limit of this number. The total obligation debt on Jupiter Lend cannot be read with a plain getAccountInfo — it requires tick math, so Hobba's public endpoint computes it. That is the only number on this page that does not come straight from the chain. We cross-check it against our own event arithmetic: with no interest at all the debt would be 46.687833, and the endpoint reports — the difference is exactly the accrued interest. The event to watch: when the debt hits zero, a transaction releasing the 1 SOL collateral will appear on the position account ↗.
My position log · live from the chain

What actually happened on my position

Every Hobba event that has ever touched my position account A2Pmj1Ar…oyLEX, with amounts exact to the micro-USDC. Nothing is copied from an interface: every Program data: log is resolved via the Anchor discriminator (sha256("event:<Name>")[0:8]) and decoded against the IDL. The list is populated from the daily snapshot, and the page adds new transactions live as soon as an RPC sees them.

Reading position history from the chain…
Why a daily snapshot rather than just “read the chain”. Public Solana RPCs are not archival — for an older account they will return an empty list of signatures instead of an error, which looks like “no transactions” but means “I don't index old data”. So a local launchd job decodes the position every day at 09:20 and stores a snapshot (data/daily/), and that snapshot never truncates history already recorded. Before it is written it must pass the reconciliation check ΣOperatorBorrowed − ΣOperatorRepaid = deposited_to_vault; if that fails, the snapshot is discarded rather than publishing wrong numbers.
How this works · for people, not just developers

How you can earn passive yield on Solana too — simply

Even as a developer I did not get Hobba straight away (it is not exactly built for the mainstream 🙂) — so here is the simplest possible explanation, using my real example above. In short: you deposit an asset, it earns yield in Solana liquidity protocols, and Hobba runs that for you.

1

You deposit an asset

You put up SOL (or cbBTC) as collateral. It stays your asset — it just starts working.

2

Hobba deploys it

The collateral automatically goes into Solana liquidity protocols (Jupiter Lend, Kamino, Perena) that pay yield.

3

The yield works — on its own

Hobba's engine harvests yield every day (see the cadence below). You do not have to do anything — passive.

4

(Optional) You borrow

You can take a small USDC loan against the collateral. The yield repays it — "self-repaying".

Everything you can do comes down to 4 buttons (Hobba "Manage") — nothing complicated:

Deposit
Add collateral → more yield, a safer position.
Borrow (optional)
Borrow USDC against the collateral.
Repay
Pay back the loan. When it hits 0 → the collateral is free.
Withdraw
Withdraw your collateral whenever you want (within limits).
How safe is it? A correction to an earlier version of this page. It used to say my SOL would have to fall ~98% for me to be in trouble. That figure counted only my own loan (1.14 USDC) and was over-optimistic. The same collateral also carries the engine's working borrow, so the position's total debt is around 47 USDC — a gross LTV of roughly 47%, not 1.5%. The realistic fall to the liquidation threshold is therefore on the order of 40%, not 98%. However: that debt is economically covered by the vault position it bought, and Hobba's risk engine deleverages as LTV rises and unwinds the leverage entirely if the spread inverts. That defence works — but it is not a reason to omit the bigger number. The rule stands: the less you borrow yourself, the safer; if you only deposit and never borrow, your loan is zero.
Honestly — it is not risk-free and it is not "mainstream-ready". The interface expects you to understand collateral and LTV; Hobba is a young protocol in closed testing; yields and borrow rates vary. (Note: the "Loan APY" figure in the calculator currently has a bug that Hobba is fixing — confirmed by the team; do not take that percentage at face value.) It is powerful, but work with small amounts and check everything yourself. Not investment advice.
How the loan is put together · cross-protocol

A single Hobba position touches several Solana protocols

Hobba is a router: it directs collateral and borrowed USDC through external lending/yield protocols, harvests yield and uses it to repay debt. Chips that light up green are protocols we have just detected in the latest on-chain transactions of the Hobba program.

Me
My wallet
1 SOL collateral →
1.14 USDC loan
deposits /
borrows
Router + risk engine
Hobba program
Hobbakk1…E2i8qG
deploys /
harvests (CPI)
Yield layer
External protocols
Jupiter Lend Kamino Jupiter Agg Perena
The loop: yield from external vaults → back into Hobba → OperatorRepay pays down my debt. A green chip = a protocol seen in the live sample ().
Engine rhythm · on-chain

How often does Hobba actually run?

This is an answer you can only reach by watching the chain: how many transactions the Hobba program executes each day. Every bar is one day — the height is the number of on-chain operations (harvest, repay, rebalance…) servicing all positions, including mine.

operations in window
average / day
consecutive active days
last operation
typical gap
Reading cadence from the chain…
today
How to read this. If the bars are even from day to day, the engine runs continuously (harvesting throughout the day, not once). That is exactly what marketing cannot show you — only on-chain history over time can.
Latest operations · live

Hobba's engine right now

The latest transactions of the Hobba program, classified by type (from on-chain logs) and by external protocol. Δ USDC = gross USDC routed in that transaction — a harvest pulls accrued yield out of the reserve and redistributes it (the bulk back into the pool that services debt, a small part to fee/operator). It is not profit and not my personal share; net new USDC in the transaction ≈ 0.

Loading latest transactions…
My on-chain footprint · verifiable

Open it and check for yourself

Pozicija #1 · founder wallet

Executed on 8 Jul 2026 on Solana mainnet. Everything below is public on Solscan.
Wallet (public): 6bwzpkSKSXbjVMBYMSdazEytkaCZatibRdmExpjSgCyA · Solscan ↗
Deposit + borrow tx: 4gKWd9Yp…jchtvq · open tx ↗
My position account: A2Pmj1ArCn3REhAnpbXcqqgHNcrrexLPEA1YdK9oyLEX · Solscan ↗ · checking…
First harvest (14 Aug 2026): 3jWzKkgw…U2yVJN · open tx ↗
Position vault shares: star9agSpjiFe3M49B3RniVU4CMBBEK3Qnaqn3RGiFM · Solscan ↗
Position token (Hobba): B7opsVGR2bi8EN18eDZi4QE3hL1fWqX6JdsPbAirYCwB
Hobba program: Hobbakk1LmW2DhE4nAKnCeU1iK7V7pKHTq3ihaE2i8qG · Solscan ↗
The honest limit of this monitor. Hobba's risk engine (vault selection, harvest timing, when leverage is increased) runs off-chain — only execution is visible. The engine's leverage we read straight from the chain (deposited_to_vault), and that is the hardest number here. My own debt, however, cannot be fully computed from the chain alone: the total debt on Jupiter Lend requires tick math performed by Hobba's public endpoint, so that one number is indirect — we cross-check it against our own event arithmetic and label it as such. No UserRepaid has ever named my wallet; the repayment happens by netting, not by an event.