canton-network-repos
π‘ Summary
This skill provides insights into the Canton Network, DAML, and Splice repositories for compatibility and debugging.
π― Target Audience
π€ AI Roast: βPowerful, but the setup might scare off the impatient.β
Risk: Medium. Review: shell/CLI command execution; outbound network access (SSRF, data egress); API keys/tokens handling and storage. Run with least privilege and audit before enabling in production.
name: canton-network-repos description: Canton Network, DAML, and Splice repository knowledge. Use when working with Canton participants, DAML smart contracts, Splice applications, LF version compatibility, or package ID mismatches. Triggers on Canton, DAML, Splice, decentralized-canton-sync, or LF version queries.
Canton Network Open-Source Repositories
This skill provides comprehensive knowledge about the Canton Network open-source ecosystem, repository relationships, and build processes.
Activation
Use this skill when:
- Working with Canton Network, DAML, or Splice repositories
- Investigating version compatibility issues
- Understanding enterprise vs community differences
- Debugging LF version or package ID mismatches
- Building Canton participants or Splice applications
Repository Hierarchy
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Splice Version (e.g., 0.5.4) β
β github.com/digital-asset/decentralized-canton-sync β
β Applications: Validator, SV, Wallet, Scan, Amulet (CC) β
βββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β depends on
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Canton Version (e.g., 3.4.9) β
β github.com/digital-asset/canton β
β Runtime: Participant, Sequencer, Mediator, Admin API β
βββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ
β depends on
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DAML SDK (e.g., 3.4.9) β
β github.com/digital-asset/daml β
β Compiler: damlc, LF Engine, Ledger API, stdlib, protobuf β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Repository Details
1. DAML SDK (github.com/digital-asset/daml)
Purpose: Smart contract language, compiler, and runtime libraries.
Key Directories:
daml/
βββ sdk/
β βββ compiler/damlc/ # Haskell compiler source
β β βββ lib/DA/Cli/Options.hs # --target version validation
β βββ daml-lf/
β β βββ language/ # LF version definitions (Scala)
β β βββ engine/ # LF execution engine
β β βββ archive/ # DALF protobuf format
β βββ canton/ # Canton runtime (submodule)
βββ ledger-api/ # gRPC API definitions
βββ VERSION # SDK version string
LF Version Definitions (LanguageVersion.scala at v3.4.9):
// V2 versions defined val List(v2_1, v2_2, v2_dev) = AllV2 // Line 51 - v2_2 IS defined // Version ranges case Major.V2 => VersionRange(v2_1, v2_2) // Line 171 - StableVersions includes v2_2 def AllVersions = VersionRange(v2_1, v2_dev) // Features at v2_2: val flatArchive = v2_2 val kindInterning = flatArchive val exprInterning = flatArchive val explicitPkgImports = v2_2 val unsafeFromInterfaceRemoved = v2_2
Note: v2_2 IS in SDK v3.4.9 source. Older snapshots may not include it.
damlc Target Validation (Options.hs):
lfVersionOpt :: Parser LF.Version -- Validates against LF.supportedOutputVersions -- Error: "Unknown Daml-LF version: X" if not in list
2. Canton (github.com/digital-asset/canton)
Purpose: Distributed ledger runtime implementing the Canton Protocol.
Key Directories:
canton/
βββ community/ # Open-source Canton
β βββ app/ # CantonCommunityApp entry point
β βββ participant/ # Participant node implementation
β βββ domain/ # Embedded domain (sequencer/mediator)
β βββ common/src/main/daml/ # Built-in DAML packages
β βββ AdminWorkflows/ # Ping, party replication DARs
βββ daml/ # DAML SDK submodule
βββ daml_dependencies.json # LF library versions
βββ VERSION # Canton version
βββ version.sbt # SBT version config
Built-in DARs (embedded in JAR):
canton-builtin-admin-workflow-ping.darcanton-builtin-admin-workflow-party-replication-alpha.darCantonExamples.dar
Enterprise vs Community: | Feature | Enterprise | Community | |---------|------------|-----------| | Main class | CantonEnterpriseApp | CantonCommunityApp | | Transaction processing | Parallel | Sequential | | Pruning | Available | Limited | | Database | PostgreSQL, Oracle | PostgreSQL only | | HA Domain | Supported | Embedded only |
3. Splice (github.com/digital-asset/decentralized-canton-sync)
Purpose: Decentralized synchronizer governance, Amulet (Canton Coin), and network applications.
Key Directories:
decentralized-canton-sync/
βββ project/
β βββ CantonDependencies.scala # Version config, LF versions
β βββ DamlPlugin.scala # DAR build logic
βββ daml/
β βββ splice-amulet/ # Canton Coin token contracts
β βββ splice-wallet/ # Wallet contracts
β βββ splice-dso-governance/ # DSO governance
β βββ */daml.yaml # Package configs with --target
βββ apps/
β βββ sv/ # Super Validator app
β βββ validator/ # Validator app
β βββ wallet/ # Wallet backend
β βββ scan/ # Payment scan service
βββ cluster/images/ # Docker image builds
β βββ canton-community/ # Community participant image
βββ daml-compiler-sources.json # Compiler version reference
Critical Configuration (CantonDependencies.scala):
object CantonDependencies { val version: String = "3.4.9" val daml_language_versions = Seq("2.1") // β LF target version val daml_libraries_version = version val daml_compiler_version = sys.env("DAML_COMPILER_VERSION") }
Package Target (daml/splice-amulet/daml.yaml):
sdk-version: 3.3.0-snapshot.20250502.13767.0.v2fc6c7e2 build-options: - --target=2.1 # Explicit LF 2.1 target
Version Mapping
| Splice | Canton | DAML SDK | Protocol | LF (Default) | LF (With SDK 3.4.9) | |--------|--------|----------|----------|--------------|---------------------| | 0.5.4 | 3.4.9 | 3.4.9 | PV34 | 2.1* | 2.2 (verified) | | 0.5.3 | 3.4.8 | 3.4.8 | PV34 | 2.1* | 2.2 | | 0.4.x | 3.3.x | 3.3.x | PV33 | 2.1 | 2.1 |
*Open-source Splice 0.5.4 ships with SDK snapshot 3.3.0-snapshot.20250502 which predates LF 2.2.
Root Cause (Verified): The public Splice release uses an SDK snapshot from May 2, 2025, but LF 2.2 was added to the SDK on October 3, 2025. Updating to SDK 3.4.9 enables LF 2.2 builds.
Key insight: LF 2.2 is fully available in open-source SDK v3.4.9. The Splice project simply needs to be updated to use the newer SDK.
LF Version Implications
Package ID Derivation
Package IDs are cryptographic hashes derived from:
- Package source content
- LF version used (
--target) - SDK/stdlib versions
- Dependency package IDs
Changing LF version = Different package IDs = Incompatible packages
Upgrade Validation
Canton validates package upgrades:
- Upgraded packages must use equal or newer LF version
- LF 2.1 package cannot "upgrade" to LF 2.2 package (different IDs)
- Mixing LF versions on same ledger causes validation failures
Building from Open-Source
Community Canton Participant
cd canton sbt "community/app/assembly" # Output: community/app/target/scala-2.13/canton-community.jar
Splice Applications
cd decentralized-canton-sync sbt compile # Requires DAML_COMPILER_VERSION env var
Building with LF 2.2 (Verified Working)
LF 2.2 is available in SDK v3.4.9. The following steps have been verified to work:
-
Edit
project/CantonDependencies.scala:val daml_language_versions = Seq("2.2") -
Update
nix/daml-compiler-sources.json:{ "version": "3.4.9" } -
Update all
daml/*/daml.yamlfiles:sdk-version: 3.4.9 build-options: - --target=2.2 -
Remove invalid warning flags (not present in SDK 3.4.9):
# Remove -Wno-ledger-time-is-alpha from all daml.yaml files -
Build packages:
cd decentralized-canton-sync nix-shell -p daml-sdk --run "daml build -p daml/splice-util" nix-shell -p daml-sdk --run "daml build -p daml/splice-amulet"
Verified: splice-util and splice-amulet build successfully with LF 2.2 and SDK 3.4.9.
Fully Open-Source LF 2.2 Build (Verified)
Both Splice and Canton can be built with LF 2.2 from entirely open-source code:
Canton Built-in DARs
Update Canton's daml.yaml files:
cd canton/community # Update all daml.yaml files to sdk-version: 3.4.9 and --target=2.2 perl -pi -e 's/sdk-version: 3\.3\.0-snapshot\.[^\n]*/sdk-version: 3.4.9/g' **/daml.yaml perl -pi -e 's/--target=2\.1/--target=2.2/g' **/daml.yaml
Rebuild Canton:
sbt "canton-community-app/assembly"
Verified Results (2025-12-24)
Community-built DARs have identical package IDs to enterprise:
canton-builtin-admin-workflow-ping-3.4.9-fbeb863dab36da66d99...
This confirms full compatibility with enterprise deployments.
Key Files Reference
| Purpose | Repository | File |
|---------|------------|------|
| LF versions (Scala) | daml | sdk/daml-lf/language/.../LanguageVersion.scala |
| damlc validation | daml | sdk/compiler/damlc/lib/DA/Cli/Options.hs |
| Canton version | canton | VERSION |
| Canton DARs | canton | community/common/src/main/daml/ |
| Splice LF config | splice | project/CantonDependencies.scala |
| Package targets | splice | daml/*/daml.yaml |
| Docker builds | splice | `cluster/images/*/Dock
Pros
- Comprehensive knowledge base
- Supports debugging and compatibility checks
- Facilitates understanding of complex dependencies
Cons
- May require deep technical knowledge
- Complexity could overwhelm new users
- Limited to specific ecosystems
Related Skills
pytorch
SβIt's the Swiss Army knife of deep learning, but good luck figuring out which of the 47 installation methods is the one that won't break your system.β
agno
SβIt promises to be the Kubernetes for agents, but let's see if developers have the patience to learn yet another orchestration layer.β
nuxt-skills
SβIt's essentially a well-organized cheat sheet that turns your AI assistant into a Nuxt framework parrot.β
Disclaimer: This content is sourced from GitHub open source projects for display and rating purposes only.
Copyright belongs to the original author 0xBigBoss.
