BIP: Транзакция Подписание с помощью QR-кодов
Ссылка текст:
https://github.com/bither/bips/blob/master/unsigned_transaction.md
Код:
Название: Сделка Подписывая с помощью QR-кодов
Автор: Песня Chenwen, Bither Team
Тип: Стандарты Track
Создано: 2014-9-6
Абстрактные
Это BIP описывает способ регистрации Bitcoin операций с помощью QR-кодов.
Давайте предположим, что мы имеем два устройства здесь. Можно построить и отправить сделки. А другие имеют закрытый ключ для подписания сделки.
Мы определили формат для отправки неподписанных транзакций с помощью QR-кодов в дальнейшем, и отправках подписанных сделок обратно к первому.
мотивация
Таким образом, частные ключи Bitcoin можно хранить вдали от сетевых устройств, подключенных. Это самый безопасный способ для хранения закрытых ключей. И с помощью QR-кодов, пользователь может по-прежнему тратит биткоен принадлежащее этим секретных ключи.
Это проще для различных онлайн и оффлайн клиентов общаться друг с другом, если все они следуют один общий протокол QR кодов формата контента.
Обработать
Есть две роли в этом процессе подписания, "ГОРЯЧИЙ" для интернет-устройство, которое имеет историю транзакций частного ключа и неизрасходованные выходов транзакций, "ХОЛОДНО" для устройства автономного который проведет закрытый ключ.
- 1. Горячего generats транзакции на основе неизрасходованных выходов транзакций. Но он не может подписать сделку.
- 2. ГОРЯЧИЙ преобразует информацию Нуждаясь быть подписано в беззнаковой транзакции в отформатированную цифровую подписи QR-коду. HOT отображает QR-коды.
- 3. COLD сканирует экран HOT и получает цифровую подпись информации.
- 4. COLD находит правильный секретный ключ, что информация требует цифровой подписи.
- 5. COLD подписывает цифровую подпись информации с использованием закрытого ключа.
- 6. COLD преобразует подписанную информацию отформатированных QR-коды и отображает их.
- 7. ГОРЯЧАЯ получает подписанную информацию и прикрепить ее на неподписанные транзакции.
- 8. ГОРЯЧАЯ проверяет, является ли сделка правильно подписан. Сделка будет распространяться на другие сверстник, если она проходит проверку.
Формат
Горячая и холодная могут понять друг друга только путем ограничения QR-коды, которые они предоставляют определенный протокол формата.
Протокол идет ниже.
Unsigned информация
Так как мы должны доказать, у нас есть закрытый ключ, который без знака операции входа был отправлен, так что нам нужны входы должны быть подписаны.
И ХОЛОД нужна информация, чтобы спросить пользователя, если он любит подписывать сделку.
Эти части соединены и разделённое двоеточием сделать неподписанный QR коды содержания.
- Адрес, используемый для отправки Bitcoin из
- Плата за сделку
- Адрес получить Bitcoin
- Количество Bitcoin отправки (не включая плату сделки)
- SHA256 хеш-массивы байт всех входов транзакций, разделенных двоеточием, который находится в шестнадцатеричном формате строка
исходный код
Подпись информация
После COLD подписывает входы сделки, он строит входные сценарии, основанные на ECDSA signactures.
COLD преобразовать все входные скрипты для шестнадцатеричных строк и соединить их с двоеточием в качестве разделителя.
Это присоединлась строка будет контентом для подписанного QR-коды.
исходный код
Оптимизация QR-код
В соответствии с Объем информации и версия QR-код, один QR-код может служить больше содержания, если он содержит только верхние регистр букв, цифры и некоторые виды пунктуации, поэтому мы можем оптимизировать содержание.
Эти правила применяются к содержимому.
- Все байтовый массив шестнадцатеричных строк используйте только буквы в верхнем регистре (исходный код)
- Верхний регистр букв адреса преобразуются в * за которым следует буква. например -> * A . И тогда все буквы превращаются в верхнем регистре. Таким образом, наше пожертвование адрес: 1BsTwoMaX3aYx9Nc8GdgHZzzAGmG669bC3 преобразуется в 1 * BS * ДВА * МА * X3A * YX9 * Nc8 * ГДГ * H * ZZZ * A * ГМ * G669B * С3. (исходный код)
- Суммы Bitcoins представлены в верхнем регистре шестнадцатеричных строк для подсчета satoshis.
QR Code Pagination
Одна транзакция может содержать несколько входов. Поэтому содержание знака или без знака информации может быть слишком много времени, чтобы отображаться в одном QR-коде.
QR Code в ограниченном графическом размере с слишком много информации может быть слишком трудно для сканирования.
Таким образом, нам нужен способ, чтобы разбиваться QR-коды.
Длина одного содержания QR Code может меняться в зависимости от различного графического размера. Мы находим 328, чтобы быть подходящей длины демонстрируемого контента и легко сканируется на мобильных телефонах.
Когда нам нужно несколько страниц QR-коды. Мы добавляем (Общее количество страниц минус 1) 🙁 текущий индекс страницы начинается с 0): перед каждой странице. например QR Code Page 1 в 3-х страниц будет начинаться с префикса 2: 0:.
исходный код