Owners: @Thomas Lavaur

Reviewers: 🔺@Mehmet 🟨@David Rusu 🟨@Giacomo Pasini 🟨@Álvaro Castro-Castilla

Introduction

This page aims to describe Private Atomic Cross-zone Transactions (PACTs) PoC. We will suppose that a user who holds funds in Zone A wants to move their funds to Zone B while paying fees. The transfer still happens atomically but we want to bring privacy to this transfer: zone executors would only be aware of the Zone origin and destination of the transaction. The value, the owner and the data of the coin will be private and unknown to the executors.

We will adopt an UTXO model in the zone ledger and remove assets from the CL as documented in these two documents:

Common Ledger Specification

References

To understand this document, reading the following documents is recommended:

  1. What partial transactions are.
  2. The general scheme in which PACTs are included.
  3. How commitment and nullifier sets are managed.
  4. How notes are constructed and derived fields.

Overview

This pattern fits into the general framework, but here the bundle consists only of the partial transaction performing the note teleportation and potentially the partial transactions collecting the fees. The partial transaction has a neutral or surplus value and only requires revealing the fee amount, not the content of the teleported note. This is because the partial transaction doesn’t need to be balanced by the executor with another partial transaction. This PACT description is a special case that can be generalized with multiple PACTs within the same bundle. To create a PACT:

  1. Wallet creates a partial transaction consuming a note to teleport and creating a new one using the destination zone tag.
  2. A bundle containing this partial transaction is proven balanced and only discloses the relative value which is equal to the fees.
  3. Zones process their ledger to include the nullifiers and commitments of the partial transaction.
  4. In the next CL block, the update of the zones will include nullifiers and commitments in their ledger, teleporting the note in a single block and conserving the same properties as the general model:

Here, we will detail the process of teleporting 100 NMO from a note of 110 NMO from Zone A to Zone B, while paying 10 NMO in fees to the executor in Zone C.