I am shieldingamountunits ofassetinto the pool as the note committed to bycommitment, whose opening I know. I control the spending key for the note and authorize this shield. TheaffilIDderived from my incoming viewing key is absent from the sanctioned set.
What shielding checks
Shielding proves note ownership, authorization, and absence from the sanctioned set. It does not require a customer or depositor registration in the pool’s VASP tree, or a policy-wrapper proof. A shield authorization is a signature from the key holder. With custodial keys, the VASP’s custodial system signs. With self-custodied keys, the customer’s wallet signs. The MIP20 deposit authorization separately permits the public token transfer into the pool. MIP20 recovers this authorization from an ECDSA signature; it does not accept an ERC-1271 contract-wallet signature. The MIP20 transfer into the pool remains transparent and subject to the token’s programmable policy. Payment messaging describes the offchain exchange of payment instructions and Travel Rule records.Witness
The witness remains with the prover. Its preparation can be delegated through
outsourced proving, but
the key holder must produce the shield authorization.
Public inputs
The table follows the circuit’s eight public inputs in order. The pool verifies
the proof through
CircuitRegistry and 0xF2, pulls the authorized deposit,
requires its balance to increase by exactly amount, and appends commitment.
Changing a public input invalidates the proof.
Inside the circuit
commitmentopens according to the canonical note opening and binds itsamount,asset_id, andshieldTimestampto the public inputs. The four reserved fields are zero.- The note’s address is a Grumpkin point derived from
ivkand the diversifier. The circuit derivesivkfrom the witnessedakandnk, binding the note to one identity. - A Schnorr signature under
akverifies over the shield’s public inputs: the owner authorized exactly this shield. affilIDis absent from the sanctioned set.