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:

  1. The page asks Jupiter, Solana's swap router, how much $KILN buys the deposit in USDC, plus a small buffer.
  2. One transaction swaps that $KILN to USDC and opens the lease with it.
  3. The swap guarantees a minimum USDC output; if the price moves more than 1%, the whole transaction is cancelled and nothing is spent.
  4. 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.

Previous← Proof of rentalNextThe $KILN token →