Payment Currency Policy
How the protocol decides which currency a payment settles in - the app/collection accepted-currency policy and the user's preferred currency.
A payment settles in one currency, chosen by two levers and one resolution rule. The policy is the same whatever chain the protocol runs on; which currencies exist, what they are worth, and what gas costs are per-chain and live in Payment Currency on Stacks.
Two levers
1. App / collection accepted-currency policy (the hard rule).
Each app declares acceptedCurrencies, ordered by primacy. For white-label campaigns, a
collection may override it via rules.acceptedCurrencies - empty inherits the app. A payment in
a currency outside the effective set is rejected at the signing boundary.
2. User preferred currency (the soft default).
User.preferredCurrency is the user's default settlement choice. Null means unset.
Resolution
One rule, shared by client preselection and server enforcement (resolvePaymentCurrency in the
SDK; mirrored server-side):
1. the user's preference, if the app/collection accepts it
2. else the chain's primary currency, if accepted
3. else the first accepted currencyThe UI preselects that currency but lets the user switch within the accepted set. The server
resolves an omitted currency the same way and rejects any submitted currency outside the set
(400 CURRENCY_NOT_ACCEPTED).
Where it is enforced
The five Privy sign routes that settle a collect (publish-edition, make-reservation,
publish-open-letter-edition, publish-feedback-edition, submit-bracket) resolve the
product's effective accepted set (collection override, else source-app policy) and gate the
payment. An omitted currency resolves to the primary rather than defaulting blindly.
deploy-contract is the create side and sits outside this policy: it takes a deployFeeCurrency
of STX or SBTC for the create fee and refuses anything else.
Settlement is not gas
This policy governs the settlement currency only. Whether a transaction also costs a separate gas asset, and which one, is a property of the chain. See Payment Currency on Stacks.
See also
- Payment Currency on Stacks - the
CurrencyCodevalues, their decimals, and the gas requirement - SDK TypeScript types - the
CurrencyCodeenum plus theresolvePaymentCurrency,isCurrencyAccepted,currencyFromPreference, andCURRENCY_DESCRIPTORShelpers - Revenue Composition - how the settled amount splits across contributors
Collections
Collections are a user's grouped product instances - organized views of owned smart product copies.
The Create-to-Earn Economy
How the protocol gives STX and sBTC two different jobs - gifted STX to create, earned sBTC to collect - and the seeder that makes a newcomer's first sBTC arrive as income.