# PIP-0007 · Rail register and chain register

What a rail is in PATH, the identifiers rails take, and the register of chains and tokens that `rail: "blockchain"` points into.

## Why

`rail` is the first field of every capability ([PIP-0006](/pips/0006)). A rail identifier that each member spells its own way does not interoperate. This PIP fixes what a rail is, how identifiers are spelled, and the initial register. It amends [PIP-0003](/pips/0003), which requires one spelling per rail.

## What a rail is

A rail is a settlement scheme a payer can direct a payment to, in order to credit an identifiable beneficiary. It has its own rules, its own beneficiary formats and its own transaction identifiers.

The following are not rails:

| Not a rail | Example | Where it belongs |
|---|---|---|
| Interbank infrastructure the customer does not choose | TIPS, CHIPS, SPI (under Pix) | The rail's profile. Never `accepts` |
| An alias or proxy service over a rail | PayID, PayNow, PromptPay, DuitNow | A beneficiary format, or an identifier type in PATH ID |
| A request-to-pay service over a rail | CoDi, UPI Collect, Pix Cobrança, SEPA Request-to-Pay | The rail's profile, mapped to PATH REQUEST |
| A wallet or a brand over a rail | Wero | The rail's profile |
| An account provider | A bank, an e-money issuer, a mobile money operator | `book` within the provider, or the interoperable rail between providers |

## Identifiers

Lower case, hyphenated, the scheme's own short name. A two-letter ISO 3166 suffix is added only when the short name collides with another scheme or is generic: `ach-us`, `rtp-us`, `fps-uk`, `fps-hk`, `rtgs-in`, `fast-sg`.

An identifier is never a member or network slug.

## Two rails defined by PATH

**`blockchain`** — settlement on a distributed ledger. The ledger is named by the capability's `chain` object, from the chain register below. Assets are `token`.

**`book`** — a transfer within the ledger of the member that signed the object carrying the capability. Both parties hold an account with that member. The member is identified by the signature; the capability does not name it. Assets are `fiat` in this version.

| Rail | `beneficiary_formats` | `rail_reference_types` | `payment_reference` |
|---|---|---|---|
| `blockchain` | `chain_address`: an address in the chain's canonical form | `tx_hash`, with `index` when the transaction holds several transfers | Not carried in this version |
| `book` | `path_address`: the payee's PATH address | `book_entry`: the member's ledger entry identifier | Up to 140 characters |

A `reserved` rail has no beneficiary format until its profile is published: payment instructions are not issued on it. Until then its only rail reference type is `scheme_reference`, the identifier the scheme assigned to the transfer.

## Rail register

| id | Name | Zone | Category | Currencies | Status |
|---|---|---|---|---|---|
| `blockchain` | Distributed ledger | Global | dlt | tokens | defined here |
| `book` | Member ledger | — | book | the member's | defined here |
| `swift` | SWIFT credit transfer | Global | cross_border | any | reserved |
| `sepa-ct` | SEPA Credit Transfer | SEPA | batch | EUR | reserved |
| `sepa-inst` | SEPA Instant Credit Transfer | SEPA | instant | EUR | reserved |
| `t2` | T2 | Euro area | rtgs | EUR | reserved |
| `ach-us` | ACH | US | batch | USD | reserved |
| `fedwire` | Fedwire Funds Service | US | rtgs | USD | reserved |
| `fednow` | FedNow | US | instant | USD | reserved |
| `rtp-us` | RTP | US | instant | USD | reserved |
| `fps-uk` | Faster Payments | GB | instant | GBP | reserved |
| `chaps` | CHAPS | GB | rtgs | GBP | reserved |
| `bacs` | Bacs Direct Credit | GB | batch | GBP | reserved |
| `pix` | Pix | BR | instant | BRL | reserved |
| `spei` | SPEI | MX | instant | MXN | reserved |
| `upi` | UPI | IN | instant | INR | reserved |
| `imps` | IMPS | IN | instant | INR | reserved |
| `neft` | NEFT | IN | batch | INR | reserved |
| `rtgs-in` | RTGS | IN | rtgs | INR | reserved |
| `npp` | New Payments Platform | AU | instant | AUD | reserved |
| `fast-sg` | FAST | SG | instant | SGD | reserved |
| `fps-hk` | Faster Payment System | HK | instant | HKD, CNY | reserved |
| `zengin` | Zengin System | JP | instant | JPY | reserved |
| `interac` | Interac e-Transfer | CA | instant | CAD | reserved |
| `lynx` | Lynx | CA | rtgs | CAD | reserved |

Categories describe when the beneficiary is credited: `instant` within seconds, `batch` after a processing cycle, `rtgs` individually in central bank money, `cross_border` through correspondents, `dlt` on a ledger, `book` within one member.

**Reserved** fixes the spelling. A reserved rail may appear in `accepts`. Its beneficiary formats and rail reference types are fixed by its profile ([PIP-0003](/pips/0003)) when a member first publishes one; the status then becomes **profiled**.

A rail is added by an informational PIP. The register lists rails in use by a member or about to be. It is not a catalogue of every scheme in existence.

## Rail entry

Each entry carries:

| Field | Meaning |
|---|---|
| `id`, `name`, `zone`, `category`, `currencies` | As in the table |
| `beneficiary_formats` | The forms a destination takes on this rail, used by [payment instructions](/pips/0009) |
| `rail_reference_types` | The values allowed in a receipt's `rail_references[].type` |
| `payment_reference` | Whether the rail carries one, and its maximum length |
| `request_overlay` | The rail's request-to-pay service, when it has one |
| `profile` | The PIP or annex that defines the mapping |
| `status` | `reserved`, `profiled`, or `defined here` |

## Chain register

`rail: "blockchain"` names its ledger in `chain`. The register maps the identifiers onto one another.

| slug | CAIP-2 | EVM chain id | Native | Decimals |
|---|---|---|---|---|
| `ethereum` | `eip155:1` | 1 | ETH | 18 |
| `base` | `eip155:8453` | 8453 | ETH | 18 |
| `arbitrum` | `eip155:42161` | 42161 | ETH | 18 |
| `optimism` | `eip155:10` | 10 | ETH | 18 |
| `polygon` | `eip155:137` | 137 | POL | 18 |
| `bnb` | `eip155:56` | 56 | BNB | 18 |
| `avalanche` | `eip155:43114` | 43114 | AVAX | 18 |
| `solana` | `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp` | — | SOL | 9 |
| `bitcoin` | `bip122:000000000019d6689c085ae165831e93` | — | BTC | 8 |
| `tron` | — | — | TRX | 6 |
| `celo` | `eip155:42220` | 42220 | CELO | 18 |
| `arc` | `eip155:5042` | 5042 | USDC | 18 |
| `tempo` | `eip155:4217` | 4217 | — | — |
| `stellar` | `stellar:pubnet` | — | XLM | 7 |
| `sui` | `sui:mainnet` | — | SUI | 9 |

EVM chains carry `evm.chain_id`. Other chains do not: CAIP-2 is the general identifier, and a chain without a registered CAIP-2 value is named by `slug`.

On `arc`, USDC is the native gas asset with 18 decimals, and its ERC-20 interface uses 6. A capability names the ERC-20 interface, listed below. `tempo` has no native token: fees are paid in stablecoins, and tokens follow the `tip20` standard. The listed Tempo token is PATHUSD (pathUSD).

Each chain entry also states the address format, the canonical case of contracts (lower case for EVM chains), whether a memo or tag is supported, and the token standards in use. Test networks are not in the register, and a capability naming one is not valid in production.

### Tokens

| Chain | asset_code | standard | contract | Decimals |
|---|---|---|---|---|
| `ethereum` | USDC | erc20 | `0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48` | 6 |
| `ethereum` | USDT | erc20 | `0xdac17f958d2ee523a2206206994597c13d831ec7` | 6 |
| `base` | USDC | erc20 | `0x833589fcd6edb6e08f4c7c32d4f71b54bda02913` | 6 |
| `solana` | USDC | spl | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` | 6 |
| `tron` | USDT | trc20 | `TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t` | 6 |
| `celo` | USDC | erc20 | `0xceba9300f2b948710d2653dd7b07f33a8b32118c` | 6 |
| `arc` | USDC | erc20 | `0x3600000000000000000000000000000000000000` | 6 |
| `tempo` | PATHUSD | tip20 | `0x20c0000000000000000000000000000000000000` | 6 |
| `stellar` | USDC | stellar-asset | `GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN` | 7 |
| `sui` | USDC | sui-coin | `0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC` | 6 |

On `stellar`, `contract` is the issuing account; the asset is the pair of `asset_code` and issuer. On `sui`, `contract` is the full coin type.

A token absent from this table is valid in a capability when `standard`, `contract` and `decimals` are all present. Listing it removes the need for `decimals`.

## Compatibility

`mobile_money`, `sepa`, `sepa-eu`, `pix-br`, `upi-in` and provider names used as rails in 0.3 examples are not register identifiers. A member restates its standing intent in the register's identifiers. Signed 0.3 objects keep their original values.