The door is open.
Until it isn't.

When a SOL lending vault lends out every loose coin, withdrawals stop and a line forms behind the door. OpenDoor turns your spot in that line into something you hold. Sell it for SOL right now, or keep it and the vault pays you when your turn comes.

door.stand()preview
SOL
your place1st
ahead of you0 SOL
sell now at 0.25% off–
door.slot()

Green at the slot means the vault is paying. When it goes dark, the line starts.

door.line()scene
you–
people ahead–
place held byyou
01 / the reserve

The SOL is in there.

A lending vault lends what you deposit. When everyone wants SOL at once, your balance is still yours and the loose SOL is gone.

02 / the line

Then you wait.

Every withdrawal that can't be paid joins a first-in, first-out line. It moves as borrowers repay.

03 / the door

Stand through the door.

Same line, same wait. Your ticket sits in a program account and the place sits on a ledger, so it can change hands.

04 / the exit

Sell it, or keep it.

Put a discount on your place. A buyer pays you SOL in one transaction and takes over the wait. No buyer, no loss.

05 / the token

$DOOR takes a cut.

Each place that sells pays a small door fee. Most of it goes back to $DOOR holders.

Next in line.

Set how many people are ahead of you and how fast the line moves, then drag the clock.

queuedrag to run the line

This is a model you set, not a reading. Real lines pay in lumps when loans settle.

your ticket
SOL
h
your place–
estimated wait–
the vault will owe you–

A ticket filed straight with the vault can't be sold. One filed through the door can.

takes from anyone0 SOL
your place–

Standing locks about 0.017 SOL of rent for a moment. Most of it returns when the place closes.

– now.

door.open()set a price

now or later

buyer pays now–
vault pays later–

The price is never a fixed number. At the moment of sale the program values what the vault owes and takes your discount off.

your place
SOL
a buyer pays you–
the vault pays, in turn–
you give up–
door fee (0.30%)–
after $DOOR tier–
if it sells–

You need a place before you can price it. Change the discount any time, or take it down for free.

Nothing on the wall.

Places go on sale when a vault stops paying and a line forms. Each lit pane would be a place someone has priced. Buy one at a discount and the vault pays you in full when the line reaches it.

door.wall()front to back
placeaheadowedpriceoffwait
Nothing is listed yet.
if a place stood herecalculator
SOL
%
h
you pay–
the vault pays the holder–
you make–
a year, if every round fills–
watch the door
% off

Keyholder tier and up hear about new places first.

listed0
Stand in line instead

Places only come through the door. Tickets filed straight with a vault can't be bought.

$DOOR is the doorman.

Every place that sells through the door pays a 0.30% fee in SOL. That fee is split three ways, and holding $DOOR lowers what you pay and raises what you get back.

60% holders
Sent to $DOOR holders pro rata each epoch, paid in SOL.
25% buyback
Buys $DOOR off the market and burns it.
15% rent desk
Covers rent for first-time standers so a new place costs nothing upfront.

Key tiers

0 $DOOR

Visitor

fee 0.30%
  • Stand, sell and buy
  • Public wall
100K $DOOR

Tenant

fee 0.20%
  • Share of fee split
  • Console history
1M $DOOR

Keyholder

fee 0.10%
  • First word on new places
  • Bulk stand
5M $DOOR

Landlord

fee 0%
  • No fee on sales
  • Vote on new vaults
holder.estimate()you set the inputs

Assumes 1B supply with every holder in the split. Volume only exists when vault lines form.

your tier–
your fee on sales–
share of holder pool–
SOL to you per week–
CAThe CA is posted on X at @OpenDoorSol. Anything else claiming to be $DOOR is not us.

Your place stays in line.
You don't have to.

Follow one place from start to finish. Press a step to see who holds it and who gets paid.

place.life()stand

// open.rs: the price is a discount off what the vault owes, never a fixed number
pub fn discounted_pay(owed_lamports: u64, discount_bps: u16) -> Result<u64> {
    require!((1..=9_999).contains(&discount_bps), DoorError::InvalidDiscount);
    let factor = 10_000u128 - u128::from(discount_bps);
    let pay = u128::from(owed_lamports) * factor / 10_000;
    u64::try_from(pay).map_err(|_| error!(DoorError::Overflow))
}
What is the line, exactly?

SOL lending reserves lend out deposits. When every loose SOL is lent, there is nothing to pay a withdrawal with, so the reserve files it as a ticket in a first-in, first-out queue. Tickets get paid as borrowers repay or liquidations land.

Why can't I just sell my ticket?

A ticket filed straight with the vault belongs to that wallet until it is paid. OpenDoor files the ticket from a program account made for one place, and keeps who holds that place on its own ledger. That is what lets the place change hands.

What does standing cost?

About 0.017 SOL of rent for a moment, for the place account, its token account and the ticket. Most of it comes back to the wallet that stood when the place closes, even if the place was sold. First-time standers can get it covered by the rent desk.

What if nobody buys my place?

Nothing is lost. You stay in line and the vault pays you in full when the line reaches you. The door fee only applies to a sale.

Where does $DOOR come in?

The 0.30% door fee on every sale is split between holders, buybacks and the rent desk. Holding more $DOOR lowers your own fee, down to zero at the Landlord tier.

Is this live?

Not yet. The program goes live with the token, and the CA is posted on X at @OpenDoorSol. Until then the calculators on this site run on numbers you type in.

consoletype help
>