💰 Currency / Policies¶
🎯 Purpose¶
The Policies layer provides authoring assets for currency rules such as caps and escrow requirements.
Policies are data-only configuration. They do not perform validation or mutation — enforcement is handled by composed currency services.
⚠️ Important Notes¶
- Policies do not enforce behaviour
- Enforcement depends on the composed service stack
- Policies describe rules, not execution
- Removing this folder does not affect core Currency functionality
🧩 What Lives Here¶
CurrencyPolicy¶
ScriptableObject containing:
- Per-currency cap rules
- Global escrow requirement flag
TryGetCapRule¶
bool TryGetCapRule(CurrencyId id, out CurrencyCapRule rule);
- Returns a data-only rule (
min,max,mode) - Returns
falsewhen no rule exists
RequireEscrow¶
bool RequireEscrow { get; }
- Indicates whether debits and transfers should use escrow
- Does not provide escrow functionality
CurrencyRuleAuthoring¶
Inspector-facing authoring data:
idminmaxmode
Runtime systems should use CurrencyCapRule.
🧠 Usage Guidance¶
Lookup behaviour¶
- Currency identifiers are normalized
- Rules are cached for lookup
- Duplicate rules use the last entry
- Missing rules are treated as unbounded
Data sanitisation¶
During cache rebuild:
- Negative values are clamped to
0 - Invalid ranges are corrected
- Invalid identifiers are ignored
Runtime usage¶
Policies are consumed by composed services:
- Caps decorators apply
CurrencyCapRule - Escrow guards respect
RequireEscrow
Policies do not mutate balances or perform validation.
Escrow behaviour¶
When RequireEscrow is enabled:
- Debits and transfers must use escrow when supported
- Behaviour depends on the composed service stack
🚫 Internal Use Only¶
Policies define configuration only.
Do not:
- Implement logic here
- Depend on enforcement behaviour
- Assume rules are always applied
🧹 Safe to Remove¶
This folder may be removed if policy constraints are not required.
Currency will continue to operate without caps or escrow requirements.
🔗 Related Documentation¶
- Abstractions —
CurrencyCapRule,CapMode,ITransferPolicyProvider - Core — service composition and factories
- Exchange — currency conversion rules
- Persistence — save/load behaviour