MainNet 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’s MainNet.

InstrumentId.id = USDCx

InstrumentId.admin = decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef

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.

** See the information for TestNet in the Appendix

DAR file

Download DAR

Download checksum file

Technical Deployment with Kubernetes (MainNet)

Utilities Setup:

USDCx is a standard Registry Utility token. Refer to the Utilities setup outlined here prior to installing the xReserve UI as below.

Helm Chart:

helm install cub -f values.yaml \
    oci://europe-docker.pkg.dev/da-images/public/charts/cub:0.2.10

Example Ingress:

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:

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
  validator:
    host: validator-app
    port: 5003

# MainNet Constants below. Do not change.
parties:
  utilityOperator: "auth0_007c6643538f2eadd3e573dd05b9::12205bcc106efa0eaa7f18dc491e5c6f5fb9b0cc68dc110ae66f4ed6467475d7c78e"
  bridgeOperator: "Bridge-Operator::1220c8448890a70e65f6906bd48d797ee6551f094e9e6a53e329fd5b2b549334f13f"
  crossChainRepresentative: "decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef"

contracts:
  allocationFactory:
    templateId: "8c335bb7d522489d71faf3eef046ad1a56f091b55b4f2d3086c7266afca1d647:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory"
    contractId: "006289e882123613ea96d71fad9cc38a529e613a8d4b550ef6a0422383e1925934ca11122003bc3af7d468f09465fa72db6182b63e349804e430a81eeeffa9076f5099f796"
    eventBlob: "CgMyLjESiwcKRQBiieiCEjYT6pbXH62cw4pSnmE6jUtVDvagQiOD4ZJZNMoREiADvDr31GjwlGX6ctthgrY+NJgE5DCoHu7/qQdvUJn3lhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiuQJqtgIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwODExNWYxZTE2OGRkN2U3OTIzMjBiZTljNGNhNzIwYzc1MWEwMmEzMDUzYzc2MDZlMWMxY2QzZGFkOWJmNjBlZgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiC7t2lHB3NuKxVhVA0EL5T+JGl5YJ6hVSv8wD+vxG3/+BAe"
  instrumentConfig:
    templateId: "b4ae77b8c0c7faa8bc8bb048f035dfe3d85d3e36d4bafaa4cf59631ec635ddb2:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration"
    contractId: "002a23aed42edb51940f74f6fc5f7b8267c9192ab8e72296673420ffc4c4f22debca1112201d94617a63f11a4ce245498930752e56313d200b6a0976ee621f6add2788ba1b"
    eventBlob: "CgMyLjESwAkKRQAqI67ULttRlA909vxfe4JnyRkquOcilmc0IP/ExPIt68oREiAdlGF6Y/EaTOJFSYkwdS5WMT0gC2oJdu5iH2rdJ4i6GxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLyBGrvBApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwYzg0NDg4OTBhNzBlNjVmNjkwNmJkNDhkNzk3ZWU2NTUxZjA5NGU5ZTZhNTNlMzI5ZmQ1YjJiNTQ5MzM0ZjEzZgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDgxMTVmMWUxNjhkZDdlNzkyMzIwYmU5YzRjYTcyMGM3NTFhMDJhMzA1M2M3NjA2ZTFjMWNkM2RhZDliZjYwZWYKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiDG2u5/5aFqKxIBQ1NhOOUuMloJWjlgtAJ9hY+R5wQVHRAe"
  appConfig:
    templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration"
    contractId: "00ad54961b99aa48d545fe0d74a6b56737e8cb0d7935e831ee1afce0619a4a82bfca1112202c765d54dfcc7a1db8d0bbb5f06951ceb4562a1acaaf74de13c6d05ebe4a64c4"
    eventBlob: "CgMyLjESkAcKRQCtVJYbmapI1UX+DXSmtWc36MsNeTXoMe4a/OBhmkqCv8oREiAsdl1U38x6HbjQu7XwaVHOtFYqGsqvdN4TxtBevkpkxBITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24irQNqqgMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY2NDM1MzhmMmVhZGQzZTU3M2RkMDViOTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjAwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmOcSAY/8mQgYAQioKJgokCAESIK+PKFSW8cBTvl2P8GALcq6BORe5200JDD0n1z+pnQylEB4="

Technical Deployment with Docker (MainNet)

Utilities Setup:

USDCx is a standard Registry Utility token. Refer to the Utilities setup outlined here prior to installing the xReserve UI as below.

Additional Environment Variables:

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

CUB_IMAGE_REPO="europe-docker.pkg.dev/da-images/public/docker"
CUB_IMAGE_VERSION="0.2.10"

# MainNet constants below:

UTILITY_OPERATOR_PARTY_ID="auth0_007c6643538f2eadd3e573dd05b9::12205bcc106efa0eaa7f18dc491e5c6f5fb9b0cc68dc110ae66f4ed6467475d7c78e"
CUB_OPERATOR_PARTY_ID="Bridge-Operator::1220c8448890a70e65f6906bd48d797ee6551f094e9e6a53e329fd5b2b549334f13f"
CROSS_CHAIN_REPRESENTATIVE_PARTY_ID="decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef"
FACTORY_CONTRACT_ID="006289e882123613ea96d71fad9cc38a529e613a8d4b550ef6a0422383e1925934ca11122003bc3af7d468f09465fa72db6182b63e349804e430a81eeeffa9076f5099f796"
FACTORY_CREATED_EVENT_BLOB="CgMyLjESiwcKRQBiieiCEjYT6pbXH62cw4pSnmE6jUtVDvagQiOD4ZJZNMoREiADvDr31GjwlGX6ctthgrY+NJgE5DCoHu7/qQdvUJn3lhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiuQJqtgIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwODExNWYxZTE2OGRkN2U3OTIzMjBiZTljNGNhNzIwYzc1MWEwMmEzMDUzYzc2MDZlMWMxY2QzZGFkOWJmNjBlZgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiC7t2lHB3NuKxVhVA0EL5T+JGl5YJ6hVSv8wD+vxG3/+BAe"
INSTRUMENT_CONTRACT_ID="002a23aed42edb51940f74f6fc5f7b8267c9192ab8e72296673420ffc4c4f22debca1112201d94617a63f11a4ce245498930752e56313d200b6a0976ee621f6add2788ba1b"
INSTRUMENT_CREATED_EVENT_BLOB="CgMyLjESwAkKRQAqI67ULttRlA909vxfe4JnyRkquOcilmc0IP/ExPIt68oREiAdlGF6Y/EaTOJFSYkwdS5WMT0gC2oJdu5iH2rdJ4i6GxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLyBGrvBApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwYzg0NDg4OTBhNzBlNjVmNjkwNmJkNDhkNzk3ZWU2NTUxZjA5NGU5ZTZhNTNlMzI5ZmQ1YjJiNTQ5MzM0ZjEzZgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDgxMTVmMWUxNjhkZDdlNzkyMzIwYmU5YzRjYTcyMGM3NTFhMDJhMzA1M2M3NjA2ZTFjMWNkM2RhZDliZjYwZWYKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiDG2u5/5aFqKxIBQ1NhOOUuMloJWjlgtAJ9hY+R5wQVHRAe"
APP_CONFIG_CONTRACT_ID="00ad54961b99aa48d545fe0d74a6b56737e8cb0d7935e831ee1afce0619a4a82bfca1112202c765d54dfcc7a1db8d0bbb5f06951ceb4562a1acaaf74de13c6d05ebe4a64c4"
APP_CONFIG_CREATED_EVENT_BLOB="CgMyLjESkAcKRQCtVJYbmapI1UX+DXSmtWc36MsNeTXoMe4a/OBhmkqCv8oREiAsdl1U38x6HbjQu7XwaVHOtFYqGsqvdN4TxtBevkpkxBITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24irQNqqgMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY2NDM1MzhmMmVhZGQzZTU3M2RkMDViOTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjAwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmOcSAY/8mQgYAQioKJgokCAESIK+PKFSW8cBTvl2P8GALcq6BORe5200JDD0n1z+pnQylEB4="
FACTORY_TEMPLATE_ID="8c335bb7d522489d71faf3eef046ad1a56f091b55b4f2d3086c7266afca1d647:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory"
INSTRUMENT_TEMPLATE_ID="b4ae77b8c0c7faa8bc8bb048f035dfe3d85d3e36d4bafaa4cf59631ec635ddb2:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration"
APP_CONFIG_TEMPLATE_ID="ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration"

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

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_UTILITY_OPERATOR_PARTY_ID=${UTILITY_OPERATOR_PARTY_ID}
    - BRIDGE_APP_BRIDGE_OPERATOR_PARTY_ID=${CUB_OPERATOR_PARTY_ID}
    - BRIDGE_APP_CROSS_CHAIN_REPRESENTATIVE_PARTY_ID=${CROSS_CHAIN_REPRESENTATIVE_PARTY_ID}
    - BRIDGE_APP_FACTORY_CONTRACT_ID=${FACTORY_CONTRACT_ID}
    - BRIDGE_APP_FACTORY_CREATED_EVENT_BLOB=${FACTORY_CREATED_EVENT_BLOB}
    - BRIDGE_APP_INSTRUMENT_CONTRACT_ID=${INSTRUMENT_CONTRACT_ID}
    - BRIDGE_APP_INSTRUMENT_CREATED_EVENT_BLOB=${INSTRUMENT_CREATED_EVENT_BLOB}
    - BRIDGE_APP_CONFIG_CONTRACT_ID=${APP_CONFIG_CONTRACT_ID}
    - BRIDGE_APP_CONFIG_CREATED_EVENT_BLOB=${APP_CONFIG_CREATED_EVENT_BLOB}
    - BRIDGE_APP_FACTORY_TEMPLATE_ID=${FACTORY_TEMPLATE_ID}
    - BRIDGE_APP_INSTRUMENT_TEMPLATE_ID=${INSTRUMENT_TEMPLATE_ID}
    - BRIDGE_APP_CONFIG_TEMPLATE_ID=${APP_CONFIG_TEMPLATE_ID}
  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

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/;
    }
  }
}