Estoy creando una aplicación de lotería basada en Bitcoin. Una entrada a la lotería es una transacción que gasta 1 BTC.
Si alguien adivina algún valor arbitrario correctamente, puede reclamar la entrada y enviar este 1 Btc a una dirección que controle.
Deseo tener la siguiente funcionalidad: si nadie adivina el número correcto después de 100 bloques, entonces puedo reclamarlo como el operador de la lotería.
Puedo hacer esto a través de: Transacción de entrada IF CHECKLOCKTIMEVERIFY pagadero a una conjetura correcta ELSE Pagadero a la clave pública de mi operador FIN
Luego, cuando intento gastar esta transacción de entrada, configuro nLockTime en el bloque actual.
En todo momento configuré todos los números de secuencia en 0xFFF ... Para que las transacciones se extraigan.
Sí, puede usar OP_CHECKLOCKTIMEVERIFY
para hacer que la salida de una transacción no se pueda gastar para una cierta cantidad de bloques. Sin embargo, no puede usarlo directamente en un bloque if-else como lo ha descrito. Cuando OP_CHECKLOCKTIMEVERIFY
se ejecuta, no coloca un valor de resultado en la pila. O arroja un error (invalidando la transacción que intenta gastar la salida) o continúa ejecutándose como si nada hubiera pasado.
Para crear una transacción como usted describe, deberá usar multisig, de modo que una de las partes pueda gastar la transacción tan pronto como se proporcione el número correcto (supongo que ingresará a una función hash), O puede volver a gastarlo en usted mismo después de que expire el tiempo de bloqueo. Básicamente, así es como funciona Lightning Network. Debe consultar Lightning Networks Parte II: Contratos de bloqueo de tiempo hash (HTLC)
tom taylor
Jestin
OP_CHECKLOCKTIMEVERIFY
es una consecuencia de una condición, no la condición en sí misma. La condición es el0
o1
al final de sus scripts de canje de ejemplo. Eso es lo que determina siOP_CHECKLOCKTIMEVERIFY
se llama.tom taylor