Decentralization Manager
Overview
A web application for managing decentralized parties on Canton network deployments. It provides a user interface for onboarding new parties, deploying governance contracts, and managing participant membership.
Features
Web-Based Management UI: React frontend for managing decentralized parties
Multi-Party Onboarding: Coordinated workflow for creating decentralized party namespaces
Contract Deployment: Upload DAR files and deploy governance contracts with multi-party signing
Governance Actions: View and manage governance confirmations with threshold-based execution
Participant Management: View party membership, kick participants with threshold-based voting
OAuth Authentication (Keycloak or Auth0): Supports M2M (client_credentials) and password flows for Ledger API access, with a per-node choice of provider for both frontend gating and outbound Canton tokens
Secure P2P Communication: Noise Protocol Framework for encrypted coordinator to peer communication
Real-time Status: Live peer connectivity monitoring and workflow progress tracking
Canton Integration: Native gRPC integration with Canton Admin and Ledger APIs
Documentation
Introduction: Start here - what Decentralization Manager does and why to decentralize your application on Canton
Architecture Overview: System architecture, core concepts, communication protocol, and technical constraints
User Guide: Walkthrough of the web UI for day-to-day party and governance operations
Custom DAML Templates: Authoring and deploying your own DAML governance templates
Contributing Guide: Development setup, coding standards, commit conventions, and the PR process
Security
The Decentralization Manager was audited by Quantstamp (May 2026). The full audit report is available here: Quantstamp Audit Report
Architecture
The application runs as an HTTP server with an embedded React frontend. Multiple instances coordinate via the Noise Protocol:
Coordinator: Initiates workflows and orchestrates multi-party operations
Peers: Respond to coordinator commands, sign proposals, and execute local operations
Automatic Key Management: Noise keypairs are generated automatically on first run
Quick Start
Prerequisites
Rust toolchain (for building from source)
Access to Canton participant nodes (Admin API and Ledger API)
Docker (optional, for containerized deployment)
Running Locally
Open http://localhost:8081 in your browser.
Running with Docker
Running Multiple Participants (Development)
This starts three participant instances on ports 8081, 8082, and 8083.
Configuration
All node configuration is done via environment variables (prefixed DECPM_*) or CLI arguments. The --dir (-d) flag points to a directory for persistent data. If a .env file exists in that directory, it is loaded automatically before parsing CLI arguments.
Directory Structure
The database file path can be overridden with the --db CLI flag.
Environment Variables
DECPM_DIR
Root directory for persistent data (--dir/-d)
.
DECPM_HOST
Host address to bind the HTTP/UI server to
0.0.0.0
DECPM_PORT
Port for the HTTP/UI server
8080
DECPM_DB_PATH
SQLite database path override (CLI flag --db)
(defaults to {dir}/data/decpm.db)
DECPM_DB_ENCRYPTION_KEY
Encryption key for secrets stored in the database
(none)
DECPM_ADMIN_ROLE
Role name that gates sensitive endpoints (unset skips the role check)
(none)
DECPM_ALLOWED_ORIGIN
Origin permitted by CORS (for example https://dpm.example.com)
(none, same-origin only)
DECPM_LISTEN_ADDRESS
Address to listen on for Noise protocol connections
0.0.0.0
DECPM_NOISE_PORT
Port for Noise protocol connections
9000
DECPM_PUBLIC_ADDRESS
Public address that peers use to connect to this node
(falls back to listen address)
DECPM_CANTON_ADMIN_HOST
Canton Admin API host
127.0.0.1
DECPM_CANTON_ADMIN_PORT
Canton Admin API port
5002
DECPM_CANTON_LEDGER_HOST
Canton Ledger API host
127.0.0.1
DECPM_CANTON_LEDGER_PORT
Canton Ledger API port
5001
DECPM_CANTON_SYNCHRONIZER
Canton synchronizer name
global
DECPM_CANTON_NETWORK
Canton network environment (devnet, testnet, mainnet)
devnet
DECPM_KEYCLOAK_URL
Keycloak server URL for frontend auth
(none)
DECPM_KEYCLOAK_REALM
Keycloak realm name for frontend auth
(none)
DECPM_KEYCLOAK_CLIENT_ID
Keycloak client ID for frontend auth
(none)
DECPM_KEYCLOAK_INTERNAL_URL
Internal/backchannel Keycloak URL the server uses for OIDC discovery, JWKS, and introspection when it cannot reach the public Keycloak URL directly
DECPM_KEYCLOAK_URL
DECPM_AUTH0_DOMAIN
Auth0 tenant domain for frontend auth (mutually exclusive with the Keycloak variables)
(none)
DECPM_AUTH0_CLIENT_ID
Auth0 SPA client ID for frontend auth
(none)
DECPM_AUTH0_AUDIENCE
Auth0 API audience the SPA's access tokens target
(none)
DECPM_TIMEOUT_HANDSHAKE
Noise handshake timeout in seconds
30
DECPM_TIMEOUT_MESSAGE
Noise message timeout in seconds
120
DECPM_TIMEOUT_RETRY_ATTEMPTS
Connection retry attempts
3
DECPM_TIMEOUT_RETRY_DELAY
Connection retry delay in seconds
5
DECPM_NOISE_RETRY_TIMEOUT_SEC
Per-attempt timeout for the bounded peer-Noise retry wrapper, in seconds
5
DECPM_NOISE_RETRY_MAX_ATTEMPTS
Total attempts (initial plus retries) for the bounded peer-Noise retry wrapper
2
DECPM_NOISE_RETRY_BACKOFF_MS
Backoff between attempts of the bounded peer-Noise retry wrapper, in milliseconds
250
API Reference
The manager exposes an HTTP API for configuration, workflow orchestration, and governance. A complete, interactive reference is available via the Swagger UI at /swagger-ui/ (OpenAPI document at /api-docs/openapi.json). Note that these interactive endpoints are only mounted in development and test builds; the shipped release image does not expose them. The main endpoint groups are:
Node and network configuration: node and network info, peer list management, and per-party credential configuration.
Decentralized parties: listing parties and viewing participant connectivity and key status.
Workflows: starting, tracking, cancelling, retrying, and dismissing the onboarding, contracts, and kick workflows, plus managing invitations.
Authentication: checking authentication status and testing outbound identity-provider auth per party.
Governance: viewing governance state and confirmations, and submitting, executing, expiring, or cancelling governance actions.
Contracts and services: querying deployed vaults, provider/user/registrar services, active contracts by template, configured package IDs, and token-standard contracts.
DAR distribution: uploading DARs to the current node, distributing them across all participants, and tracking distribution progress.
Last updated