import { useEffect, useState } from 'react'; import QRCode from 'qrcode'; import { Check, Copy } from 'lucide-react'; import { useTranslation } from '@/contexts/language'; // BIP-353 payment name → BIP-321 URI (silent payment `sp` + BOLT 12 `lno`). // Resolved 2026-10-05 from skatespots.user._bitcoin-payment.silentpayments.net. // Update if the name is re-pointed (or a Cashu `creq` is added). const SILENT_NAME = 'skatespots@silentpayments.net'; const SILENT_URI = 'bitcoin:?sp=sp1qq2xlxmvh5tpkjw460cfjf5ndz87fc45k0fm3glyalqxq4m436u8nyqa745dyh55pz4vchhjzam5tmlvvlp6whhkqmdk3e7xvfp4y80jhvq40lyl3&lno=lno1pgqppmsrse80qf0aara4slvcjxrvu6j2rp5ftmjy4yntlsmsutpkvkt6878s8y79jwe96rpahf567zyt0lhe26sxpsace8n9u5l359n254e639mqqgpas2cxvhc6ftcr6wrh6nv36mz53qhsfvwrxvgf8mnvq4tsg0z2plqqxvv8geddvc60pys4ja0ajvhhhka2zzfdsnmkvygu872fa0awyqvv8rrpg6k0kg8zpxh8hy3hm9pr35hfa73s92mk38xfqfgfz98v0w34c4z8un6ljxlfjcu69m3de0nqarvh8k8kqqey5kgfmvyfhrg3wltewtj8xn35aevy96dws40hygx7xpfu2k0ty8rm4mv262df8f9q3z2strn4cmh8svss'; export function SilentPaymentsCard({ className }: { className?: string }) { const { t } = useTranslation(); const [qr, setQr] = useState(null); const [copied, setCopied] = useState(false); useEffect(() => { let active = true; QRCode.toDataURL(SILENT_URI, { width: 200, margin: 1 }) .then((url) => { if (active) setQr(url); }) .catch(() => { if (active) setQr(null); }); return () => { active = false; }; }, []); const copy = async () => { try { await navigator.clipboard.writeText(SILENT_NAME); setCopied(true); setTimeout(() => setCopied(false), 1500); } catch { /* clipboard blocked */ } }; return (
🕵️

{t('walletUi.supporters.silentTitle')}

{t('walletUi.supporters.silentDesc')}

{qr && ( {SILENT_NAME} )}

{SILENT_NAME}

{t('walletUi.supporters.silentWallets')}

); }