> ## Documentation Index
> Fetch the complete documentation index at: https://docs.digitalasset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MainNet Technical Setup

<a id="xreserve-technical-setup" />

# Token Details (MainNet)

On Canton Network, the uniqueness of the token is the combination of the token's Instrument Id and the party ID of the token's admin (registrar). Below are these details for USDCx.

Only the USDC that contains these details is the official USDC on the Canton Network.

<Info>
  `InstrumentId.id` = `USDCx`

  `InstrumentId.admin` = `decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef`
</Info>

Explicit disclosure URLs - used to get additional data, for apps looking to interoperate with USDC and use it in their workflows, can be found here: [Token Standard Endpoints](/legacy-docs/legacy-docs/overview/registry-user-guide/token-standard#operator_backend_token_standard_endpoints).

# DAR file

[Download DAR (0.1.5)](https://get.digitalasset.com/usdc-dars/utility-bridge-v0-0.1.5.dar)

[Download checksum file (0.1.5)](https://get.digitalasset.com/usdc-dars/utility-bridge-v0-0.1.5.dar.sha256)

# Technical Deployment with Kubernetes

## Utilities Setup:

USDCx is a standard Registry Utility token. Refer to the Utilities setup outlined [here](/legacy-docs/legacy-docs/setup/prerequisites#utility-prerequisites) prior to installing the xReserve UI as below.

## Helm Chart:

```text theme={null}
helm install cub -f values.yaml \
  oci://europe-docker.pkg.dev/da-images/public/charts/cub:0.3.0
```

## Example Ingress:

```text theme={null}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cub-ingress
  namespace: validator
spec:
  ingressClassName: nginx
  rules:
  - host: *HOSTNAME*
    http:
      paths:
      - backend:
          service:
            name: bridge-frontend
            port:
              number: 80
        path: /
        pathType: Prefix
    - backend:
          service:
            name: participant
            port:
              number: 7575
        path: /api/json-api/
        pathType: Prefix
    - backend:
          service:
            name: validator-app
            port:
              number: 5003
        path: /api/validator/
        pathType: ImplementationSpecific
tls:
- hosts:
    - *HOSTNAME*
    secretName: *CERT-SECRET-NAME*
```

## Example Values file:

```text theme={null}
imageRepository: europe-docker.pkg.dev/da-images/public/docker

oidc:
  issuerUri: ""
  audience: https://canton.network.global
  scope: daml_ledger_api
  frontendClientId: ""

  # the frontend chart uses the validator credentials to upload DARs
  clientId: ""
  clientSecret:
      name: ""
      key: ""

network:
  participant:
    host: participant
    ports:
      admin: 5002
      ledger: 5001
      jsonApi: 7575
  utilityApiUrl: "https://api.utilities.digitalasset.com"
  xReserveApiUrl: "https://xreserve-api.circle.com"

crossChainRepresentative: "decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef"
```

# Technical Deployment with Docker (MainNet)

## Utilities Setup:

USDCx is a standard Registry Utility token. Refer to the Utilities setup outlined [here](/legacy-docs/legacy-docs/setup/prerequisites#utility-prerequisites) prior to installing the xReserve UI as below.

## Additional Environment Variables:

Add the following to your `splice-node/docker-compose/validator/.env`

```text theme={null}
CUB_IMAGE_REPO="europe-docker.pkg.dev/da-images/public/docker"
CUB_IMAGE_VERSION="0.4.2"

CROSS_CHAIN_REPRESENTATIVE_PARTY_ID="decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef"
UTILITY_BACKEND_URL="https://api.utilities.digitalasset.com"
XRESERVE_API_URL="https://xreserve-api.circle.com"
```

## Update `compose.yaml` to add the CUB UI and Darsyncer:

```text theme={null}
cub-ui:
  image: "${CUB_IMAGE_REPO}/cub-frontend:${CUB_IMAGE_VERSION}"
  environment:
    - AUTH_AUTHORITY=${AUTH_AUTHORITY}
    - AUTH_CLIENT_ID=${AUTH_CLIENT_ID}
    - AUTH_AUDIENCE=${AUTH_AUDIENCE}
    - BRIDGE_APP_CROSS_CHAIN_REPRESENTATIVE_PARTY_ID=${CROSS_CHAIN_REPRESENTATIVE_PARTY_ID}
    - UTILITY_BACKEND_URL=${UTILITY_BACKEND_URL}
    - XRESERVE_API_URL=${XRESERVE_API_URL}
  depends_on:
    - participant
    - validator
  networks:
    - ${DOCKER_NETWORK:-splice_validator}

cub-darsyncer:
  image: "${CUB_IMAGE_REPO}/cub-darsyncer-client:${CUB_IMAGE_VERSION}"
  command:
    - --endpoint=participant:5002
  environment:
    - DARS=/dars
    - CLIENT_ID=${VALIDATOR_AUTH_CLIENT_ID}
    - CLIENT_SECRET=${VALIDATOR_AUTH_CLIENT_SECRET}
    - OAUTH_DOMAIN=${AUTH_AUTHORITY}
  depends_on:
    - participant
    - validator
  networks:
    - ${DOCKER_NETWORK:-splice_validator}
```

## Update nginx.conf

Add this to splice-node/docker-compose/validator/nginx.conf to access the cub UI at `http://cub.localhost`

```text theme={null}
http {
  ...
  server {
    listen 80;
    server_name cub.localhost;

    location /api/validator/ {
      rewrite ^\/(.*) /$1 break;
      proxy_pass http://validator:5003/api/validator;
    }

    location /api/json-api {
      rewrite ^\/(.*) /$1 break;
      proxy_pass http://participant:7575/;
    }

    location / {
      proxy_pass http://cub-ui:8080/;
    }
  }
}
```

# TestNet

The examples above use MainNet values. When deploying to TestNet, substitute the following:

| Variable                                          | MainNet                                                                                                   | TestNet                                                                                                   |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `InstrumentId.admin` / `crossChainRepresentative` | `decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef` | `decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61` |
| `utilityApiUrl` / `UTILITY_BACKEND_URL`           | `https://api.utilities.digitalasset.com`                                                                  | `https://api.utilities.digitalasset-staging.com`                                                          |
| `xReserveApiUrl` / `XRESERVE_API_URL`             | `https://xreserve-api.circle.com`                                                                         | `https://xreserve-api-testnet.circle.com`                                                                 |
