This primer is the visual companion to Private OTC Swaps. It walks through the user-visible flow one step at a time: counted cash, shielded ingress, private swap, PFTL certification, private egress, public redemption, and the transparent control path.
Click through the swap
Seven panels, from counted cash to a private NAVCoin swap and back to a public exit.
Public accounting
Start with cash the chain can count.
The input is USDC, but Post Fiat does not treat every dollar-shaped token as the same asset. In the demo, USDC is bridged into PFTL as pfUSDC, a canonical stablecoin representation that can be counted by the NAV and settlement logic.
PublicSource, amount, bridge receipt.
Why it mattersThe NAV system sees reserve-quality cash, not a vague wallet balance.
USDCEthereum, Arbitrum, Base, or another source venue.
bridge attestation
pfUSDC on PFTLA chain-native receipt the swap circuit can consume.
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">Shielded ingress</p>
<h3>Turn public pfUSDC into an Orchard note.</h3>
<p>The wallet creates a private note commitment. The chain can verify that value entered the shielded pool, while the note opening and ownership stay wallet-side.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Public</strong>A valid shielded action and commitment.</div>
<div class="private-otc-fact"><strong>Private</strong>Note opening, owner keys, and wallet path.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node"><strong>pfUSDC balance</strong><span>Visible before shielding.</span></div>
<div class="private-otc-arrow">commit</div>
<div class="private-otc-node private"><strong>pfUSDC Orchard note</strong><span>Private spendable input for the swap.</span></div>
</div>
</div>
</section>
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">Private exchange</p>
<h3>Swap pfUSDC into a651 inside the circuit.</h3>
<p>The Asset-Orchard proof consumes a pfUSDC note and emits an a651 note. It enforces the permitted asset exchange and conservation rules without publishing the user's note details.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Input</strong>Private pfUSDC note.</div>
<div class="private-otc-fact"><strong>Output</strong>Private a651 NAVCoin note.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node private"><strong>pfUSDC note</strong><span>Spent once; its nullifier prevents reuse.</span></div>
<div class="private-otc-arrow">zk proof</div>
<div class="private-otc-node private"><strong>a651 note</strong><span>NAVCoin output remains private until egress.</span></div>
</div>
</div>
</section>
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">PFTL finality</p>
<h3>Validators certify the batch.</h3>
<p>PFTL validators verify the proof, execute the state transition, and sign a block certificate. In the latest shielded execution, the swap certified with five validator votes at height 437.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Public</strong>Batch id, height, certificate, proof validity.</div>
<div class="private-otc-fact"><strong>Measured</strong>Proof creation 6.06s; transport/certification 4.90s after prewarm.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node"><strong>Proposer</strong><span>Builds the shielded batch.</span></div>
<div class="private-otc-arrow">verify and vote</div>
<div class="private-otc-node"><strong>Certificate</strong><span>Consensus accepts the state transition.</span></div>
</div>
</div>
</section>
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">Private egress</p>
<h3>Exit the private note without revealing its opening.</h3>
<p>When the user needs a public asset again, private egress proves the right to exit the a651 note and creates public exit fields. The egress is public; the internal note opening is not.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Public</strong>Exit artifact and verification result.</div>
<div class="private-otc-fact"><strong>Private</strong>How the wallet owned and routed the note.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node private"><strong>a651 Orchard note</strong><span>Private asset ownership.</span></div>
<div class="private-otc-arrow">private egress proof</div>
<div class="private-otc-node"><strong>Public a651 exit</strong><span>Visible handoff for redemption.</span></div>
</div>
</div>
</section>
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">Public exit</p>
<h3>Redeem and withdraw on the visible rail.</h3>
<p>After egress, the user is back in the public NAV and bridge-out world. The demo uses the public a651 exit to create the redemption path and settle the withdrawal.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Public</strong>Redemption artifact, withdrawal, final balances.</div>
<div class="private-otc-fact"><strong>Boundary</strong>Privacy protects the shielded path, not the final public claim.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node"><strong>Public a651</strong><span>Exit artifact from the shielded pool.</span></div>
<div class="private-otc-arrow">redeem and withdraw</div>
<div class="private-otc-node"><strong>USDC claim</strong><span>Public settlement leg.</span></div>
</div>
</div>
</section>
<section class="private-otc-slide">
<div>
<p class="private-otc-kicker">Transparent control</p>
<h3>Run the same NAV mechanics without Orchard.</h3>
<p>The transparent demo is the control path: a651 trustline, primary mint, NAV money-in, NAV exit, and summary, all on PFTL without shielded notes. It proves the accounting path works before privacy is layered on.</p>
<div class="private-otc-facts">
<div class="private-otc-fact"><strong>Useful for</strong>Debugging, audit traces, and repeatable operator demos.</div>
<div class="private-otc-fact"><strong>Not private</strong>It intentionally exposes the state transitions.</div>
</div>
</div>
<div class="private-otc-panel">
<div class="private-otc-flow">
<div class="private-otc-node"><strong>Public pfUSDC</strong><span>Transparent input.</span></div>
<div class="private-otc-arrow">primary mint and NAV exit</div>
<div class="private-otc-node"><strong>Public summary</strong><span>Receipts, timing, and balances are visible.</span></div>
</div>
</div>
</section>
Return to Private OTC Swaps.