Core Abstractions
Value Type — What You Transfer
A value type identifies the specific asset being transferred. It is the concrete asset, not a category.
| Value Type | Asset |
|---|---|
USDC | Circle’s USD stablecoin |
USDT | Tether’s USD stablecoin |
USD | US dollars (fiat) |
ETH | Ether |
BTC | Bitcoin |
MXN | Mexican pesos (fiat) |
EUR | Euros (fiat) |
The value type makes no assumption about how the asset moves. USDC is USDC whether it moves on Ethereum, Base, Solana, or any future network.
Transfer Type — How You Transfer It
A transfer type identifies the network on which value moves. It is the rail, not the cargo.
| Transfer Type | Network |
|---|---|
ethereum | Ethereum mainnet |
base | Base L2 |
solana | Solana |
bitcoin | Bitcoin network |
ach | US ACH network |
wire | US wire transfer |
spei | Mexico’s SPEI |
sepa | EU SEPA |
fps | UK Faster Payments |
The transfer type makes no assumption about what asset moves on it. Ethereum carries USDC, USDT, ETH, and thousands of other tokens.
Composition
A complete delivery instruction is a value type and transfer type pair. Nothing else is needed.
{ "value_type": "USDC", "transfer_type": "ethereum" }{ "value_type": "USD", "transfer_type": "ach" }{ "value_type": "MXN", "transfer_type": "spei" }{ "value_type": "EUR", "transfer_type": "sepa" }A DRS publishes which pairs it accepts. A sender matches against what it can send. If the sender holds USDC and can send on Ethereum, and the DRS accepts USDC on Ethereum, there is a route. The protocol does not perform conversion. It matches capabilities.
Sponsored References
A value type name like USDC is a human-readable label, not a unique identifier. Multiple tokens may share the same ticker. Directory disambiguates through sponsored references.
Each pair in the capability manifest may carry a reference — a verifiable identifier of the specific asset (e.g., a contract address for on-chain tokens):
{ "accepts": [ { "value_type": "USDC", "transfer_type": "ethereum", "reference": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "sponsor": "circle.com" }, { "value_type": "USD", "transfer_type": "ach" } ]}On-chain pairs carry a contract address. Fiat pairs on traditional rails do not need one — USD via ACH is unambiguous. The reference field is optional precisely because not all transfer types need disambiguation.
Sponsors
A sponsor is any DRS node that hosts a reference and makes it queryable at its domain. Because every DRS node is configured in DNS, a sponsor is reachable at a well-known endpoint:
GET https://circle.com/.well-known/directory/references/USDC/ethereum→ { "reference": "0xA0b86991...", "issuer": "Circle", "decimals": 6 }Multiple parties may sponsor the same reference. Circle and Coinbase may both sponsor the canonical USDC contract on Ethereum. The reference itself — the contract address — is the ground truth. The sponsor is who vouches for it.
Extensibility
New value types and transfer types are added without protocol changes. A DRS operator registers a new pair in their config and it becomes routable. No governance decisions, no protocol upgrades. The pair exists or it doesn’t.