Как подтвердить оффлайн транзакцию

Можно ли подтвердить транзакцию в автономном режиме в следующем сценарии:

  1. «принимающее» устройство первым подключено к сети. На данный момент ограничений нет. В частности, он может подготовить все необходимое для следующих шагов.

  2. «принимающее» устройство отключается. Он генерирует запрос платежа на определенную сумму, которая ранее не была известна, и передает ее на «отправляющее» устройство с помощью автономных средств, таких как, например, QR-код.

  3. «отправляющее» устройство, которое всегда онлайн, завершает транзакцию.

  4. Каким образом «принимающее» устройство, оставаясь в автономном режиме , может получить подтверждение того, что транзакция действительно произошла? Другими словами, чем «отправляющее» устройство должно делиться (например, с помощью QR-кода) с «принимающим» устройством, что позволит ему подтвердить транзакцию, не будучи обманутым?

Может ли «принимающее» устройство иметь открытый ключ, который будет проверять подписанную версию транзакции?

Ответы (1)

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

Самый простой способ создать такую ​​цепочку — получить подтверждение транзакции и дождаться, пока все майнеры мира произведут 100 блоков. Кроме того, вам придется найти все 100 блоков самостоятельно, а это очень много работы, чтобы просто подделать одну транзакцию.

Обратите внимание, что этот метод потерпит неудачу, если общая мощность хеширования сети Биткойн когда-либо упадет ниже того, что ожидает устройство, поскольку реальные блоки не будут соответствовать «целевому уровню разумной сложности». Вы, в некоторой степени, должны предсказать будущую сложность биткойнов, чтобы это сработало.

Это предполагает, что отсутствие центральной власти является требованием. Если вы можете принять центральный орган, то этот центральный орган может периодически выпускать подписанное заявление о текущей минимальной сложности и количестве блоков, которые должно принять устройство. Обновление этого каждый год или около того должно быть более чем достаточным. Это позволит вам ждать гораздо меньше подтверждений. 100 подтверждений займут около 17 часов.

Спасибо за ответ. Меня беспокоит размер требуемой передачи с «отправляющего» устройства на «принимающее» на шаге 4. Заголовок блока составляет 80 байт, так что все должно быть в порядке. Но я предполагаю, что целый блок может быть большим. Как можно оптимизировать требуемый перевод, если предположить, что сумма транзакции ограничена чем-то «небольшим» (например, 1 BTC) и этот перевод должен произойти в течение нескольких минут после транзакции?
Вы можете включить только транзакцию, достаточную часть дерева Меркла, чтобы доказать, что транзакция находится в блоке, и заголовки только нескольких блоков.