test+docs: live mainnet burn e2e verified; treasury rent-exempt requirement

End-to-end burn proven on mainnet (test wallet): build → sign → broadcast →
confirm → receipt → Essence. tx 5ddbmLRz… burned a dust token, closed the
account, returned 0.00197 SOL to the user, sent the 5% (103704 lamports) to the
treasury, recorded as Essence (Round #1 = 103704). Re-scan confirms the account
is gone; treasury credited; DB row written.

Discovered + documented: the treasury must be funded to rent-exemption before
collecting fees (a fee transfer into a 0-balance account fails "insufficient
funds for rent"). Noted in .env.example + design §3.1. Tracker: Phase 3 done.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-31 06:48:11 +00:00
parent b98b904896
commit 28064c5131
4 changed files with 16 additions and 9 deletions

View File

@@ -45,6 +45,9 @@ QUOTE_MAX_AGE_MS=15000 # skip stale quotes older than this
# ---- Protocol fee (§3.1) — transparent, in-tx, non-custodial --------------- # ---- Protocol fee (§3.1) — transparent, in-tx, non-custodial ---------------
# The treasury receives ONLY the fee SOL (never user funds). Swap it for a # The treasury receives ONLY the fee SOL (never user funds). Swap it for a
# multisig before real volume. The fee is shown in the preview before signing. # multisig before real volume. The fee is shown in the preview before signing.
# IMPORTANT: fund the treasury once to rent-exemption (>= ~0.0009 SOL) BEFORE it
# collects fees — a fee transfer that would leave a 0-balance account below the
# rent-exempt minimum fails the whole tx ("insufficient funds for rent").
PYRE_TREASURY_WALLET=122CNV5ZLu6fqZFpEMUdUSQwDv2zs23pkYQhkNtSQk5k PYRE_TREASURY_WALLET=122CNV5ZLu6fqZFpEMUdUSQwDv2zs23pkYQhkNtSQk5k
PYRE_FEE_BPS=500 # 5% of reclaimed rent PYRE_FEE_BPS=500 # 5% of reclaimed rent
PYRE_SWAP_FEE_BPS=100 # 1% on swaps (proceeds still go to user) PYRE_SWAP_FEE_BPS=100 # 1% on swaps (proceeds still go to user)

View File

@@ -120,6 +120,10 @@ fee is deliberately in the fair band:
Spawn+claim+rounds = the differentiation. Spawn+claim+rounds = the differentiation.
- Trust is the moat: always display net SOL + the exact fee before signing; never - Trust is the moat: always display net SOL + the exact fee before signing; never
inject undisclosed instructions; never keep swap proceeds. inject undisclosed instructions; never keep swap proceeds.
- **Ops:** the treasury must be funded to rent-exemption (~0.0009 SOL) before it
collects fees, or the first fee transfer into a 0-balance account fails the tx
("insufficient funds for rent"). Verified end-to-end on mainnet 2026-05-31
(burn→close→5% fee→Essence; tx 5ddbmLRz…).
--- ---

View File

@@ -147,10 +147,10 @@
<section class="overall"> <section class="overall">
<div class="overall-head"> <div class="overall-head">
<h2>Overall MVP Progress</h2> <h2>Overall MVP Progress</h2>
<span class="overall-pct">58%</span> <span class="overall-pct">60%</span>
</div> </div>
<div class="bar"><span style="width: 58%"></span></div> <div class="bar"><span style="width: 60%"></span></div>
<p class="count">31 of 53 phase deliverables complete</p> <p class="count">32 of 53 phase deliverables complete</p>
</section> </section>
<h2 class="section">Development Phases</h2> <h2 class="section">Development Phases</h2>
@@ -204,19 +204,19 @@
<li class="item"><span class="mark"></span><span>Live signed close verified e2e (needs an empty ATA)</span></li> <li class="item"><span class="mark"></span><span>Live signed close verified e2e (needs an empty ATA)</span></li>
</ul> </ul>
</article> </article>
<article class="card in_progress"> <article class="card done">
<header class="card-head"> <header class="card-head">
<h3><span class="phase-id">Phase 3</span> Burn Junk</h3> <h3><span class="phase-id">Phase 3</span> Burn Junk</h3>
<span class="badge in_progress">IN PROGRESS</span> <span class="badge done">DONE</span>
</header> </header>
<p class="count">5 / 6 complete</p> <p class="count">6 / 6 complete</p>
<ul class="checklist"> <ul class="checklist">
<li class="item done"><span class="mark"></span><span>Incinerate-only classification</span></li> <li class="item done"><span class="mark"></span><span>Incinerate-only classification</span></li>
<li class="item done"><span class="mark"></span><span>Burn transaction builder (server re-validated, value-gated)</span></li> <li class="item done"><span class="mark"></span><span>Burn transaction builder (server re-validated, value-gated)</span></li>
<li class="item done"><span class="mark"></span><span>Burn-then-close flow (+ transparent 5% fee)</span></li> <li class="item done"><span class="mark"></span><span>Burn-then-close flow (+ transparent 5% fee)</span></li>
<li class="item done"><span class="mark"></span><span>Stronger confirmations (destructive confirm + decode-match)</span></li> <li class="item done"><span class="mark"></span><span>Stronger confirmations (destructive confirm + decode-match)</span></li>
<li class="item done"><span class="mark"></span><span>Receipt update (on-chain verified)</span></li> <li class="item done"><span class="mark"></span><span>Receipt update (on-chain verified)</span></li>
<li class="item"><span class="mark"></span><span>Live signed burn verified e2e</span></li> <li class="item done"><span class="mark"></span><span>Live signed burn verified e2e (mainnet)</span></li>
</ul> </ul>
</article> </article>
<article class="card todo"> <article class="card todo">

View File

@@ -51,14 +51,14 @@
{ {
"id": 3, "id": 3,
"name": "Burn Junk", "name": "Burn Junk",
"state": "in_progress", "state": "done",
"items": [ "items": [
{ "label": "Incinerate-only classification", "done": true }, { "label": "Incinerate-only classification", "done": true },
{ "label": "Burn transaction builder (server re-validated, value-gated)", "done": true }, { "label": "Burn transaction builder (server re-validated, value-gated)", "done": true },
{ "label": "Burn-then-close flow (+ transparent 5% fee)", "done": true }, { "label": "Burn-then-close flow (+ transparent 5% fee)", "done": true },
{ "label": "Stronger confirmations (destructive confirm + decode-match)", "done": true }, { "label": "Stronger confirmations (destructive confirm + decode-match)", "done": true },
{ "label": "Receipt update (on-chain verified)", "done": true }, { "label": "Receipt update (on-chain verified)", "done": true },
{ "label": "Live signed burn verified e2e", "done": false } { "label": "Live signed burn verified e2e (mainnet)", "done": true }
] ]
}, },
{ {