跳到主要内容

PayTo URI Scheme

Status: Final

Informational specification describing how the Core ecosystem SHOULD use the RFC 8905 PayTo URI scheme for linking to payment targets on Core, and how wallets/SDKs SHOULD parse, validate, and act on those URIs.

Abstract​

This CIP documents the adoption of the IETF PayTo URI scheme for Core. A PayTo URI always identifies the target of a payment and encodes a payment target type, a target identifier, and optional parameters like amount or message. We define Core-specific conventions so that wallets and applications can interoperate reliably across the ecosystem. (RFC Editor)

Motivation​

Users and applications benefit from a common, linkable payment format that works across wallets, websites, QR codes, and desktop/mobile platforms. PayTo is a standardized URI scheme already used for bank accounts and cryptocurrency addresses. Standardizing Core usage enables:

  • clickable "Pay via XCB" links (XCB is the Core target type),
  • QR codes that launch Core wallets with prefilled details,
  • safer parsing and confirmation UX,
  • and long-term interoperability with other payment systems using the same URI scheme. (RFC Editor)

Specification​

General 'PayTo' syntax (by reference)​

Core adopts the generic PayTo syntax and semantics from RFC 8905 (Sections 2–3, 5). In short:

payto:// authority / path ? options

Where the authority is the payment target type, the path encodes the target identifier, and options include amount, receiver-name, sender-name, message, and instruction. (RFC Editor)

Core target type​

  • Target type name: xcb for Mainnet, xab for Testnet, xce for Enterprise Network.
  • Path: an ICAN account address, cb… for Mainnet, ab… for Testnet, ce… for Enterprise Network.
  • Semantics: native CORE coin transfers to the address given in path.

Options​

Core wallets and SDKs MUST support the generic options from RFC 8905: amount, etc. (RFC Editor)

amount​

RFC 8905 defines:

amount = currency ":" unit [ "." fraction ]

with the constraints: unit < 2^53 and at most 8 fractional digits. (RFC Editor)

If no currency is specified, the default is CORE main unit.

Recommendations:

  • For native amounts, use amounts without currency and : colon. For example, amount=1 is 1 CORE.
  • For contract-based amounts, the amount is prefixed with contract address or contract ticker (for well-known contracts defined by application), divided by : colon. For example, amount=ctn:1 is 1 CTN.
  • If you want to keep just currency without amount, keep : colon typed to avoid confusion. For example, amount=ctn: is CTN currency with custom amount.

Examples​

  • Human-friendly in CORE: payto://xcb/cb…?amount=1.25
  • Payment with CTN: payto://xcb/cb…?amount=ctn:1.14
  • Wallets SHOULD register PayTo handlers on supported platforms to open URIs.
  • QR codes SHOULD embed the full payto:// URI.
  • If multiple wallets are installed, the user SHOULD be able to choose which wallet to launch. (RFC Editor)

Rationale​

  • Reuse of an IETF-standard URI decouples Core from vendor-specific deep link formats and eases multi-wallet support.
  • Keeping token/contract semantics out of scope avoids fragmentation; native coin payments can adopt immediately.

Backwards Compatibility​

This proposal is non-breaking. It does not modify Core consensus or transaction formats. Wallets without PayTo handling remain functional; links simply won’t auto-open those apps.

Security Considerations​

  • Wallets MUST require explicit user confirmation before sending and MUST take measures against clickjacking.
  • URIs received over unauthenticated channels might target the wrong account; wallets SHOULD display the full address and take care with homographs in labels/messages.
  • Avoid collecting unnecessary PII from sender-name/receiver-name fields; store only what is needed for receipts. (RFC Editor)

References​

  • RFC 8905: The ‘payto’ URI Scheme for Payments — RFC Editor (syntax, semantics, options). (RFC Editor)
  • Core PayTo scheme documentation — core-laboratories/payto (implementation guidance and examples). (GitHub)
  • PayTo link generator — PayTo.Money

Copyright and related rights waived via CC0.