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
wiki: concepts/eip-681-payment-uri.md, concepts/eip-681-wallet-adoption-2026.md
Part of #8 · Layer 2 (interop) · 🟡 P2 · v1.3+ · opt-in secondary only
What
deriveEip681(invoice): string | nullin@void-layer/interop— derive anethereum:payment URI from an invoice. Returnsnullfor non-ERC-20 or non-expressible cases.Why & caveats
wallet_pay, draft, no production adopters) — track separately.Acceptance
deriveEip681returns non-null only when token contract + recipient + amount present and chainId is a bare EIP-155 intwiki:
concepts/eip-681-payment-uri.md,concepts/eip-681-wallet-adoption-2026.md