Skip to content

pallet-coinage is the on-chain pallet behind the Polkadot App's Coinage feature — the peer-to-peer payment surface that lets a user send funds to another verified person, with privacy properties beyond what a standard Balances.transfer_keep_alive provides.

Two properties differentiate Coinage from a standard transfer at the pallet level:

  • Personhood-aware addressing: Sends can target a recipient identified by their personhood identity rather than by their account address; the pallet resolves the address from the personhood claim.
  • Privacy-preserving by default: Where appropriate, the pallet routes the transfer through alias / Ring-VRF surfaces so the on-chain trail does not directly link the sender's account to the recipient's account in the same way a public Balances.transfer_keep_alive does.

The pallet's operations cluster into four families:

  • Transfer: A two-step "pull" mechanic. The sender shares the private key of the coin(s) being sent over an off-chain channel (typically the Polkadot App's encrypted chat). The receiver derives a fresh key from their own mnemonic and calls transfer(to) to move each coin to that new key. The coin's age increments by 1. Transfer is always free.
  • Split: A user splits one coin into any combination of smaller coins whose values sum to the original. All output coins inherit originalAge + 1. Split is always free.
  • Recycle (load / unload): The privacy core. A user loads a coin (or equivalent stablecoin) into a recycler ring, waits for other entries to join, then unloads with a Ring-VRF proof — minting a fresh coin or withdrawing the backing stablecoin, with no on-chain link to the deposit. Loading is free; unloading is the only charged operation in the system.
  • Onboard / offboard: Conversion between coins and the backing stablecoin. Onboarding loads stablecoin into a recycler and unloads anonymously into fresh coins. Offboarding does the reverse. A direct_offboard_coin_into_external_asset fast path skips the recycler for freshly-minted (age-0) coins that do not need anonymity.

The App's Coinage feature is the user-facing surface; pallet-coinage is the on-chain pallet that surface dispatches into. A Product developer who wants Coinage-style payments in their own Product invokes pallet-coinage via the standard signing surface (with the user approving each transaction on their App, as with all signed actions).

For the App-side feature reference see Coinage in the Polkadot App.

The transfer, split, load, and unload extrinsics, the coin storage, and the recycler ring data are enumerated here.

SymbolKindNotes
transferExtrinsicFree; pull-mechanic — receiver moves the coin
splitExtrinsicFree; one coin into many summing to its value
load_recycler_with_coinExtrinsicFree; coin origin; deposits a coin into the recycler ring
load_recycler_with_external_assetExtrinsicFree; signed origin; deposits backing stablecoin
unload_recycler_into_coinExtrinsicRing-VRF proof; mint a fresh age-0 coin
unload_recycler_into_external_assetExtrinsicRing-VRF proof; withdraw backing stablecoin
unload_recycler_into_coinsExtrinsicUnload + split in one op; lifts power-of-two restriction
unload_recycler_into_external_asset_non_anonymousExtrinsicSigner pays fee directly; identity visible
direct_offboard_coin_into_external_assetExtrinsicFast path for age-0 coins; bypasses the recycler
pay_for_recycler_unload_fee_token_with_coinExtrinsicPaid path for users out of free unload tokens
pay_for_recycler_unload_fee_token_with_nativeExtrinsicPaid path; DOT
pay_for_recycler_unload_fee_token_with_stableExtrinsicPaid path; stablecoin
clean_recycler / clean_consumed_free_token / clean_paid_unload_token_ring / delete_expired_paid_unload_token_collectionExtrinsicOffchain-worker-authorised cleanup
CoinsByOwnerStorage mapPer-public-key coin record (storage is one entry per key)
UnderlyingAssetId / UnderlyingAssetUnitConstantThe backing stablecoin id and base unit ($0.01); HOLLAR today, pUSD later
MinimumExponent / MaximumExponentConstantValid coin denomination range (0–14 = $0.01–$163.84)
MaximumAge / MinimumAgeForRecyclingConstantCoin age limits before mandatory recycling
UnloadTokenAllowancePerTimePeriodForPeople / …ForLitePeopleConstantFree unload-token budget per period
RecyclerExpirationTimeConstantLifetime of a full recycler ring before cleanup
  • Coinage in the Polkadot App


    The App-side feature reference — the user-visible surface that dispatches into this pallet.

    → Reference

Last updated: