CHECKSEQUENCEVERIFY Después de x tiempo de la última transacción

¿Hay alguna forma en la que pueda tener una dirección multifirma que permita a uno de los firmantes usar solo su clave única después de un período de tiempo determinado después de cada transacción/actualización de la dirección?

Quiero tener una dirección que requiera que 2 personas firmen para las transacciones salientes. Pero si después de 30 días no se ha hecho nada con la dirección, un solo firmante puede firmar una transacción. Pero si alguna vez hay algo como una transacción entrante o saliente, los 30 días se restablecen.

Respuestas (3)

Si bien parece que esto no es directamente posible, porque el script de bitcoin no permite hacer referencia a una transacción "dentro de los últimos 30 días", se podría pensar en una "solución alternativa" con una lógica comercial que observe la dirección P2SH. Un enfoque podría ser el "si" anidado, que está permitido en el script de bitcoin. Si alguna vez en los últimos 30 días hubo un pago, los 30 días deben "restablecerse"; tal vez necesite jugar con dos direcciones P2SH y transferir los fondos a una segunda dirección (y viceversa). Si su lógica comercial descubre una transacción en los últimos 30 días, los fondos se transfieren a una segunda dirección y luego nuevamente a la primera dirección. Para esta segunda dirección, tendría el mismo conjunto de reglas, solo cambia el script de salida tx (para su dirección). La lógica de negocios podría tener un "

IF
  OP_HASH160  <length 0x14> <SECRET> OP_EQUAL
  <business pubkey> CHECKSIG
ELSE
  IF
    2 <Alice's pubkey> <Bob's pubkey> <Escrow's pubkey> 3 CHECKMULTISIG
  ELSE
    30d CHECKSEQUENCEVERIFY DROP
    <Alice's pubkey> CHECKSIG
  ENDIF
ENDIF

Obviamente, queda claro que hay tarifas involucradas en tal escenario. Depende de la frecuencia de las transacciones en los últimos 30 días y del valor de los fondos que se transfieren. Las tarifas no deberían consumir sus fondos ... Y, de nuevo, ¿tal vez uno podría considerar usar Lightning como "mecanismo de transporte" para cambiar los valores?

...para usar solo su clave única después de un período de tiempo determinado después de cada transacción/actualización de la dirección?

Esto no es posible ya que no existe una disposición en el script de bitcoin para consultar transacciones pasadas dentro de otra transacción, por lo que no puede verificar la hora de la última transacción en esa dirección.

Una solución alternativa si la dirección multisig no está almacenada en frío y su caso de uso lo permite, sería gastar todas las monedas en la dirección multisig cada vez que realice un nuevo depósito en esta dirección, reiniciando así el temporizador por " sobrescribiéndolo".

Entonces, si tiene X monedas en el multi-sig y desea depositar Y monedas nuevas, realiza una transacción que también gasta esas X monedas (requiriendo que ambos firmantes la firmen) y realiza una nueva salida de X + Y monedas.

El script de salida siempre sería de la forma:

IF
    2
ELSE
    30d CHECKSEQUENCEVERIFY DROP
    1
ENDIF
<Alice's pubkey> <Bob's pubkey> 2 CHECKMULTISIG

Esto daría como resultado siempre exactamente una salida no gastada en la dirección multi-sig con el temporizador actual en ejecución.