Rising Tide Developers
Concepts

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 currency

The 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