canton-network-docs/Splice Fundamentals
Reward Sharing
Overview
When traffic-based app rewards are enabled, featured app providers receiveSplice.Amulet.RewardCouponV2
contracts for each round in which their application was attributed traffic burn above the app reward threshold. Reward
sharing allows the provider to distribute (part of) the minting allowance of these coupons to other
parties (beneficiaries) before minting, using the assignBeneficiaries API
provided by the splice-api-reward-assignment-v1 interface package.
API reference docs for
splice-api-reward-assignment-v1 are forthcoming.Configuration
Reward sharing is configured in the validator node’s configuration file undercanton.validator-apps.validator_backend.reward-sharing-config-by-party. Each
entry maps a provider party ID to a RewardSharingConfig:
Batched Sharing
The automation batches sharing to reduce traffic costs. Rather than sharing eachSplice.Amulet.RewardCouponV2 individually as it arrives, the
automation waits until any coupon’s remaining TTL drops below
min-ttl-after-sharing, then shares all accumulated coupons in one
transaction.
For example, with the default Splice.Amulet.RewardCouponV2 TTL of 36
hours (configured via RewardConfig.rewardCouponTimeToLive) and
min-ttl-after-sharing set to 30 hours, sharing triggers approximately 6
hours after the first coupon is created.
The batch-size property (default: 100) limits the maximum number of coupons
processed per trigger run. If more coupons have accumulated than the batch
size, the automation processes them across multiple runs.
When sharing a batch, each beneficiary receives the same number of coupons
as the number of input coupons being shared. Each coupon created for a
beneficiary tracks the round number from the original coupon, allowing
beneficiaries to identify which round a reward originated from.
Minting After Sharing
Beneficiaries mint their assigned coupons using the same mechanisms as any otherSplice.Amulet.RewardCouponV2 — either via the wallet app automation
for local parties, or via a
minting delegation
for external parties. See
Minting
for details.
Limitations
- No re-sharing: beneficiaries who receive shared rewards cannot use the
assignBeneficiariesAPI to further share them. Only the original provider can assign beneficiaries. - Same expiry: shared coupons retain the same expiry as the original
Splice.Amulet.RewardCouponV2. With the default 36-hour TTL, themin-ttl-after-sharingvalue must leave sufficient time for beneficiaries to mint their coupons before expiry. - Maximum 20 beneficiaries per
Splice.Amulet.RewardCouponV2.
Further Reading
- Traffic-Based App Rewards — how traffic-based rewards are computed
- Minting Delegations — delegating minting authority for external parties
- App Rewards — overview of the app rewards system including featured app status