xReserve Workflows¶
Onboarding Workflow¶
Once the user has access to the xReserve UI, the user can onboard to use the xReserve solution to mint and burn USDC on Canton Network. To do this the user should follow the below steps:
Login to the xReserve UI.
The actual login process is depended on your organization’s authentication policies.
Once login is done, the user lands on the Onboarding page and is presented with a blue button Request User Agreement.
To onboard the user should click on the blue button Request User Agreement and confirm the Request in the popup.
Once the user clicks the Request button on the popup they will see a Successfully requested user agreement popup on the bottom left of the screen.
Once the xReserve operator has approved the request the user now sees that they have a new service for USDC.
The user also sees additional options for Holdings, Deposits and Withdrawals on the left hand side. This concludes the onboarding process.
Mint/Deposit Workflow¶
How to send funds on Ethereum¶
On 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 an address).
In order to send funds on Ethereum to Circle’s xReserve, the user has several options as outlined below.
Please note that gas fees in Ethereum 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 on Ethereum and create USDC on Canton Network.
The UI supports sending USDC on both MainNet (Ethereum MainNet to Canton Network MainNet) and on TestNet (Ethereum Sepolia TestNet to Canton Network TestNet)
URL for UI: https://digital-asset.github.io/xreserve-deposits/.
Steps to use the UI:
- Select the environment - by default it is set to
MainNet. Users can switch to
TestNetand back by going to the Settings Gear icon on the top right and changing the environment in the resulting popup.
The environment can then be changed in the resulting popup.
- Select the environment - by default it is set to
Click on the Connect Wallet button to connect the UI with any wallet that supports
wallet connect(e.g. Meta Mask).- Populate the information about how much USDC is to be sent for minting on Canton Network and to which party id it should be minted (party id should be the same as was onboarded).
Amount (USDC) - the amount of USDC that will be sent to Circle’s xReserve contract and subsequently minted on Canton Network.
Canton recipient party ID - the party id (equivalent to an address) to which USDC on Canton Network will be minted - should be the same party used in onboarding.
- Once the correct amount and recipient are populated - click Deposit button.
This will create 2 transactions that the user will need to approve via their wallet.
- Once completed, the user will need to wait for finality on Ethereum, which takes approximately 13 to 15 minutes (2 epochs).
Once finality on Ethereum for these transactions are achieved Circle will confirm the deposit and create a deposit attestation which the xReserve will create on the Canton Network as a contract for the user to action - see next section.
Additional UIs¶
Additional UIs are coming soon and being built by others working on Canton Network ecosystem.
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:
- Once finality is reached on Ethereum (or another L1 chain), Circle will provide a deposit attestation which will then be written by the xReserve operator as a contract on the Canton Network.
Finality on Ethereum usually takes about 2 epochs, or 13 to 15 minutes.
- 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.
Using the xReserve UI the user goes to the Deposit section (3rd choice from the top on the left side navigation panel).
- The deposit attestation will be displayed for the the user, including the following:
Amount of USDC to be minted (same as the amount sent on Ethereum).
Recipient party id (same as the user’s party id).
Depositor Address of the USDC sender on Ethereum (or another L1 Chain).
Actions which is represented by a button to Mint.
The user should find the deposit attestation that was sent and click Mint.
Once Mint button is clicked, they use will see a popup to confirm the minting action.
Once the user clicks Mint on the popup, 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.
- The new holding of USDC is visible in the Holdings section (2nd choice from the top on the left side navigation panel).
The user can now use the USDC holding by transferring it elsewhere or using it in other workflows.
USDC can be interacted with through a number of UIs that connect to the user’s party id (and the node on which the party exists) - some common UIs can be the Canton Utilities UI or the wallet UI.
- The USDC holding has now been minted and can be used on Canton Network. The user will need a different UI (connected to the same party id) to interact with the USDC. The use of those solutions is not described here, however some potential options for this would be:
Canton Utilities UI connected to the party id used above
3rd party Wallet UI connected to the party id used above
Burn/Withdrawal Workflow¶
How to send funds on Canton Network¶
The user is able to burn USDC on Canton Network, which are held by their party id, as follows:
Using the xReserve UI the user goes to the Holdings section (2nd choice from the top on the left side navigation panel).
The user selects Withdrawal.
- In the popup, the user should populate 4 fields as follows:
- Destination Chain - select which chain to withdraw USDC to.
Currently only Ethereum is available.
- Destination Recipient - specify the address where the funds should be sent to.
E.g. address of the user wallet on Ethereum.
- Amount - amount of USDC to withdraw.
Up to 6 decimal points.
Cannot exceed amount of USDC held by the user.
Reference - optional - a free text field the user can choose to populate as a reference to be attached to the withdrawal transaction.
Once the user clicks Withdraw on the popup, the USDC holding for that same amount is burned from the user’s party id and a success banner is seen on the bottom left of the screen.
How to receive funds on Ethereum¶
Once the USDC holdings have been 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 same amount of USDC on the specified destination chain and to the specified destination recipient address. The user should verify that the funds have been released as expected.