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.

Smart earn switched off since 15 Oct 2026 — for now this is an ordinary loan.

Hobba pulled the entire leverage out of the vault because borrowing costs more than the vault earns: vault net ≈ 6.1%, borrowing ≈ 7.8%, spread −1.7 pp. On the unwind all yield accumulated so far (0.72 USDC) went into repayment, so my debt fell to 0.834298 USDC — but now, while the engine is off, the debt only grows with interest and nothing repays it. “Self-repaying” is not a permanent property of the loan: it only holds while the rate spread is positive. Hobba says it will switch the engine back on once conditions improve — this page records that every morning.

Last harvest: 14 Aug 2026 (— days ago) · latest daily snapshot: —

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.
Comparison · with live rates from the morning snapshot

A 7 % bank loan, or borrowing on-chain?

A bank lends to you without collateral, at a fixed rate and with statutory consumer protection, and the money you keep there does not work for you. On-chain you borrow at — variable interest, but only against collateral. Meanwhile that collateral earns, and Hobba's engine uses its spare capacity to pay down your debt. How much that is worth depends almost entirely on one ratio: how much you borrow relative to what you own. Try it.

—
—
—
—

On-chain rates as of —: borrowing —, vault — gross, Hobba fee — of yield, collateral — in SOL. The engine fills up to — total LTV, as measured on our own position.

Net cost of the loan over one year
Total LTV (you + engine)
—
—
Collateral earns
—
in SOL, not part of the loan's cost
Change in collateral value
—
market risk you carry even without a loan
What this calculator does not tell you. (1) Rates are variable and change daily; a bank guarantees a fixed one. (2) The loan is in USDC, not euros, so it carries currency risk. (3) There is no consumer-credit protection: no right of withdrawal, no regulator to complain to. (4) The fairer bank comparison is a Lombard loan (a loan against pledged securities), not an unsecured personal loan. (5) The engine moves yield into repayment only at a harvest, and harvests are infrequent, so the measured debt rises between harvests (see below). (6) If SOL falls, the operator has to deleverage in time. If it does not, liquidation hits the whole collateral. This is a projection from today's rates, not an offer or financial advice.

And what we actually measured on our own position

We posted the collateral on 8 Jul 2026, when SOL was worth ~$77.10 (CoinGecko, hourly data point around 14:39 UTC). The change in the position's value since then, split into parts that have nothing to do with each other:

Rise in the SOL price
1 SOL × (— − $77.10). Market, not loan: the same would have happened if you had simply held SOL.
—
Yield on collateral
1.000000 → — SOL on Jupiter Lend, at today's price
—
Change in our debt (Hobba's definition, by netting)
1.140000 → — USDC. Last harvest —; vault yield since then has not been moved into repayment.
—
Total, in dollars
Excluding the EUR/USD exchange-rate effect.
—
Why this is not "profit from the loan". Nearly all of the result is the rise in the SOL price, which would be the same without any loan, and could just as easily have been a loss. That is the real argument for borrowing instead of selling: whoever needed money and sold SOL at $77 missed that rise, while whoever borrowed against it kept it. But that only holds while the price goes up. The loan itself has so far cost —, while the collateral earned — over the same period.
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 has so far borrowed a total of — USDC (— × OperatorBorrowed) and returned — USDC (— × OperatorRepaid). The deposited_to_vault field on the position account reads — USDC, while borrowed − returned gives —. The difference of — USDC is not an error: a repayment returns the market value of the vault shares sold, while deposited_to_vault records their cost — it is vault yield realised on repayment (most of it, 0.117194 USDC, in the full deleverage of 27 Aug 2026). The daily check verifies that this yield is never negative, never decreases and never exceeds 0.5 % of repayments; if any condition fails, the snapshot is not published.
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.
The whole protocol · daily on-chain snapshot

How much money is in Hobba, and how much does Hobba earn?

Until now this page only tracked our own position. Every morning at 07:00 the same job now also records every position in the protocol: how much collateral is deposited, how much is borrowed, and how much USDC flowed into Hobba's treasury. We keep the snapshots ourselves and publish them here, so the history does not depend on anyone's paid service.

TVL today
—
—
Collateral deposited
—
—
Positions
—
—
Hobba's earnings (total)
—
—
TVL in dollars and SOL deposited—
Loading history…
How to read it. —
Hobba's earnings by monthUSDC paid into the treasury · after the partner share
Loading the treasury ledger…
Where Hobba earns. Only from the harvest: when the vault produces yield, Hobba keeps a share (15% nominal) and the rest repays users' debt. There is no fee on deposit, borrow, withdraw or repay; the contract itself says so. Borrow interest goes to Jupiter Lend, not to Hobba. The fee was 0% until 7 July 2026, which is why the chart starts in July.
Sources and limits. TVL history up to 9 October 2026 comes from the Hobba team's public Dune query; from 10 October 2026 it is our own daily on-chain snapshot. Collateral and debt of each JupLend position are computed by Hobba's public endpoint (tick math), the same as for our position. Earnings are the sum of every payment into the treasury USDC account, read transaction by transaction since the first fee. Treasury balance today: —.
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.