Consumer demonstration, not a production Signal
or OpenCSV interface. The Signal fork and temporary Swift bridge
exist to show this experience to Signal's team. They are not a shipped
feature, supported ABI, upstream commitment, or formal-verification layer.
The film follows
Bob sending 1 Test USD to Carol on public Bitcoin signet. Every Signal
screen is captured simulator footage; explanations appear beside the
interface, never over it.
36.288 seconds · actual Signal simulator footage.
Dead pauses are cut; all retained action plays at normal speed. The moving
dot is an added illustration of the encrypted consignment path, not Signal
UI. Test USD is signet-only test value with no monetary or redemption
claim. Cut details and source-recording hashes:
message-flow page and the
journal.
1 Test USDCarol → Bob · tx 445c43cb…400fd · height 316765
1 Test USDBob → Carol · tx 6d85895f…f49aa · height 316766
36.288 s cutone-screen context · two synchronized views · retained action at 1×
Later live gates used the same Bob and Carol wallets:
5 + 5 Test USD shared one Bitcoin transaction,
and a separate 1 Test USD payment was
fee-bumped without becoming a second payment
(replacement confirmed at height 316803). A later zero-confirmation round
trip moved 45 Test USD and a 10 Test USD return while both anchors were
still unconfirmed
(parent,
child);
both follow-up fixes from that run are merged
(Signal #8
at 1e3472b9,
opencsv-rs #16
at 908bbb53). Both anchors later settled at height 316824.
Detailed receipts are in the status cards and the
journal.
Status
Each item links to its receipt. Nothing on this page is a
production release.
On the reference main line
Proof lineage v3 + co-funded batching
Issuer authorization and predecessor keys are bound in-circuit.
The 94-bit-floor proof profile, C1 co-funded transactions, and C2
two-round peer gossip have reproducible Rust receipts. The separate
translated-Rust kernel refinement has 15 audited declarations on
formal-aeneas/main.
On opencsv-rs/main · physical receipt
V4 one-input forwarding
The production FRI profile is unchanged. A new authenticated circuit
spends one predecessor into recipient plus change with no fake padding
coin. On the physical iPhone 16e it proved in 6.435 seconds, verified in
19.75 ms, and produced a 788,047-byte proof. The shape is on the
reference main line through 46a3e48.
A4/A5 adoption, dated signet/readiness evidence, C2 adversarial
fixes, and the Rust-owned account-wallet foundation are merged.
The independent adversarial re-review was deferred by the owner, not
represented as completed.
Merged prototype · fix-forward gates remain
Signal-iOS demonstration + one Test USD wallet
Two registered simulator wallets completed the film's round
trip; both anchors confirmed at signet heights 316765 and 316766.
Earlier acceptance runs exercised provisional receipt,
unconfirmed-parent forwarding, shared batching, safe RBF, and
relaunch recovery. Receipts:
payment story ·
journal.
Fresh 45/10 zero-confirmation repeat: 6.149s/6.171s local
proving, 24ms/22ms signing and persistence, with both exact
transactions still unconfirmed when the child was accepted.
Rust owns custody, Bitcoin fees, change, signed persistence,
relay, and recovery. Signal has no mint or general
Bitcoin-send surface.
Signal
PR #8 is merged at 1e3472b9 with all hosted gates
green. It fixes canonical outgoing-presentation lookup.
Rust PR
#16 retries selection after a verified confirmed spend and is
merged at 908bbb53 with green Rust CI.
Signal
PR #9 pins that Rust SHA at 9b72d86d. Its PR-tip jobs
passed; the post-merge default Xcode job failed while recovery passed.
Still open: a green default-branch Signal rerun/fix, the crash
matrix, clean-install recovery, remaining batch/RBF acceptance, and
physical rollout.
The demonstration wallet cannot spend Bitcoin
outside the protocol. It exposes fee reserve, UTXOs,
confirmations, and evidence, but Bitcoin can be spent only by an OpenCSV
transfer or protocol-safe fee bump. There is no general BTC send, mint
interface, or issuer secret in Signal; issuance is a separate headless
operator workflow outside the app. There is no OpenCSV
anchor server. The exact gates are in
issue #1 and
the Signal architecture in
issue #3.
The OpenCSV test issuer's canonical disclosure is in the
test USD issuer terms.
Evidence
Formal verification, performance, and delivery status each
have their own page, linking to the underlying source, CI, and
machine-readable data.
Bitcoin provides ordering and availability. Everything else —
amounts, coins, validity proofs — moves directly between sender and recipient,
and the recipient verifies it client-side.
01 — Mint
Issuer creates supply
A v3 mint proves knowledge of the issuer seed committed by genesis
and binds the exact statement in-circuit. MINT ∥ asset_id ∥ V
remains public for supply audit; new coin openings remain private.
02 — Send
Sender pays over Signal
The Rust wallet reserves Bitcoin fees, fixes input zero, and anchors
a 64-byte context-bound record. Raw nullifiers, coin openings, and the
recursive proof travel only in the consignment, e.g. over Signal.
03 — Verify
Recipient verifies locally
The recipient verifies one history-independent proof and one Bitcoin
anchor, then evaluates first occurrence from its own header/filter/block
view. Explorer data may accelerate discovery; it cannot decide acceptance.
Properties
OpenCSV extends
Shielded CSV's client-side
validation with issuer-gated issuance, auditable supply, and light
verification.
No fork, no new chain. Anchors ride inside ordinary Bitcoin
transactions. Miners and nodes never know OpenCSV exists.
Fixed anchor record. A solo anchor carries one 64-byte
context-bound record plus a constant unspendable marker output. Raw
nullifiers never appear on-chain.
Shielded transfers. Amounts, counterparties, and asset IDs in
user-to-user payments are hidden inside coin commitments and proofs.
Auditable supply. Mints and redemptions are transparent events;
outstanding supply per asset is a public sum anyone can compute.
Issuer-gated issuance. Supply grows only under the issuer key bound
into the asset's genesis — enforced inside the proof, not by trust.
AIR-native proofs, no zkVM. Recursive proof-carrying data over
BabyBear/Goldilocks with FRI — constant-size proofs, constant verification,
no CPU-emulation overhead.
Hash-native OpenCSV authorization. V3 issuer authorization is a
proof of knowledge of the genesis-bound issuer seed inside the PCD
circuit, not an off-circuit curve signature. Bitcoin's own signature
security remains outside OpenCSV's control.
Trustless mobile verification. A protocol-constant marker output
makes anchor blocks discoverable via
BIP158
compact block filters — a phone syncs kilobytes per block, fetches
only anchor blocks, and checks double-spends locally. No trusted server;
indexers are optional, spot-verifiable accelerators.
Optional co-funded batching. Each participant contributes one
fee input, payload, and change output; every signer reconstructs the exact
transaction before releasing SIGHASH_ALL. The current
reference profile supports up to 64 participants and unanimous safe RBF.
Authenticated production-profile measurements. V3 and the
v4 one-input forwarding shape are on the reference main line.
The August 1 ~0.55 s phone result used the retired test profile.
Proof
M4 prove (warm)
Verify
Size
iPhone 16e prove (cold)
Genesis mint
102 ms
14.8 ms
535,705 B
181 ms
V4 one-input / mint predecessor
4.80 s
20.4 ms
788,068 B
6.44 s
Transfer / mint predecessors
7.77 s
22.2 ms
854,105 B
11.25 s
Transfer / node predecessors
9.76 s
21.4 ms
841,464 B
14.47 s
Redeem
4.71 s
19.9 ms
778,466 B
7.28 s
Comparison
Where OpenCSV sits among RWA and client-side-validation designs.
Client-side validation
Shielded transfers
Auditable supply
Issuer-gated issuance
Trustless light verification
Fork-free on Bitcoin
ERC-20 (Ethereum)
no
no
yes
yes
trusted RPC
n/a
RGB
yes
partial
per-contract
yes
full history rescan
yes
Taproot Assets
yes
partial
issuer proofs
yes
issuer proofs
yes
Zcash
no (own chain)
yes
no
no
lightwalletd (trusted)
no
Shielded CSV
yes
yes
no
no
full scan or trusted indexer
yes
OpenCSV
yes
yes
yes
yes
compact filters + PoW, on-device
yes
Issuer-gated issuance and auditable
supply make OpenCSV an RWA scheme rather than a bearer asset. On light
verification: in plain Shielded CSV, checking a double-spend means scanning
every nullifier the chain has ever carried, or trusting an indexer that
did. OpenCSV's marker output makes anchor blocks discoverable through the
same compact block filters light wallets already sync, so a phone checks
first occurrence locally from proof-of-work and a few kilobytes per block.
The scan-soundness argument is machine-checked; see the
formal page.