💰 Abstractions / Escrow¶
🎯 Purpose¶
The Escrow folder defines the public escrow contracts and result types for the Currency system.
These types describe how hold-based currency flows are represented and interacted with. They do not define how holds are stored or internally managed (including expiry handling and cleanup behaviour).
🧠 Usage Guidance¶
Escrow abstractions are intended to:
- Define the public escrow lifecycle contract
- Provide machine-readable result codes for hold operations
- Expose read-only inspection for UI, debugging, and tooling
- Keep escrow consumers independent from concrete implementations
🧩 What Lives Here¶
ICurrencyEscrow¶
- Optional escrow capability for hold-based flows
-
Supports:
-
TryHold CommitReleaseExpireStale
ICurrencyEscrowReadOnly¶
- Optional non-mutating inspection surface
-
Supports:
-
active token checks
- time-to-expiry queries
- owner token enumeration
- hold info lookup
EscrowOpCode¶
- Machine-readable outcomes for escrow operations
- Includes hold/commit/release failures and token lifecycle states
EscrowOpResult¶
- Result type for escrow operations
-
Includes:
-
operation code
- optional message
- token for successful holds
EscrowHoldInfo¶
- Lightweight immutable snapshot of an active hold
- Intended for display/debug without exposing internals
⚠️ Important Notes¶
- Escrow is an optional capability
- These abstractions do not guarantee that a service supports escrow
- They define how hold-based flows behave when escrow is composed
- Token lifecycle states are escrow-specific and do not map directly to currency operation results
- Cleanup and expiry behaviour are implementation-defined
🧠 Usage Guidance¶
Mental model¶
- Abstractions define the contract
- Implementations decide storage, retention, and expiry behaviour
- Consumers should depend only on available capabilities
If escrow is not present, a service may not implement:
ICurrencyEscrowICurrencyEscrowReadOnly
🚫 Internal Use Only¶
This folder defines contracts only.
Do not:
- Add storage or lifecycle management logic
- Assume token persistence or retention guarantees
- Depend on implementation details from other layers
🧹 Safe to Remove¶
This folder should not be removed if any escrow-based workflows are used.
Other systems may depend on these contracts when escrow capability is composed.
🔗 Related Documentation¶
- Abstractions / Primitives — shared result and value primitives
- PublicAPI / Transactions —
CurrencyHoldTxnuses escrow when available - PublicAPI / Helpers — factories can compose escrow-enabled stacks
- Internal — escrow implementation details (not part of the public contract)