Skip to content

EIP-681 payment-URI derive (opt-in secondary) #14

@ignromanov

Description

@ignromanov

Part of #8 · Layer 2 (interop) · 🟡 P2 · v1.3+ · opt-in secondary only

What

deriveEip681(invoice): string | null in @void-layer/interop — derive an ethereum: payment URI from an invoice. Returns null for non-ERC-20 or non-expressible cases.

Why & caveats

  • Positions void-layer cleanly: EIP-681 = payment intent, void-layer = invoice record. Invoice can derive a payment URI; the reverse is impossible.
  • ⚠️ Wallet support for the ERC-20 function-call form is spotty (full: imToken, D'CENT; partial: MetaMask Mobile, Trust, Coinbase; none: Ledger Live, Rabby, Safe, Phantom…). Dangerous failure mode: wallets without function-call support parse the token contract as recipient → MUST carry a prominent warning.
  • WalletConnect moved to CAIP-358 (wallet_pay, draft, no production adopters) — track separately.

Acceptance

  • deriveEip681 returns non-null only when token contract + recipient + amount present and chainId is a bare EIP-155 int
  • prominent warning in API docs about non-supporting wallets
  • opt-in only — not part of core decode/encode

wiki: concepts/eip-681-payment-uri.md, concepts/eip-681-wallet-adoption-2026.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requeststandardsExternal-standard adoption (spec 087)

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions