Cómo confirmar una transacción sin conexión

¿Es posible confirmar una transacción fuera de línea en el siguiente escenario:

  1. el dispositivo "receptor" está primero en línea. No hay restricción en este punto. Especialmente, puede preparar todo lo necesario para los siguientes pasos.

  2. el dispositivo "receptor" se desconecta. Genera una solicitud de pago por una cantidad específica que no se conocía antes y la comparte con el dispositivo de "envío" a través de un medio fuera de línea, como un código QR, por ejemplo.

  3. el dispositivo de "envío" que siempre está en línea, completa la transacción.

  4. ¿Cómo podría el dispositivo "receptor", mientras permanece fuera de línea , obtener una confirmación de que la transacción realmente se ha producido? En otras palabras, ¿qué debe compartir el dispositivo "enviador" (mediante un código QR, por ejemplo) con el dispositivo "receptor" que le permitirá confirmar la transacción sin ser engañado?

¿Podría el dispositivo "receptor" tener una clave pública que verificaría una versión firmada de la transacción?

Respuestas (1)

Depende precisamente de lo seguro que necesites estar. En términos generales, el bloque completo que contiene la transacción y los siguientes 100 encabezados de bloque deberían ser suficientes. La validación debe consistir en garantizar que el primer bloque realmente contenga la transacción y sea un bloque de Bitcoin válido, los otros 100 bloques formen una cadena válida y los 100 bloques alcancen un objetivo de dificultad razonable.

La manera fácil de crear una cadena de este tipo es confirmar la transacción y esperar a que todos los mineros del mundo produzcan 100 bloques. Aparte de eso, tendría que encontrar los 100 bloques usted mismo, lo cual es mucho trabajo para hacer solo para falsificar una transacción.

Tenga en cuenta que este método fallaría si la potencia total de hash de la red de Bitcoin cayera por debajo de lo que espera el dispositivo, ya que los bloques reales no alcanzarían el "objetivo de dificultad razonable". Hasta cierto punto, tiene que predecir la futura dificultad de Bitcoin para que esto funcione.

Esto supone que no tener una autoridad central es un requisito. Si puede aceptar una autoridad central, esa autoridad central puede emitir periódicamente una declaración firmada de la dificultad mínima actual y la cantidad de bloques que debe aceptar el dispositivo. Actualizar esto cada año más o menos debería ser más que suficiente. Eso le permitiría esperar muchas menos confirmaciones. 100 confirmaciones tomarán 17 horas más o menos.

Gracias por la respuesta. Me preocupa el tamaño de la transferencia requerida desde el dispositivo de "envío" al de "recepción" en el paso 4. El encabezado del bloque es de 80 bytes, por lo que debería estar bien. Pero supongo que un bloque entero puede ser grande. ¿Cómo podría optimizarse la transferencia requerida con el supuesto de que el monto de la transacción se limita a algo 'pequeño' (por ejemplo, 1 BTC) y esta transferencia debería realizarse minutos después de la transacción?
Puede incluir solo la transacción, suficiente del árbol de Merkle para demostrar que la transacción está en el bloque y los encabezados de solo unos pocos bloques.