CIP - 0066 - Mint Canton Coin from Unminted/Unclaimed Pool
Dear CIP community,
I would like to propose a new Canton Improvement Proposal titled “Enable governance vote to mint Canton Coin from the unminted reward pool”, which aims to operationalize milestone-based rewards and support the delivery assurance mechanism defined in CIP-0058.
The proposal introduces a new governance-controlled process allowing Super Validators to vote on minting escrowed Canton Coin from a shared unminted reward pool. This enables transparent, auditable reward issuance based on milestone completion and network approval.
I welcome feedback, questions, and discussion from the community.
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Draft Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new transferable on-ledger asset.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. To meet this goal, the system must:
- Let SVs propose reward allocations through a formal vote.
- Track and escrow those rewards in a verifiable, on-ledger structure.
- Allow beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensure archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (UnclaimedRewards) without minting.
- The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive Amulets through a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity.
- The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
Best regards,
Jose Velasco
@jose.velasco@...
- A new action requiring confirmation (
- toggle quoted message Show quoted textThank you for sharing this- Proof Group happy to motion this to a voteOn Thu, Jun 19, 2025 at 5:13 AM jose.velasco via lists.sync.global <jose.velasco=intellecteu.com@...> wrote:
Dear CIP community,
I would like to propose a new Canton Improvement Proposal titled “Enable governance vote to mint Canton Coin from the unminted reward pool”, which aims to operationalize milestone-based rewards and support the delivery assurance mechanism defined in CIP-0058.
The proposal introduces a new governance-controlled process allowing Super Validators to vote on minting escrowed Canton Coin from a shared unminted reward pool. This enables transparent, auditable reward issuance based on milestone completion and network approval.
I welcome feedback, questions, and discussion from the community.
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Draft Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new transferable on-ledger asset.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. To meet this goal, the system must:
- Let SVs propose reward allocations through a formal vote.
- Track and escrow those rewards in a verifiable, on-ledger structure.
- Allow beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensure archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (UnclaimedRewards) without minting.
- The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive Amulets through a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity.
- The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
Best regards,
Jose Velasco
- A new action requiring confirmation (
- toggle quoted message Show quoted textSame for Five North. Let’s move it to vote.On Fri, Jun 20, 2025 at 16:14 Chris Matturri <chris@...> wrote:Thank you for sharing this- Proof Group happy to motion this to a voteOn Thu, Jun 19, 2025 at 5:13 AM jose.velasco via lists.sync.global <jose.velasco=intellecteu.com@...> wrote:
Dear CIP community,
I would like to propose a new Canton Improvement Proposal titled “Enable governance vote to mint Canton Coin from the unminted reward pool”, which aims to operationalize milestone-based rewards and support the delivery assurance mechanism defined in CIP-0058.
The proposal introduces a new governance-controlled process allowing Super Validators to vote on minting escrowed Canton Coin from a shared unminted reward pool. This enables transparent, auditable reward issuance based on milestone completion and network approval.
I welcome feedback, questions, and discussion from the community.
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Draft Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new transferable on-ledger asset.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. To meet this goal, the system must:
- Let SVs propose reward allocations through a formal vote.
- Track and escrow those rewards in a verifiable, on-ledger structure.
- Allow beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensure archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (UnclaimedRewards) without minting.
- The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive Amulets through a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity.
- The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
Best regards,
Jose Velasco
- A new action requiring confirmation (
- toggle quoted message Show quoted text
Agreed, Cumberland DRW is also supportive of this and ready to move it to vote.
Our one request is supplement the CIP with a description of the “in practice” workflow. This is a fairly technical CIP and I think a plain English workflow would be helpful for everyone to understand the technical/operational/governance steps that need to take place--including where things like Party IDs, etc. need to be determined. We’d be happy to review it/provide feedback.
Perhaps one general workflow, one specific to SV award escrow/unclaimed, one for Application awards that go unclaimed, and one for Validator awards that go unclaimed.
From: cip-discuss@... <cip-discuss@...> On Behalf Of Yiannis Varelas
Sent: Friday, June 20, 2025 1:27 PM
To: cip-discuss@...
Subject: [ext] Re: [cip-discuss] CIP - 00XX - Mint Canton Coin from Unminted/Unclaimed PoolSame for Five North. Let’s move it to vote. On Fri, Jun 20, 2025 at 16: 14 Chris Matturri <chris@ proofgroup. xyz> wrote: Thank you for sharing this- Proof Group happy to motion this to a vote On Thu, Jun 19, 2025 at 5: 13 AM jose. velasco
Same for Five North. Let’s move it to vote.
On Fri, Jun 20, 2025 at 16:14 Chris Matturri <chris@...> wrote:
Thank you for sharing this- Proof Group happy to motion this to a vote
On Thu, Jun 19, 2025 at 5:13 AM jose.velasco via lists.sync.global <jose.velasco=intellecteu.com@...> wrote:
Dear CIP community,
I would like to propose a new Canton Improvement Proposal titled “Enable governance vote to mint Canton Coin from the unminted reward pool”, which aims to operationalize milestone-based rewards and support the delivery assurance mechanism defined in CIP-0058.
The proposal introduces a new governance-controlled process allowing Super Validators to vote on minting escrowed Canton Coin from a shared unminted reward pool. This enables transparent, auditable reward issuance based on milestone completion and network approval.
I welcome feedback, questions, and discussion from the community.
CIP-00XX Mint Canton Coin from Unminted/Unclaimed Pool
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted poolAuthor:Jose VelascoStatus: DraftType: TokenomicsCreated: 2025-06-18Approved:License: CC-1.0Abstract
This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
Copyright
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
Specification
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.Governance Specification
-
A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. -
A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. -
Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:
-
expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours). -
unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
Allocation and Expiration
-
A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. -
A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. -
A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
Minting Mechanism
-
UnclaimedActivityRecordis introduced as a new transferable on-ledger asset. -
It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. -
This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
Off-ledger Implementation Requirements
- SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
- Wallet App
-
Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- CLI App
-
Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- SV App Voting UI
-
Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- SV App Governance UI
-
Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
Motivation
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
Rationale
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. To meet this goal, the system must:
- Let SVs propose reward allocations through a formal vote.
- Track and escrow those rewards in a verifiable, on-ledger structure.
- Allow beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensure archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.Alternatives Considered
Approach 1 – Mint in One Step
This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
Approach 2 – Post-Vote Execution with Extra Consequences
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Approach 3 – Parallel Offer and Burn Request Flow
Upon a successful vote, two contracts would be created:
-
An
AmuletMintOfferfor the beneficiary to accept. -
A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
Approach 4 – AmuletMintOffer Claimed Manually by Beneficiary
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
Justification for the Final Design
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (UnclaimedRewards) without minting.
-
The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive Amulets through a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity.
- The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
Backwards compatibility
All choices and backend code involved are backward compatible.
Reference implementation
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
Best regards,
Jose Velasco
This e-mail and any attachments may contain information that is confidential and proprietary and otherwise protected from disclosure. If you are not the intended recipient of this e-mail, do not read, duplicate or redistribute it by any means. Please immediately delete it and any attachments and notify the sender that you have received it by mistake. Unintended recipients are prohibited from taking action on the basis of information in this e-mail or any attachments. The DRW Companies make no representations that this e-mail or any attachments are free of computer viruses or other defects.
-
A new action requiring confirmation (
- Hello,I've made some adjustments to the proposal for your review.- Fix UnclaimedActivityRecord description- Enhance Motivation: The proposed mechanism is more general and allows the SVs to mint any kind of unclaimed reward for any reason not just escrowed super validator rewards- Improve Rationale- Add general/specific flows- Typos
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Draft Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.To contextualize the protocol and governance changes introduced by this CIP, we outline both a generalized workflow and a specific escrow-based scenario. These flows illustrate how unminted rewards transition through governance-controlled minting, and how this mechanism enables milestone-based issuance of Canton Coin while preserving decentralization, auditability, and escrow guarantees.
-
Weighted activity records are assigned to a party based on their contributions within a round.
-
If the assigned party fails to mint their rewards before the round concludes, those rewards are moved into the unminted pool.
-
At a later stage—following an off-chain agreement—someone may propose that a specified party should receive a portion of the unminted pool.
-
An on-chain vote is initiated to authorize the minting. Super Validators review and either approve or reject the proposal.
- The GSF node hosts an SV weight on behalf of an SV in an escrow agreement.
- The GSF hosts a party for that SV on a separate GSF operated Validator, and names that party as the beneficiary of the SV weight.
- The SVs, in each round, credit the GSF SV node for work/activity, and create a weighted activity records assigned coupon, which the GSF node splits among all the SV rights hosted on that node.
- The GSF specifically disables the final minting action for all escrowed SV parties.
- All the coin earned by escrowed parties goes into the unminted pool and loses all connection to any party.
- When the SV passes a milestone, it then searches all the history to find weighted activity records assigned coupons that had been assigned to it, normalized / trimmed down to the weight it wants to claim.
- The SV presents these records, and the resulting escrow claim, to the GSF.
- GSF does its own calculation and makes a recommendation via an onchain vote.
- SVs accept or reject the vote.
- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new type of activity record that can be minted.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet. While motivated by the need to support milestone-based escrowed rewards, the proposed mechanism is more general. It enables Super Validators to mint any type of unclaimed reward for any reason, not limited to escrowed incentives. This flexibility supports future governance decisions and additional reward use cases beyond the scope of CIP-0058.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. The proposed CIP process allows:
- Proposing reward allocations through a formal vote explicitly approving the proposal.
- Tracking and escrowing those rewards in a verifiable, on-ledger structure.
- Allowing beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensuring archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (
UnclaimedRewardcontracts) without minting. - The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive
Amuletthrough a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity. - The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
-
- Hi, JoseWould it be feasible to add the general and specific flows into the CIP as diagrams?
- toggle quoted message Show quoted textHi Wayne,Sure, I'll add it.
José Velasco
Software Engineer
IntellectEU
Accelerating the Evolution of Global Markets
IMPORTANT! This message (including any attachments) contains confidential information intended for a specific individual and purpose and is protected by law. If you are not the intended recipient, you should delete this message and are hereby notified that any disclosure, copying, or distribution of this message, or the taking of any action based on it, is strictly prohibited.
On Mon, Jun 23, 2025 at 4:26 PM Wayne Collier via lists.sync.global <wayne.collier=digitalasset.com@...> wrote:Hi, JoseWould it be feasible to add the general and specific flows into the CIP as diagrams? - Hello,Here’s the latest version of the CIP — sharing it for your review.
CIP-0066 Mint Canton Coin from Unminted/Unclaimed Pool
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Proposed Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.To contextualize the protocol and governance changes introduced by this CIP, we outline both a generalized workflow and a specific escrow-based scenario. These flows illustrate how unminted rewards transition through governance-controlled minting, and how this mechanism enables milestone-based issuance of Canton Coin while preserving decentralization, auditability, and escrow guarantees.
-
Weighted activity records are assigned to a party based on their contributions within a round.
-
If the assigned party fails to mint their rewards before the round concludes, those rewards are moved into the unminted pool.
-
At a later stage—following an off-chain agreement—someone may propose that a specified party should receive a portion of the unminted pool.
-
An on-chain vote is initiated to authorize the minting. Super Validators review and either approve or reject the proposal.
- The GSF node hosts an SV weight on behalf of an SV in an escrow agreement.
- The GSF hosts a party for that SV on a separate GSF operated Validator, and names that party as the beneficiary of the SV weight.
- The SVs, in each round, credit the GSF SV node for work/activity, and create a weighted activity records assigned coupon, which the GSF node splits among all the SV rights hosted on that node.
- The GSF specifically disables the final minting action for all escrowed SV parties.
- All the coin earned by escrowed parties goes into the unminted pool and loses all connection to any party.
- When the SV passes a milestone, it then searches all the history to find weighted activity records assigned coupons that had been assigned to it, normalized / trimmed down to the weight it wants to claim.
- The SV presents these records, and the resulting escrow claim, to the GSF.
- GSF does its own calculation and makes a recommendation via an onchain vote.
- SVs accept or reject the vote.
- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new type of activity record that can be minted.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet. While motivated by the need to support milestone-based escrowed rewards, the proposed mechanism is more general. It enables Super Validators to mint any type of unclaimed reward for any reason, not limited to escrowed incentives. This flexibility supports future governance decisions and additional reward use cases beyond the scope of CIP-0058.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. The proposed CIP process allows:
- Proposing reward allocations through a formal vote explicitly approving the proposal.
- Tracking and escrowing those rewards in a verifiable, on-ledger structure.
- Allowing beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensuring archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (
UnclaimedRewardcontracts) without minting. - The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive
Amuletthrough a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity. - The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
-
- Hello,Please ignore the previous email — there was an issue with one of the images.
CIP-0066 Mint Canton Coin from Unminted/Unclaimed Pool
Title: Enable escrow mechanisms and governance votes to allow Canton Coin minting from the unminted pool Author: Jose Velasco Status: Proposed Type: Tokenomics Created: 2025-06-18 Approved: License: CC-1.0This proposal introduces a new governance mechanism allowing Super Validators (SVs) to initiate a vote to authorize the minting of Canton Coin from an unclaimed (unminted) reward pool, helping to operationalize the milestone-based CIP rewards structure and aligning with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This CIP is licensed under CC0-1.0: Creative Commons CC0 1.0 Universal
This CIP introduces a new on-ledger voting-based governance flow that enables Super Validators (SVs) to propose the creation of
UnallocatedUnclaimedActivityRecordcontracts, representing authorized but not yet allocated Amulet rewards.To contextualize the protocol and governance changes introduced by this CIP, we outline both a generalized workflow and a specific escrow-based scenario. These flows illustrate how unminted rewards transition through governance-controlled minting, and how this mechanism enables milestone-based issuance of Canton Coin while preserving decentralization, auditability, and escrow guarantees.
-
Weighted activity records are assigned to a party based on their contributions within a round.
-
If the assigned party fails to mint their rewards before the round concludes, those rewards are moved into the unminted pool.
-
At a later stage—following an off-chain agreement—someone may propose that a specified party should receive a portion of the unminted pool.
-
An on-chain vote is initiated to authorize the minting. Super Validators review and either approve or reject the proposal.
- The GSF node hosts an SV weight on behalf of an SV in an escrow agreement.
- The GSF hosts a party for that SV on a separate GSF operated Validator, and names that party as the beneficiary of the SV weight.
- The SVs, in each round, credit the GSF SV node for work/activity, and create a weighted activity records assigned coupon, which the GSF node splits among all the SV rights hosted on that node.
- The GSF specifically disables the final minting action for all escrowed SV parties.
- All the coin earned by escrowed parties goes into the unminted pool and loses all connection to any party.
- When the SV passes a milestone, it then searches all the history to find weighted activity records assigned coupons that had been assigned to it, normalized / trimmed down to the weight it wants to claim.
- The SV presents these records, and the resulting escrow claim, to the GSF.
- GSF does its own calculation and makes a recommendation via an onchain vote.
- SVs accept or reject the vote.
- A new action requiring confirmation (
SRARC_CreateUnallocatedUnclaimedActivityRecord) is added toDsoRules_ActionRequiringConfirmation. - A new choice
DsoRules_CreateUnallocatedUnclaimedActivityRecordallows the DSO to propose a beneficiary, reward amount, and reason for the reward. - Upon successful vote confirmation, an
UnallocatedUnclaimedActivityRecordcontract is created. This contract has two expiry parameters:expiresAt: Duration from creation, derived from the configurable DSO fieldunallocatedUnclaimedActivityRecordTimeout(defaulting to 24 hours).unclaimedActivityRecordExpiresAt: Passed to the resulting activity record once allocation occurs.
- A new SV-App trigger,
UnallocatedUnclaimedActivityRecordAllocatorTrigger, locates eligibleUnclaimedRewardcontracts, archives them up to the specified amount, and creates anUnclaimedActivityRecord. - A second trigger,
UnallocatedUnclaimedActivityRecordExpiryTrigger, expires unallocated records after their TTL. - A third trigger,
UnclaimedActivityRecordExpiryTrigger, expires unusedUnclaimedActivityRecordcontracts.
UnclaimedActivityRecordis introduced as a new type of activity record that can be minted.- It is added as a new variant (
InputUnclaimedActivityRecord) within the existingTransferInputtype. - This input is consumed by
AmuletRules_Transfer, which mints the corresponding Amulet during a self-transfer executed by automation in the Wallet App (CollectRewardsAndMergeAmuletsTrigger).
-
SV App
- Implement and deploy the three new triggers listed above.
- Extend the Treasury Service to support the new activity record lifecycle.
-
Wallet App
- Extend the
CollectRewardsAndMergeAmuletsTriggerto auto-collectUnclaimedActivityRecordusing the new transfer input.
- Extend the
-
CLI App
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
scan_txlog.py.
- Introduce a Python CLI utility to calculate minted and unclaimed rewards by party ID and time range, reusing logic from
-
SV App Voting UI
- Update the SV App voting UI to support proposals using
DsoRules_CreateUnallocatedUnclaimedActivityRecord.
- Update the SV App voting UI to support proposals using
-
SV App Governance UI
- Add support in the SV App for configuring
unallocatedUnclaimedActivityRecordTimeout.
- Add support in the SV App for configuring
This change is required to implement the reward distribution mechanism described in CIP-0058. The CIP defines a process whereby, upon successful milestone verification, the Tokenomics Working Group approves a reward amount and the Super Validators assign a portion of unclaimed rewards to be minted. This functionality leverages the standard voting process and introduces new ledger, off-ledger, and UI components to support reward calculation, archival of unclaimed rewards, and minting of the corresponding Amulet. While motivated by the need to support milestone-based escrowed rewards, the proposed mechanism is more general. It enables Super Validators to mint any type of unclaimed reward for any reason, not limited to escrowed incentives. This flexibility supports future governance decisions and additional reward use cases beyond the scope of CIP-0058.
This aligns with the first deliverable of CIP-0058: Enable escrow mechanisms to ensure Super Validators deliver value in return for rewards.
This proposal introduces a governance-backed, automated reward allocation mechanism that ensures Super Validators (SVs) never act as direct issuers of Amulets. Instead, it relies on existing voting infrastructure, explicit reward tracking, and on-ledger automation. The design satisfies the CIP-0058 objective of enabling escrowed value transfer with network approval, while preserving clear separation of duties between reward authorization and execution.
Super Validators need a way to reward parties for milestone-based work without directly issuing Amulets. The proposed CIP process allows:
- Proposing reward allocations through a formal vote explicitly approving the proposal.
- Tracking and escrowing those rewards in a verifiable, on-ledger structure.
- Allowing beneficiaries to receive their rewards without needing manual approval or signature from SVs.
- Ensuring archival of previous reward entitlements (UnclaimedReward contracts) during the minting process.
The final design introduces
UnallocatedUnclaimedActivityRecordas a bridge between governance and execution. It supports clear auditability by representing approved but not yet funded reward intents. Once funded, these result in the creation of anUnclaimedActivityRecord, which serves as a transferable representation of reward entitlement. TheUnclaimedActivityRecordis then consumed during a self-transfer initiated by automation in the Wallet App, resulting in the minting of the corresponding Amulet.This approach involved exercising a single voting choice (
AmuletRules_MintFromUnmintedPool) that would simultaneously archiveUnclaimedRewardcontracts and mint the Amulet.Rejected due to:
- Risk of stale contract references caused by background reward merging.
- Inability to collect beneficiary signatures, which are required for minting.
This design embedded additional side effects in the vote’s success path: archiving
UnclaimedRewards and creating anAmuletMintOfferas part of the vote confirmation.Rejected due to:
- Inflexibility in the current voting infrastructure, which expects one-to-one mapping between action and execution.
- Implementation would be non-trivial and hard to maintain.
Upon a successful vote, two contracts would be created:
- An
AmuletMintOfferfor the beneficiary to accept. - A
BurnUnclaimedRewardsRequestfor the DSO to handle archival.
Rejected due to:
- Lack of atomicity, leading to potential inconsistencies.
This design introduced
UnallocatedAmuletMintOffer, accepted by an SV trigger that creates anAmuletMintOffer. The beneficiary would manually accept the final offer.Rejected due to:
- The design would violate a core requirement of CIP-0058: SVs must not act as issuers.
The chosen approach introduces a clean separation of concerns:
- Voting captures intent and approval.
- SVs allocate funding (
UnclaimedRewardcontracts) without minting. - The
UnclaimedActivityRecordencapsulates minting rights in a transferable, on-ledger structure. - Beneficiaries receive
Amuletthrough a self-transfer initiated by automation in the Wallet App, maintaining signature and stakeholder integrity. - The model avoids redundant templates or triggers and fits well into Splice’s composable architecture.
This design was refined through multiple iterations, peer reviews, and discussions across the engineering and product teams, converging on a solution that meets both technical constraints and governance objectives.
All choices and backend code involved are backward compatible.
The new implementation includes backend and Daml changes. An early version of the Daml code is available in the following forked Splice branch: https://github.com/jose-velasco-ieu/splice/tree/josevelasco/daml-minting-escrowed-canton-coin-2/cip-0058
-

