Jonas Nick
Liam Eagen
Robin Linus
Shielded CSV is a transaction protocol on top of Bitcoin.
| Bitcoin | Shielded CSV | |
|---|---|---|
| Privacy | 🥴 | ✅ |
| Blockspace per tx | ~600B, on average | 64B, always |
data is ignored by ordinary Bitcoin nodes, only interpreted "client-side" by nodes.
Alice: 3
Bob: 7
A 2-input, 2-output Bitcoin transaction
Shielded CSV transaction data is embedded in Bitcoin transactions.
Blockchain (PoW, ...)
Transaction Validation
"Layer 0.5"
"Layer 1"
Bridge examples:
Bridge
doesn't need a softfork, but it inherits the security of the bridge (which may be improved by softforks).
BitVM and new Script opcodes only benefit shitcoiners and JPEG degens!!
Liar! Shielded CSV proves that BitVM and better Script opcodes can add full privacy and 64 byte transactions to Bitcoin.
Full privacy with only 64 bytes on-chain sounds impossible?
Shielded CSV Approach
Sally the Sender
Ivy: 3
Roy: 7
Roy the Receiver
coin proof
Blockchain
nullifier
CSV transaction
Sally the Sender
Ivy: 3
Roy: 7
Roy the Receiver
coin proof
Coin Proof: History of (CSV) transactions connecting to issuance transactions.
Harry: 10
Issuance: 6
Issuance: 4
Verify:
All txs in the coin proof
are valid.
(The exact details of issuance depend on the type of bridge)
The nullifier consists of:
The nullifier nullifies the coin, thereby preventing double spending
Blockchain
| CoinID | TxHash |
|---|---|
| <some CoinID> | <...> |
| <other CoinID> | <...> |
nullifier key-value store
Embed nullifier
Process nullifiers
Process nullifiers:
Ignore nullifiers whose CoinID is already in the KV store.
(<some CoinID>, <some TxHash>)
IGNORED by Roy
nullifier = (CoinID, TxHash)
Sally the Sender
Roy the Receiver
Coin, Coin Proof
Verify Coin Proof:
Every coin spent in the coin proof must be present in the KV-store and the tx hashes must match.
| CoinID | TxHash |
|---|---|
| <some CoinID> | <...> |
| <other CoinID> | <...> |
nullifier key-value store
(what we've seen is not the actual Shielded CSV nullifier, because it has a number of problems)
Pete the Publisher
nullifier
aggregate nullifier
Blockchain
nullifier
nullifier
Problem: Sender shouldn't have to make a Bitcoin tx for every nullifier (overhead, requires having bitcoin).
Coin Proof
👷
Nullifier
AggNullifier
...
Block i + 1
Block i
Block i + 2
aggregates & publishes
processes
AggNullifier
| <...> | <...> |
|---|---|
| <...> | <...> |
nullifier key-value store
CSV Tx
Solution: Replace new coin proof with a cryptographic proof that the incoming coin proofs and Sally's CSV tx is correct.
CSV tx
new coin proof
coin proof
coin proof
zero-knowledge
succinct
Problem: Coin proof includes all ancestor transactions involved in creating the coin (size?, privacy?).
High-level rust spec
Whitepaper
Post-quantum
non-interactive publishing
prunable wallet state
PCD
Payment Channels
MEVil
TS-Accumulator
Instantiation
Light clients
Timelocks
Sign-to-Contract Schnorr Half-Aggregation
64-byte nullifier
Private and Efficient CSV
Communication Channels
Client-Side Validation Model
Accounts
"mempool"
Reorgs
Atomic Swaps
t-of-n Shared Accounts
Wallet State
🐙
🦑
🦈
Scriptable spending policies
Blockchain (PoW, ...)
Transaction Validation
"Layer 0.5"
"Layer 1"
🛡️
... then transactions are only validated "client-side" and simply ignored if they are invalid.