Генератор QR-кода криптокошелька
100% приватно и локально — ваши данные никогда не покидают браузер. Эти QR-коды постоянны и никогда не истекают.
Настройки: Криптокошелёк
Дизайн
Добавить логотип в центр
Изображение читается на этой странице и встраивается в код как data: URL. Оно никуда не загружается и остаётся внутри файла, который вы скачиваете.
Ещё параметры дизайна
Тёмная половина кода. Держите её заметно темнее фона по светлоте.
Закрашивает и свободную зону, и промежутки между модулями. Прозрачный фон исключает его из файла, поэтому им ничего не рисуется.
Контраст 11.5:1 между модулями и фоном.
PNG и WebP сохраняют альфа-канал; в SVG прямоугольник фона просто отсутствует. Светлой половиной контраста становится то, на чём код размещён.
Градиент заливает только тёмные модули. Контраст, который реально получает сканер, задаёт его светлый конец, поэтому оба конца должны оставаться тёмными.
Второй цвет, используется только при выбранном градиенте. Контраст измеряется по нему наравне с первым.
Градусы по часовой стрелке от направления слева направо. Радиальный градиент расходится из центра, поэтому угол действует только для линейного.
Скруглённые формы закрывают меньшую часть каждой ячейки. Центр остаётся закрытым, а именно его считывает декодер, но плотный код в мелкой печати надёжнее читается квадратами.
Кольцо трёх поисковых узоров.
Зрачок внутри каждого поискового узора.
Пустое поле вокруг кода, измеряется в модулях. Стандарт задаёт минимум 4.
Более высокий уровень переносит больше повреждений и стоит ёмкости, поэтому то же содержимое даёт более плотный символ.
В центре стоит логотип, и он удерживает уровень H. Предел его ширины следует за символом: 14% на самом маленьком коде и 30% на плотном.
Предпросмотр и экспорт
Paste the Bitcoin receiving address from your wallet's receive screen.
Экспорт
Растр, для экранов
Заполните форму, чтобы включить скачивание.
Размер экспорта и закодированный текст
- Данные
- Пока не закодировано
- Символ
- Ещё не построен
- Коррекция
- H
Ожидание ввода
Соберите сканируемый код для получения средств в одной из пяти сетей, с необязательной суммой и заметкой. Адрес используется ровно так, как вы его ввели, и никуда не отправляется.
Когда его сканируют
Кошелёк читает URI, подставляет получателя и показывает сумму и заметку как редактируемый запрос платежа, но ничто не подписывается и не отправляется, пока плательщик не подтвердит платёж в своём кошельке.
Как выглядит URI каждой сети
Bitcoin, Litecoin и Dogecoin используют форму BIP-21: имя схемы, двоеточие, адрес и необязательные параметры запроса. Сумма записывается в целых монетах десятичной дробью — amount=0.005 означает пять тысячных биткойна, — а метка и сообщение кодируются процентами.
Ethereum использует EIP-681, где параметр value выражен в wei, а не в эфирах. Спецификация поощряет научную запись, поэтому 0,25 ETH записывается как value=2.5e17. Параметров label и message в EIP-681 нет — поэтому эти два поля исчезают, когда вы выбираете Ethereum.
Solana Pay определяет собственный запрос на перевод: solana:, затем публичный ключ получателя в base58, с суммой в SOL и необязательными меткой и сообщением. Спецификация ограничивает сумму девятью знаками после запятой — это точность SOL — и требует, чтобы кошельки отвергали URI, который несёт больше.
Адрес кодируется ровно так, как вы его ввели, включая регистр. Адреса Bitcoin в bech32 нечувствительны к регистру, и их можно было бы перевести в верхний регистр, чтобы попасть в алфавитно-цифровой режим QR и уменьшить символ, но устаревшие адреса base58 к регистру чувствительны, и перевод такого адреса в верхний регистр его уничтожает. Применять эту оптимизацию лишь иногда — ровно то поведение с условием, которое даёт сломанный код в том единственном случае, который никто не проверил, поэтому она не применяется вовсе.
- bitcoin:bc1q…?amount=0.005&label=Dom%20Knigi
- ethereum:0x…?value=2.5e17
- solana:7xKX…?amount=1.5&label=Dom%20Knigi
Сумма — это запрос, а не обязательство
Каждая схема здесь трактует сумму как предложение отправляющему кошельку. Многие кошельки заранее заполняют поле и позволяют плательщику изменить его до подписания. Некоторые игнорируют параметр целиком и открываются с пустой суммой. Ни один из них не обязан её соблюсти, и в QR-коде нет механизма, который мог бы их к этому принудить.
BIP-21 действительно определяет префикс req- для параметров, которые кошелёк обязан понять или отвергнуть, но это управляет тем, разберёт ли кошелёк URI, а не тем, заплатит ли человек названную цифру. Считайте напечатанную сумму удобством, которое избавляет от набора, и сверяйте то, что действительно пришло, с тем, что вы просили.
Суммы также не несут назначения платежа. Поле сообщения — это отображаемый текст для плательщика; оно не записывается в транзакцию и не доходит до вас вместе со средствами. Сопоставить входящий платёж с заказом означает использовать для каждого заказа свежий адрес, чего один напечатанный код сделать не может.
Проверьте адрес, прежде чем код покинет ваш экран
Этот сайт не может проверить адрес. Он проверяет только то, что введённое соответствует набору символов и приблизительной длине выбранной вами сети, а это ловит очевидную ошибку вставки и ничего сверх того. Он не может определить, принадлежит ли адрес вам, существует ли ещё кошелёк и не подменили ли строку по дороге от вашего кошелька до этого поля. Обращаться некуда, потому что на этой странице вообще нет сетевых запросов.
Подменяющие адрес вредоносные программы — реальная и обыденная угроза: угонщики буфера обмена следят за скопированным адресом кошелька и заменяют его адресом атакующего. Подставленный адрес корректно составлен, поэтому проходит любую проверку формата, и получившийся код совершенно исправен — для кого-то другого. Переводы в этих сетях окончательны, возврата платежа не существует, и никакая служба поддержки не вернёт средства назад.
Защита короткая и не подлежит обсуждению. После того как код отрисуется, отсканируйте его тем телефоном, которым вы бы платили, и сравните адрес, который показывает кошелёк, с экраном получения в вашем кошельке символ за символом: первые и последние шесть символов ловят большинство подмен, полная строка ловит остальные. Затем отправьте самому себе небольшую пробную сумму, прежде чем код пойдёт в тираж. Повторяйте это после каждой перепечатки из сохранённого файла.
Вопросы и ответы
Хранится ли в коде мой приватный ключ или сид-фраза?
Нет — и никогда не вводите ни то, ни другое ни на одной веб-странице. Этот инструмент принимает адрес для получения, а это публичные данные, которыми вы и должны делиться. Приватный ключ или фраза восстановления отдают контроль над самим кошельком, и ни у одного добросовестного генератора, обменника или сотрудника поддержки нет ни единой причины их просить.
Может ли повреждённый или грязный напечатанный код отправить средства не на тот адрес?
Нет. QR-коды несут коррекцию ошибок Рида — Соломона, и декодер либо восстанавливает исходную строку в точности, либо отказывает целиком: он не возвращает правдоподобный, но другой адрес. Повреждение сверх восстановительной способности даёт отказ сканирования, а это безопасно. Настоящий риск — неверный адрес, закодированный правильно с самого начала.
Почему при выборе Ethereum исчезают поля метки и сообщения?
Потому что EIP-681 их не определяет. Добавлять параметры, которых спецификация не описывает, значит получить кошельки, которые либо их проигнорируют, либо сочтут URI некорректным, а некорректный URI хуже отсутствующей метки. BIP-21 и Solana Pay определяют и label, и message, поэтому для этих четырёх сетей поля появляются.
Сработает ли это для токена, а не для родной монеты?
С этой страницы — нет. Переводам ERC-20 по EIP-681 нужны адрес контракта и вызов функции в URI, а Solana Pay нужен параметр spl-token с адресом эмиссии — и то и другое легко задать неверно неочевидным образом и потерять средства. Воспользуйтесь функцией запроса в собственном кошельке, который знает и десятичность токена, и его контракт.
Как работает статический QR-код
Каждый код на этом сайте статический: данные записаны в сами чёрно-белые модули. При чтении кода ничего не запрашивается, ни один наш сервер в этом не участвует и никакая подписка не держит напечатанный код на плаву. То же свойство и есть ограничение: после печати изменить его содержимое нельзя.
Дальше то, прочитается ли напечатанный код, решают три вещи: во сколько байт вышли данные, какой уровень коррекции поглощает повреждения и какой ширины получается один модуль на бумаге. Эти руководства разбирают каждую из них с цифрами.