Liquidity source model
How 0Pools abstracts private liquidity sources into partner-visible pools, quotes, trades, and balances.
0Pools is a liquidity abstraction layer. It lets a partner interact with an approved pool lane without building directly against every bank rail, venue, market maker, reserve account, and reconciliation worker behind that lane.
Before 0Pools
Teams that need fiat/stablecoin conversion usually have to assemble a stack like this:
That creates duplicated capital, duplicated risk controls, and duplicated support logic.
With 0Pools
0Pools compresses that into a partner-visible contract:
The partner sees quote/trade/balance records. 0Bit handles private sourcing decisions behind the contract.
What sourcing means
Liquidity sourcing answers: where can 0Bit safely get or deliver the fiat/stablecoin required for this accepted quote?
0Pools intentionally does not expose specific source selection. The stable partner-visible model is:
| Partner-visible | Private |
|---|---|
| Pool id and pair. | Which account or source backs the pool right now. |
available flag. | Why a source is dry or disabled. |
| Firm quote. | Internal route and reserve choice. |
| Trade status. | Settlement worker steps. |
| Balance ledger. | Treasury and venue reconciliation. |
Why not expose every source?
Do not show liquidity source or provider names in your customer experience. Build the flow around stable 0Pools records instead: pool, quote, trade, status, and ledger. That keeps your integration stable when 0Pools changes how liquidity is sourced behind the scenes.
Developer rule
Design source-agnostic user states. Build product states around:
- available/unavailable
- quoted/expired
- reserved/pending
- settled
- failed
- released
- returned
Do not build product states around provider names, route names, reserve levels, or operational worker names.
Source abstraction layers
The partner-visible records are intentionally narrow. They are enough for your product to serve users, operate support, and reconcile finance. The private layers can change as 0Bit improves sourcing, adds capacity, or changes internal risk controls.
Before and after for society-scale infrastructure
| Fragmented model | 0Pools model |
|---|---|
| Every fintech or wallet needs to build liquidity relationships separately. | Approved partners can use a common liquidity spine. |
| Smaller products may overpay for fragmented sourcing or run manual desks. | A shared pool abstraction can centralize liquidity access and operational discipline. |
| Users see inconsistent quotes and vague settlement states. | Users can see quote expiry and product-safe status states. |
| Support depends on specialists who know provider-specific systems. | Support can start from shared ids and status records. |
This is the larger intention of 0Pools: make liquidity infrastructure reusable without making every partner become a liquidity operator.
Example source investigation
{
"pool_id": "EUR-USDT",
"quote_id": "pool_quote_123",
"trade_id": "pool_trade_456",
"status": "reserved",
"unavailable_reason": null,
"request_id": "req_abc",
"partner_visible_summary": "0Pools trade is processing"
}If an incident needs deeper source review, escalate with ids. Your integration does not need raw source routing details in the normal flow.
Safe source language
| Unsafe | Safe |
|---|---|
| "This provider is filling the order." | "0Pools issued a firm quote for this request." |
| "Inventory is low in account X." | "This pool cannot quote the request right now." |
| "A rebalancing worker is delayed." | "Settlement is pending." |
| "Fallback source Y is active." | "The trade is processing under the 0Pools lifecycle." |
Developer checklist
- Keep source identifiers out of user-facing logs and analytics.
- Do not create provider-specific UI branches.
- Map unavailable reasons to product-safe copy.
- Preserve request ids for support escalation.
- Use partner-visible status and ledger records for reconciliation.
Source-safe support workflow
When support asks "where did this price or status come from," the answer should start with partner-visible records.
| Support question | First record to inspect | Do not expose |
|---|---|---|
| Why was the quote unavailable? | Pool id, amount, side, unavailable reason, request id. | Provider inventory or source health. |
| Why did the price change? | Quote id, quote type, created time, expiry, amount. | Market-maker commercial terms. |
| Why is the trade pending? | Trade id, status timeline, webhook/event ids. | Settlement worker or route name. |
| Why does finance not match? | Ledger id, trade id, balance movement, close date. | Treasury account details. |
Escalation packet
{
"partner_order_id": "order_7841",
"pool_id": "EUR-USDT",
"quote_id": "pq_live_01J4",
"transact_id": "pt_live_9A2",
"request_id": "req_01J4SOURCE",
"current_status": "reserved",
"user_safe_summary": "The trade is processing under the 0Pools lifecycle."
}Copy rules
Use "pool," "quote," "trade," "status," and "ledger" in public product copy. Avoid provider names, source names, reserve levels, and route labels in user-facing screens, analytics labels, and support macros.
Implementation depth
This page is about abstracting private liquidity sources into partner-safe product records. For developers, the durable boundary is simple: your product should depend on pool, quote, trade, availability, and status outcomes; it should not depend on source names, account balances, commercial terms, and route logic. That boundary is what lets 0Pools improve liquidity operations without forcing every partner to rebuild product code.
Product scenario
A support case asks where a price came from. The partner can inspect quote economics and request ids, but the product should not expose private source selection in the customer experience.
Before and after in practice
| Before 0Pools | With 0Pools |
|---|---|
| Every liquidity source appears in product logic, so adding or removing a source requires partner code changes. | 0Pools abstracts source changes behind the same quote and trade lifecycle. |
| Product teams infer liquidity behavior from provider-specific screens or manual notes. | Product teams branch on 0Pools objects: pool, quote, trade, balance, webhook, and ledger. |
| Support asks engineering to reconstruct state from logs. | Support starts from request id, quote id, trade id, event id, and ledger id. |
System flow
Records to keep
| Record | Why it matters | Example |
|---|---|---|
quote_rate | The all-in partner-visible rate. | 1.0731 |
spread_bps | Partner-visible spread component. | 25 |
fee_bps | Partner tier fee. | 30 |
source_visible | Whether a source name should be displayed. | false |
A useful implementation stores these records before adding optional analytics. Analytics can be rebuilt from durable state; missing ids usually cannot be reconstructed after a customer-impacting failure.
Example product record
{
"product_area": "liquidity-source-review",
"partner_reference": "partner_order_123",
"pool_id": "EUR-USDT",
"quote_id": "pq_test_123",
"transact_id": "pt_test_456",
"status": "reserved",
"request_id": "req_01HZY0POOLS",
"reconciliation_state": "open"
}This record is intentionally partner-facing. It references 0Pools objects and your own product ids, but it does not include private liquidity routes, treasury balances, raw provider payloads, or customer secrets.
Failure modes and recovery
| Failure mode | Product response |
|---|---|
| Source name in UI | Use pool and status terms instead. |
| Route-specific retry | Retry by lifecycle state, not source. |
| Commercial term exposed | Only show approved fee/spread fields. |
| Source outage assumed | Branch on availability response. |
Use-case patterns
| Pattern | How 0Pools helps |
|---|---|
| Support training | Explain price without source leakage. |
| Product copy | Describe liquidity as 0Pools, not venues. |
| Backend resilience | Allow source changes without partner deploys. |
Developer checklist
- Read runtime discovery and capabilities before rendering enabled actions.
- Create firm quotes only when the user is ready to accept the terms.
- Execute from your server with an idempotency key.
- Treat webhooks and status reads as the source of truth for settlement state.
- Reconcile by durable ids first, then by amount and timestamp.
- Do not branch product behavior on provider names, source names, reserve balances, or treasury assumptions.