$DVP price not read yet, wSOL price not read yet, JUP price not read yet, JTO price not read yet, AAPLx price not read yet, MSFTx price not read yet, NVDAx price not read yet, AMZNx price not read yet, CRCLx price not read yet, SPCXx price not read yet, ANTHROPIC price not read yet, POLYMARKET price not read yet, NEURALINK price not read yet, ANDURIL price not read yet, OPENAI price not read yet

mintedlive desksdvp burnedpotbuys next

How a DVP desk works

A desk is an NFT that owns a vault. Rounds fill the vault in equal shares, and whoever holds the desk owns whatever is in it.

devnetThe program is deployed on devnet only. Nothing is on mainnet and no economic values are final: every live figure on this site is a devnet read, and anything unread stays blank.

what you get

One transaction. It burns your token deposit, pays a surcharge in SOL and issues the desk. If any part of it fails, none of it happened.

The desk is a Metaplex Core NFT, issued into a collection whose update authority is the config account rather than a person. No human key signs your mint.

Two things come with it: a desk record, which stores where your desk stands against the counter, and a vault address, which is what will hold whatever rounds buy for it. Both are derived from the NFT's address. That is the whole trick behind section 06.

The burn sits in the same instruction as the issuance, deliberately. There is no ordering in which supply goes down and no desk comes out, or a desk comes out and supply does not go down.

what a mint costs and where it goes
you payamountwhere it goes
token deposit----Burned. Nobody receives it and the supply is smaller afterwards.
SOL surcharge, protocol slice----The protocol wallet.
SOL surcharge, the rest----The pot. This is the money rounds spend.
network rent and feessolana's own costNot ours. Rent for the accounts your mint creates, plus the transaction fee.

Those first three amounts are chosen once, when the program is initialized, and are readable from the config account from that moment. They have not been chosen yet. See section 07.

opening the vault

A vault needs one token account per stock in the rotation, and each one is a separate instruction.

That is a transaction size limit, not a flourish. A full rotation of account creations does not fit alongside a mint, so the client opens as many as fit and calls open_vault_account for the rest. Anyone can open one for any desk; it costs the rent and nothing else.

Waiting costs you nothing. Crediting happens on the config, not inside your vault: a round moves one number, and your desk's share of it is already yours. The token account is only needed when the tokens themselves move.

So delivery to a desk with no account for that stock does nothing, and once the account exists the next delivery pays the whole gap at once, back to the moment the desk was minted. Nothing accrued while you waited is forfeited.

what a round does

A round is two instructions with a swap between them, and the program does not care what the swap was.

It can only open once the pot holds more than the round threshold, above the rent that keeps the pot account alive. Below that, nothing runs.

  1. 01begin_round

    Takes lamports out of the pot, hands them to the executor, and records what the reservoir held beforehand. Both the executor and protocol authority must sign. It refuses unless a matching end_round for this program is queued later in the same transaction, which it checks by reading the instructions sysvar. Solana transactions are atomic, so a round that cannot settle cannot start, and the pot does not move.

  2. 02the swap

    Whatever the executor built. In every run that has used a real router, that was Jupiter. It is not part of this program, and the program never reads what it reports.

  3. 03end_round

    Reads the reservoir again and settles on the difference: the measured balance change, not the number the router reported. If that difference is under the min_out the round was opened with, the whole transaction reverts and the pot is exactly where it started.

Crediting is a single write. The measured amount is scaled, divided by the number of live desks, and added to that stock's counter. One desk, one share, not weighted by anything. A round costs the same to settle for fifty desks as for five thousand, because no desk is touched.

Your desk carries a stamp, the place it last stood against that counter. Counter minus stamp is what it is owed.

counter and stamp

counterdesk adesk bdesk c

desk a has been delivered once, so its stamp sits partway along and only the rest is owed.

desk b has never been delivered. Nothing is lost by that. It is owed everything since it was minted.

desk c was minted later, so its stamp started where the counter already stood. Rounds that settled before it existed are not its claim.

A diagram of the mechanism, not a measurement. No figure here is read from a chain.

deliver moves that gap from the reservoir into the desk's vault and advances the stamp by exactly what it paid, so the fraction below a whole unit stays credited rather than being rounded away every time. It is permissionless: anyone can settle any desk, and the owner receives it either way. It is idempotent: run it twice and the second one moves nothing, because the gap is now zero. We run a crank that does this. If the crank stops, the debt does not.

what it buys

The rotation is a list on the config. Rounds walk it in order and wrap at the end. It is append only: there is no instruction to remove a stock, so anything added is something every desk is owed a share of forever, including desks minted long before it was added.

add_asset rejects active transfer fees, a set transfer hook, frozen-by-default, paused and non-transferable mints. The same policy is checked again before rounds, vault-account creation and delivery because Token-2022 authorities can change configuration after admission.

Issuer-backed equities remain issuer-controlled. A permanent delegate can claw back or burn balances, and issuer freeze or pause controls can block movement. DVP prevents incompatible active configuration from changing its own accounting; it cannot remove the issuer's authority. Nothing has been added to a live deployment.

where the pot comes from

One source works today, and it is the mint.

pot sources
sourcehow it reaches the potstate
mint surchargeTransferred into the pot inside mint_desk, on every mint.In the program.
anything sent to the potThe pot is a plain program owned account. Lamports transferred to it are spendable by the next round, above its rent floor.In the program.
secondary sale royaltiesThe collection is created with a 5% royalty naming the pot as its only creator, so a marketplace that honors royalties pays the pot directly.Declared on the collection, not enforced by the program. A raw transfer pays nothing.
protocol token creator feesWould route the token's creator fees into the pot.Not live. The token has not launched.

So the honest version is short: the pot fills from mints, from the declared royalty when a marketplace pays it, and from whoever chooses to send it something.

what we take

The protocol slice of the mint surcharge. That is the list.

what the protocol takes
eventthe protocol takesnote
a mintthe protocol slice of the SOL surchargeThe remainder of the surcharge goes to the pot.
the mint depositnothingThe deposit is burned, not collected. Nobody ends up holding it.
a roundnothingEverything the reservoir measurably gained is credited to live desks.
a deliverynothingAnyone can run it, and whoever runs it pays the network fee.

Remainders below a whole unit stay in the reservoir until they grow into one. They stay credited to the desk, not to us: delivery pays whole units and advances the stamp by exactly that much, so the fraction is still owed on the next pass.

what the keys can do

Worth stating plainly, because it is the sharpest edge in this design.

what the operator keys can and cannot do
actionpossiblewhy
take the pottwo-key trust boundaryThe executor and protocol authority must both approve a nonzero min_out. Atomic settlement and the spend cap limit the path, but there is no on-chain fair-price oracle.
spend more than the cap in one roundnomax_spend_per_round is checked before anything leaves the pot.
accept a bad priceyes, togetherThe executor proposes min_out and the protocol authority co-signs it. A weak quote can buy less than the round could have. Closing that trust needs an independent on-chain price bound.
change the settingsauthority onlyEconomic values are fixed at initialization. Protocol authority can move only through a two-step propose and accept handoff.
add a stock to the rotationyes, the authorityAppend only. There is no instruction that removes one.

The program is upgradeable, so an upgrade could add an instruction that does any of the above. That is why moving the upgrade authority to a Squads multisig is a prerequisite for mainnet here and not a cleanup task. It is a single key today, on devnet.

selling a desk

Nothing in the program implements "transfer the vault", and that is the point.

The desk record and the vault are program derived addresses seeded by the NFT's address, and no instruction anywhere reads who owns the NFT. There is nothing else the vault could belong to. A plain Core transfer moves the desk, and everything derived from the desk moved with it because it never pointed anywhere else.

There is no withdraw step before selling and nothing left behind after. Whoever holds the desk when a delivery runs receives what that delivery pays.

A listing changes none of it. The desk address, the stamp and the accrued balance are untouched by a transfer, so a desk sitting on a marketplace accrues exactly like one sitting in a wallet.

Held by tests under LiteSVM, not by a mainnet sale: after a transfer the desk and vault addresses are unchanged, the balance is untouched, the next round still credits the desk, a third party can settle it for the new owner, and the seller cannot move it again.

the numbers

None of the economic values are chosen yet.

settings
settingwhat it controlsvalue
max_desksHow many desks can ever be minted.----
deposit_amountDeposit tokens burned per mint.----
surcharge_lamportsSOL taken per mint, before the split.----
protocol_lamportsThe protocol's slice of that surcharge. The rest goes to the pot.----
round_thresholdWhat the pot must hold before a round can open.----
max_spend_per_roundThe most a single round can spend.----
rotation slotsHow many stocks the rotation can hold on the config.16
counter scaleFixed point on the per-desk counter, so sub-unit shares survive between rounds.1e12

The first six are chosen once, when the program is initialized on mainnet, and no instruction in this program changes them afterwards. From that moment anyone can read them off the config account. The last two are compiled into the program and are the same on any deployment.

The art set is fifty desks. max_desks is the on-chain cap and is a separate number that has not been set.

the accounts

Everything the program uses, and what does not exist yet.

protocol accounts
accountaddresswhat it is
programDVPK…cfCYThe new relaunch program address. It is not deployed. The previous experimental program was permanently closed. Upgrade and protocol authority must move to Squads before public funding.
config4RcA…zhz2Settings, the rotation, and the counter every desk measures itself against. It also owns each stock's reservoir and holds the collection's update authority.
potChS2…hkH2Holds the SOL a round spends. Program owned, so a round debits it without a signature.
collectionG6i7…ZSuqThe Metaplex Core collection every desk is issued into. The program creates it with a 5% resale royalty declared to the pot.
deposit mint----The token burned as the mint deposit. Recorded on config at initialization; the token has not launched.
protocol wallet----Receives the protocol slice of the mint surcharge. Recorded on config at initialization.
executor----Builds each round. Pot movement requires both this signer and protocol-authority approval, plus a nonzero minimum output. Recorded on config at initialization.
metaplex coreCoRE…hX7dThe NFT program the desks are created through. Not ours; the same address everywhere.

config, pot and collection are program derived addresses. They come from the program id and a fixed seed, so anyone can recompute them and check that these are the ones the program uses.

Each rotation stock also gets a reservoir, an associated token account owned by config, created by add_asset when the stock joins the rotation.

what is not true yet

  • Nothing is on mainnet: no program, no config, no collection, no desk. The only deployment is devnet.
  • No rotation stock has been added outside of tests, so the pot has never bought anything real.
  • The protocol token has not launched.
  • Every figure the site shows is read from the chain it names, and anything not yet read renders blank, because a zero is a measurement and a blank is the absence of one.
  • There is no audit. The program has tests under LiteSVM, a devnet run, and rounds run against real Jupiter routes on a mainnet fork. That is testing.