Me gustaría crear una billetera Taproot que cumpla con las siguientes condiciones:
- Los usuarios pueden usar sus claves para gastar UTXO en cualquier momento
- Hay una clave especial, proporcionada por un servicio de recuperación, que solo se puede usar para gastar UTXO después de un año. Este es el caso cuando el usuario pierde la semilla y entonces puede actuar un servicio de recuperación confiable.
Creé el siguiente miniscript para cumplir con estos requisitos:
tr(
dummy_key,
{and_v(
v:pk(recovery_key),
older(52560)
),
pk(user_xpub)}
)
Ejemplos de las variables anteriores:
let dummy_key = "d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a";
let user_xpub = "(6f53d49c/44h/1h/0h)tpubDDjsCRDQ9YzyaAq9rspCfq8RZFrWoBpYnLxK6sS2hS2yukqSczgcYiur8Scx4Hd5AZatxTuzMtJQJhchufv1FRFanLqUP7JHwusSSpfcEp2/0/*";
let recovery_key = "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5";
Entonces mi entendimiento es:
La ruta del script anterior admite correctamente cualquier clave derivada de usuario_xpub en cualquier momento O el clave_recuperación después de un año.
desde el tr() La expresión debe admitir el caso en el que el usuario ha perdido su billetera inicial/firmante y ya no puede firmar transacciones. usuario_xpub no puede estar en la ruta de la clave y se debe utilizar una clave ficticia. Por lo tanto, una clave ficticia compartida entre el servicio de recuperación y el usuario es la única forma de hacer que este script funcione.
El script anterior funciona indistintamente con claves públicas y privadas.
¿Son correctas las afirmaciones 1, 2 y 3?
Me gustaría crear una billetera Taproot que cumpla con las siguientes condiciones:
- Los usuarios pueden usar sus claves para gastar UTXO en cualquier momento
- Hay una clave especial, proporcionada por un servicio de recuperación, que solo se puede usar para gastar UTXO después de un año. Este es el caso cuando el usuario pierde la semilla y entonces puede actuar un servicio de recuperación confiable.
Creé el siguiente miniscript para cumplir con estos requisitos:
tr(
dummy_key,
{and_v(
v:pk(recovery_key),
older(52560)
),
pk(user_xpub)}
)
Ejemplos de las variables anteriores:
let dummy_key = "d01115d548e7561b15c38f004d734633687cf4419620095bc5b0f47070afe85a";
let user_xpub = "(6f53d49c/44h/1h/0h)tpubDDjsCRDQ9YzyaAq9rspCfq8RZFrWoBpYnLxK6sS2hS2yukqSczgcYiur8Scx4Hd5AZatxTuzMtJQJhchufv1FRFanLqUP7JHwusSSpfcEp2/0/*";
let recovery_key = "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5";
Entonces mi entendimiento es:
La ruta del script anterior admite correctamente cualquier clave derivada de usuario_xpub en cualquier momento O el clave_recuperación después de un año.
desde el tr() La expresión debe admitir el caso en el que el usuario ha perdido su billetera inicial/firmante y ya no puede firmar transacciones. usuario_xpub no puede estar en la ruta de la clave y se debe utilizar una clave ficticia. Por lo tanto, una clave ficticia compartida entre el servicio de recuperación y el usuario es la única forma de hacer que este script funcione.
El script anterior funciona indistintamente con claves públicas y privadas.
¿Son correctas las afirmaciones 1, 2 y 3?