Skip to content
Daml

xReserve Workflows

xReserve Workflows

Onboarding Workflow

Once technical setup is complete and the user has access to the xReserve UI, the user can perform technical onboarding to use the xReserve solution to deposit (mint) and withdraw (burn) USDC on Canton Network. Onboarding is thus a one-time, technical setup process the user goes through in order to create the smart contract on chain that technically allows the user to use xReserve solution.

Please note that once onboarding is done, the user will only be able to deposit (mint) USDC only to the Party Id that was onboarded. The Party Id that the user is working with, and requesting onboarding for, can be seen on the top right of the xReserve UI.

Onboarding Steps:

  1. Login to the xReserve UI.

    1. The actual login process is depended on your organization’s authentication policies.

  2. Once login is done, the user lands on a page with no data and a yellow button in the top right corner labeled Onboard.

_images/Onboarding_1.png
  1. To proceed, the user should click on the yellow Onboard button.

    1. The user will see a popup to confirm the onboarding action, which includes a checkbox for the user to select if Pre-approval should be enabled for this Party Id. Pre-approval here refers to the user giving pre-approval authorization to the xReserve system (and delegating authority to it) to mint all incoming deposits for the user automatically. This choice can be changed in the future.

      1. If Pre-approval is enabled, then all deposits for this Party Id will be automatically minted, based on the authority delegated by the user to the xReserve system**, without the need for the user to manually click the Mint button for each deposit attestation

        _images/Onboarding_2_Popup_PreApproval.png
      2. If Pre-approval is not enabled, then the user will need to manually click the Mint button for new deposit attestation(s) in order for the USDC to be minted to their Party Id on Canton Network

      _images/Onboarding_2_Popup_NoPreApproval.png
    2. Once the user clicks the Confirm Onboard button on the popup they will see a Successfully requested onboarding popup on the bottom left of the screen.

      _images/Onboarding_3_Successful.png
  2. Once submitted, the onboarding request is typically approved by the application operator within a short period of time (under 1 minute). Once done, the user now sees a message stating that they are all set on the main landing page. The landing page also displays their USDC balances and transactions. This concludes the onboarding process.

    _images/Onboarding_4_After_Success.png

Offboarding Workflow

The user is able to reverse their onboarding and offboard their Party Id from being able to use the xReserve solution.

  1. The user can do this from the Settings Page, which can be reached by clicking on the light purple person icon on the top right of the screen and then selecting on the Settings. The first option from the top will be Remove account (offboard).

_images/Offboarding_1.png
  1. Once the user clicks on the red Offboard button, they will see a popup to confirm the offboarding action. Once the user clicks Yes, offboard. on the popup, the offboarding process will complete and the user will no longer be able to use the xReserve solution with this Party Id.

_images/Offboarding_2.png

The user could always choose to re-onboard again in the future if they wish to use the xReserve solution again by repeting the Onboarding steps outlined above.

Mint/Deposit Workflow

_images/mint_workflow.png

How to send funds on L1 chain (e.g. Ethereum)

On an L1 chain such as Ethereum, USDC needs to be sent to the Circle’s xReserve contract, with additional meta data specifying that the funds should be created on Canton Network for a specific Party Id (analogous to a wallet address).

In order to send funds to Circle’s xReserve, the user has several options as outlined below.

Please note that fees may apply here depending on the L1 chain used, for example on Ethereum gas fees will apply.

Script

Open source script published by DA is available to be used by users here: https://github.com/digital-asset/xreserve-deposits.

Opensource UI

Digital Asset has created a lightweight UI that users can connect their wallets to (UI supports wallet connect) and can be used to send USDC from an L1 chain (e.g. Ethereum) and create USDC on Canton Network.

The UI supports sending USDC on both MainNet (e.g. Ethereum MainNet to Canton Network MainNet) and on TestNet (e.g. Ethereum Sepolia TestNet to Canton Network TestNet)

URL for UI: https://digital-asset.github.io/xreserve-deposits/.

Steps to use the UI:

  1. Select the environment - by default it is set to MainNet.

    1. Users can switch to TestNet and back by going to the Settings Gear icon on the top right.

      _images/Deposit_1.png
    2. The environment can then be changed in the resulting popup.

      _images/Deposit_2.png
  2. Click on the Connect Wallet button to connect the UI with any wallet that supports wallet connect (e.g. Meta Mask).

  3. Populate the information about how much USDC is to be sent for deposit (to be minted) on Canton Network and for which Party Id.

    1. Amount (USDC) - the amount of USDC that will be sent to Circle’s xReserve contract and subsequently deposited (minted) on Canton Network.

    2. Canton recipient party ID - the Party Id (equivalent to a wallet address) to which USDC on Canton Network will be deposited (minted). Importnatly this Party Id should be the same Party Id used in onboarding.

      _images/Deposit_3.png
  4. Once the correct amount and recipient are populated - click Deposit button.

    1. The user will see a Confirm Deposit poupup reviewing the amount and outlining the action the user is taking and the next steps. Please make sure to read this thoroughly

      _images/Deposit_4_Confirm_Popup.png
    2. Once the user confirms the deposit popup, 2 transactions will be triggered that the user will need to approve via their wallet (which was connected in step 2).

  5. Once completed, the user will need to wait for finality on the L1 chain - for example on Ethereum finality takes approximately 13 to 15 minutes (2 epochs).

    1. Once finality for these transactions is achieved, Circle will confirm the deposit and create a deposit attestation which xReserve will create on the Canton Network as a contract for the user to action - see next section.

How to receive funds on Canton Network

Once the user has finished their onboarding process (as outlined above), they are able to mint USDC on Canton Network, as follows:

  1. Once finality is reached on L1 chain, Circle will provide a deposit attestation which will then be written by the xReserve operator as a contract on the Canton Network.

    1. Finality on Ethereum usually takes about 2 epochs, or 13 to 15 minutes.

  2. The recipient user (whose Party Id was specified when sending USDC on the original chain) will be able to see and action the deposit attestation contract.

    1. If the user has previously enabled Pre-approval for their Party Id, then the deposit attestation will be automatically actioned and the USDC will be automatically minted to their Party Id without the need for any manual user action.

    2. If the user has not enabled Pre-approval for their Party Id, then the user will need to manually click the Mint button to mint all pending deposits as USDC onto the Canton Network.

      1. User would see all pending deposits in the landing page of the xReserve UI, including the number of pending attestations and the total amount of USDC for all of these attestations.

        _images/Deposit_5_Mint_CN.png
      2. By clicking on the Mint button, the user can mint all of the pending deposits attestations at once.

      3. After the system successfully processes the mints, the USDC holding for that same amount is minted to the user’s Party Id and a success banner is seen on the bottom left of the screen.

      _images/Deposit_5_Mint_Success.png
  3. Once minted, the users holdings are updated and can be seen on the landing page of the xReserve UI.

    _images/Deposit_6_Success_SC.png
  4. The new holding of USDC can also be seen in the DA Apps (Utilities) UI, in the Holdings section (2nd choice from the top on the left side navigation panel) of the Registry module. More details on this can be found in the DA Apps (Utilities) Registry Utility User Guide.

    _images/Deposit_7.png
    1. The user can now use the USDC holding by transferring it elsewhere or using it in other workflows.

    2. USDC can be interacted with through a number of UIs that connect to the user’s Party Id (and the validator node on which that Party Id exists) - some common UIs can be the DA Apps (Utilities) UI or the user’s wallet UI.

Burn/Withdrawal Workflow

_images/burn_workflow.png

How to withdraw funds on Canton Network

The user is able to withdraw (burn) USDC on Canton Network, which are held by their Party Id, as follows:

  1. On the landing page of the xReserve UI, the user can see their USDC holdings and click on the Withdraw button to initiate a withdrawal (burn) request.

    _images/Withdrawal_1.png
  2. Once the user clicks the Withdraw button, a popup will appear asking the user to populate the below fields needed for USDC withdrawal:

    _images/Withdrawal_2_Popup_1_Ex_Fees.png
    1. Network - select which destination L1 blockchain network to withdraw USDC to.

    2. Recipient Recipient - specify the address on that L1 chain where the funds should be sent to.

      1. E.g. address of the user’s wallet on Ethereum network.

    3. Amount - amount of USDC to withdraw.

      1. Up to 6 decimal points.

      2. Cannot exceed amount of USDC held by the user.

    4. Checkbox for Fees - a checkbox to specify if the witdrawal fee (flat fee charged by Circle for every withdrawal transaction) should be included in the previously specified amount or should be taken out on top of that amount.

  3. Once the user clicks Review on the popup, another popup is presenteds to the user to review and confirm the withdrawal details.

    _images/Withdrawal_2_Popup_2_Ex_Fees.png
  4. Once the user clicks to Confirm Withdraw on the popup, the amount of USDC specified by the user is burned on Canton Network and the user will receive that amount (less Circle’s withdrawal fee) on the destination chain. The user will also see a success banner on the bottom left of the screen confirming that the burn request was successful.

    _images/Withdrawal_3_Success_Popup.png
  5. The user will be able to see the withdrawal transaction being processed in the transaction history on the landing page of the xReserve UI.

    _images/Withdrawal_4_Blotter_Pending.png

How to receive funds on destination L1chain (e.g. Ethereum)

Once the USDC holdings have been withdrawn (burned) by the user, the xReserve operator and Circle will both validate the withdrawal request. Once confirmed to be authentic, Circle will then release the equivalent amount of USDC minus the xReserve withdrawal fees on the specified destination chain and to the specified destination recipient address. The user can then verify that the funds have been released as expected.

The user will also be able to see this reflected in the transaction history on the landing page of the xReserve UI, where the transaction is updated with the Finalized status.

_images/Withdrawal_5_Blotter_Finalized.png

Pre-approval Setting

Pre-approval is a very important concept refers to the user giving pre-approval authorization to the xReserve system (and delegating authority to it) to mint all incoming deposits for the user automatically.

The user is able to change their Pre-approval setup any time on the landing page of the UI by doing the following:

  1. User can use the Pre-approval toggle on the landing page to change setting

_images/Pre-Approval_Off.png
  1. User will then see a popup to confirm the change in Pre-approval setting. Once the user confirms their choice they will see a success banner on the bottom left of the screen confirming that the Pre-approval setting has been updated.

_images/Pre-Approval_Popup.png _images/Pre-Approval_Success.png
  1. User can then see the pre-approval setting change reflected on the landing page.

_images/Pre-Approval_On.png

Please note that this option can also be changed from the Settings Page which is described in detail below.

All Settings

This section outlines all of the options in the Setting screen.

The user can access the settings page by clicking on the light purple person icon on the top right of the screen and then selecting on the Settings.

_images/Settings_1.png _images/Settings_2.png

The Settings screen contains the following:

_images/Settings_3.png
  1. Remove account (offboard) - Once offboarded, the smart contract associated to this account will be inactive and archived. See the Offboarding section for further details.

  2. Pre-approval - Pre-approval enables the user to provide their authority to mint the deposit directly to their account (aka Party Id). Settings allows yet another place where this can be managed. See the Pre-approval section for further details.

  3. WebSocket - This setting allows user to enable or disable WebSocket connections for real-time contract updates. When disabled, the UI falls back to HTTP polling.

  4. Network polling - This setting allows user to enable or disable periodic polling for contract updates. When disabled, the UI relies on WebSocket connections only.

  5. Active contract storage - This setting allows the user to clear the existing active contracts which are accumulated in the Reserve UI.

  6. Transaction history - This setting allows the user to enable or disable the display of executed deposits in the transaction history.