Payments and escrow
Every lease's money lives in an escrow account owned by the Kiln program. This page shows where it goes, with real numbers.
Accounts involved
| Account | Owner | Holds |
|---|---|---|
| Renter's USDC account | You | Your USDC before renting, and refunds after |
Escrow (["escrow", lease]) |
The lease account (a program address) | Your deposit while the lease is open |
| Provider's token account | The listing's owner wallet | Payouts |
| Treasury token account | The treasury wallet set in the protocol config | Protocol fees |
No person holds the escrow's keys. Tokens leave it only through the program's settle and close_lease rules.
The formulas
deposit = price_per_hour × hours (when you open or top up)
total_owed = min(verified_secs × price_per_hour ÷ 3600, deposit) (rounded down)
payment = total_owed − already_paid (each settle)
fee = payment × fee_bps ÷ 10000 (fee_bps = 250 → 2.5%, used to buy back and burn $KILN)
to_provider = payment − fee
refund = what is left in escrow when the lease closes
All amounts are integers in the token's smallest unit, and rounding is always down, in the renter's favour.
Worked example
A listing costs $2.00 per hour. You open a lease for 10 hours.
| Event | Escrow | Provider | Treasury | You |
|---|---|---|---|---|
| Open lease: deposit 10 × $2 | $20.000 | 0 | 0 | −$20.000 |
| 6 h proven, node settles: $12 owed, 2.5% fee | $8.000 | $11.700 | $0.300 | |
| Machine offline 2 h: nothing counted | $8.000 | |||
| 1.5 h more proven, then you close: $3 owed | $5.000 → 0 | +$2.925 | +$0.075 | +$5.000 refund |
| Total | 0 | $14.625 | $0.375 | spent $15.000 |
You funded 10 hours, the machine proved 7.5, and you paid for exactly 7.5. The two dark hours and the half hour you didn't use came back.
Top-ups
top_up adds hours to a running lease at the lease's original price. The deposit grows and the end time moves out. The maximum total length is 2,160 hours (90 days).
Who can do what
| Action | Who | When |
|---|---|---|
open_lease |
Renter | Any active listing |
top_up |
Renter | Before the lease ends |
settle |
Anyone | Any time; pays only verified, unpaid time |
close_lease |
Renter or listing owner | Any time; settles, then refunds the rest to the renter |
Because settle is permissionless, a provider is never stuck waiting on the renter, and because closing always refunds the renter, a renter is never stuck waiting on the provider.
Paying in $KILN
Every listing is priced and settled in USDC, so prices are stable and providers always know what they'll earn. Renters who hold $KILN can pay with it instead:
- The page asks Jupiter, Solana's swap router, how much $KILN buys the deposit in USDC, plus a small buffer.
- One transaction swaps that $KILN to USDC and opens the lease with it.
- The swap guarantees a minimum USDC output; if the price moves more than 1%, the whole transaction is cancelled and nothing is spent.
- Any few cents of extra USDC stay in your wallet. Refunds come back in USDC.
The escrow, settlement and refund rules are exactly the same however you paid.
Network fees
Solana transaction fees are paid in SOL by whoever sends the transaction: you for opening and closing, the provider's heartbeat key for heartbeats and settlement. They are a tiny fraction of a cent each.