Идентификация платежа по POS-квитанции

Давайте представим сценарий, в котором программное обеспечение POS хочет поддерживать платежи в биткойнах с нулевым риском. В идеале хранить биткойн-адрес продавца в настройках POS.

Цель здесь состоит в том, чтобы однозначно связать квитанцию ​​​​в локальной базе данных POS с хэшем транзакции в блокчейне, чтобы узнать, была ли уже оплачена квитанция или нет.

Это сценарий, в котором продавец генерирует запрос QR-платежа с ценой BTC и адресом получателя. Некоторые приложения также передают сообщение, но оно хранится во внутренней памяти и не передается в блокчейн.

Я придумал два возможных алгоритма.

  1. Зарезервируйте последние несколько сатоши для временного идентификатора. например 0.000000 65

    • Поскольку большинство прямых (F2F) платежей занимает менее 2 минут. Можно было бы сгенерировать более короткий идентификатор, а затем проверить адрес продавца на наличие последней транзакции, как только временный идентификатор будет найден, POS пометит квитанцию ​​​​как оплаченную и запомнит хэш tx. Это предотвратило бы

    • Возможность обрабатывать случай, когда платеж поступает из нескольких входов, путем сложения входов для адреса продавца.

    • 1 BTC должен быть не менее 100 000 долларов, чтобы сломать это.
    • Чаевые сломают это.
  2. HD-кошелек Генерируется из биткойн-адреса

    • Создавайте новый адрес для каждой квитанции, оплаченной в биткойнах.
    • Я не думаю, что это технически возможно, так как необходимо получить дочерний ключ из главного закрытого ключа.
    • Как этого добиться, зная только биткойн-адрес продавца?
  3. Закодировать сообщение в ScriptPubKey OPRETURN

    • на стороне клиента (зависит от кошелька, которым они управляют).

Есть ли другая, лучшая возможность, которая мне пока неизвестна?

Ответы (1)

Вы должны использовать новый адрес для каждой транзакции, вероятно, сгенерированный из расширенного открытого ключа BIP32 (ваш № 2).

Я не думаю, что это технически возможно, так как необходимо получить дочерний ключ из главного закрытого ключа.

Расширенные открытые ключи могут быть получены из родительского открытого ключа, если известен цепной код (256 бит) для этого родительского расширенного открытого ключа. Продавцы должны предоставить вам расширенный публичный ключ и чейн-код, а затем вы сможете каждый раз генерировать для них новый адрес. Обратите внимание, что ваша система не будет подвергаться риску раскрытия закрытых ключей, поскольку вы будете использовать только расширенные открытые ключи BIP32.

Для получения технической информации о BIP32 посетите https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki .