Skip to content

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 TypeAsset
USDCCircle’s USD stablecoin
USDTTether’s USD stablecoin
USDUS dollars (fiat)
ETHEther
BTCBitcoin
MXNMexican pesos (fiat)
EUREuros (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 TypeNetwork
ethereumEthereum mainnet
baseBase L2
solanaSolana
bitcoinBitcoin network
achUS ACH network
wireUS wire transfer
speiMexico’s SPEI
sepaEU SEPA
fpsUK 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.

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.