Owner: @David Rusu
Teleporting Notes Between Zones
For teleportation specification, see:
Private Atomic Cross-zone Transactions (PACTs)
Setting up a teleportation between zone $Z_a$ and zone $Z_b$.
From the sending side:
- Executer runs a withdraw tx against $Z_a$ state: $Z_a\text{-STF}(\text{withdraw}(N_a \rarr N_b))$
- This produces a cross ledger statement that is included in the zone ptx: $N_a \rarr N_b$
- The executor than produces the local ledger proof for $Z_a$’s side of the transfer, namely:
- nullifier of $N_a$ has been added to the ledger of the zone $L_a$
- $N_b = N_a$ modulo nonce (only one of the executors needs to provide this proof, by convention we can say the sending executor produces this proof)
From the receiving side:
- Executor runs a deposit tx against $Z_b$ state: $Z_a\text{-STF}(\text{deposit}(N_a \rarr N_b))$
- This produces a cross ledger statement that is included in the zone ptx: $N_a \rarr N_b$
- The executor than produces the local ledger proof for $Z_b$’s side of the transfer, namely:
- commitment of $N_b$ has been added to the ledger of the zone $L_b$

Verifying the Teleportation
For each cross ledger statement $N_x \rarr N_y$ appearing in the bundle, verify that
- there exists a ledger proof from zone $Z_x$ that adds $nf(N_x)$ to $L_x$
- there exists a valid proof that $covenant(N_x)$ is satisfed