This PoC is now completed, the report on the results and learnings is here:

Atomic Transfer PoC Report

We intend to deliver a PoC showcasing a user executing an atomic asset transfer between two zones.

At a high-level, we have a user who holds 100 NMO in Zone A, he wants to transfer 50 NMO to Zone B. They want the transfer to happen atomically, i.e. we don’t want to end up in a situation where the user has withdrawn 50 NMO from Zone A but the deposit to Zone B has failed.

Atomic Asset Transfer Design

For this PoC, the asset transfer will be executed through two partial transactions.

  1. The User Partial Transaction in which he pays the executor a fee to include a presigned transaction in Zone A to withdraw 50 NMO and a second presigned transaction in Zone B to deposit 50 NMO.
  2. The Executor Partial Transaction runs the STF for both Zones A and B with the presigned transactions provided by the user in the User Partial Transaction and pockets the fee from the user. The act of completing the user partial transaction is done by creating an “executor ptx”. The bundle of [user_ptx, executor_ptx] forms a completed (balanced) transaction.

The two partial transactions will look something like this:

Screenshot 2024-07-04 at 2.22.19 AM.png

Making this Concrete

For this initial PoC we are looking to understand feasibility of this design. To that end, we will focus on getting an end-to-end integration of the CL data model with a real zkVM. This will mean that we will not implement features that are not crucial to demonstrating feasibility of this design.

Limitations of v0.1

Deliverables