Miniscript es un lenguaje para escribir un subconjunto de Bitcoin Scripts de forma estructurada, lo que permite el análisis, la composición, la firma genérica y más.
Contenido
¿Qué es Bitcoin Script?
Bitcoin siempre ha tenido un mecanismo para hacer que las monedas sean gastadas a través de políticas complejas que no sean simplemente una única clave, lo que se conoce como sistema Script.
Mientras que Bitcoin Script es usado principalmente para pagos a claves simples, también puede ser usado para monederos multi firma, construcciones de atomic swaps y la Lightning Network.
Pero esto no es lo único que puede hacer. El lenguaje Script puede ser usado para representar condiciones complejas a la hora de liberar una transacciones, como cuando se requieren 2 claves de 3, o se requiere 1 clave más cualquiera de otras 2. También revisar el hash de una pre imagen, timelocks y otras construcciones más exóticas.
Problemas que este lenguaje tiene
Una razón por la que la utilización de los scripts no ha alcanzado su máximo potencial es que construirlos no es una tarea tan sencilla como se cree. Son difíciles de verificar que hayan sido escritos correctamente y sean seguros, y es más difícil encontrar la forma de escribirlos de tal manera que sean económicos.
Pero este es solo una parte del problema, aun cuando sepas como escribir correctamente el script, el diseño de aplicaciones y protocolos para negociar y construir transacciones con este, se necesita mucho trabajo de desarrollo cada vez que se diseña algo nuevo.
Cualquier tipo de flexibilidad siempre requiere plantillas que detecten scripts compatibles, y cada nuevo agregado que hagamos necesita más recursos ingenieriles para analizar y asegurar la calidad.
Eso nos plantea la pregunta de que ocurrirá si las aplicaciones de Bitcoin pudieran trabajar con cualquier script, no solo para los que fue diseñado.
En ese caso, no estaríamos restringidos a usar un solo diseño, pudiendo comenzar a diseñar aplicaciones que utilicen scripts generados sobre la marcha, basados en los requerimientos del usuario específico.
Los creadores de monederos también podrían introducir más opciones basadas en scripts mientras mantienen la interoperabilidad con otros monederos.
La solución en Miniscript
Aquí es donde entra Miniscript, un lenguaje para representar Scripts de Bitcoin de manera estructurada, permitiendo el análisis, la composición, la firma genérica y más de manera eficiente.
Por ejemplo, un Script de Bitcoin que sea así:
<A> OP_CHECKSIG OP_IFDUP OP_NOTIF OP_DUP OP_HASH160 <hash160(B)> OP_EQUALVERIFY OP_CHECKSIGVERIFY <144> OP_CSV OP_ENDIF
Donde A y B son claves públicas, puede ser convertido a Miniscript de esta forma:
or_d(c:pk(A),and_v(vc:pk_h(B),older(144)))
Esta notación nos indica de forma más clara que el script permite gastar las criptomonedas cuando A firma, o cuando B firma luego de 144 bloques. Y lo hace de manera más acotada.
Esto permite que el script sea más fácil de leer para el humano, aunque solo es uno de los beneficios y casos de uso que presenta este lenguaje.
Casos de uso
Utilizar Bitcoin Script a día de hoy para construir condiciones de gasto sofisticadas es más difícil de lo que debería ser, requiriendo software especial para desarrollar, testear y desplegar para cada nuevo caso de uso.
Miniscript puede resolver estos casos de uso de una forma más generalizada a través de conjuntos de condiciones de gasto arbitrarios. Y en la mayoría de los casos, de modo más simple y fiable de lo que sería una solución orientada a un propósito especial.
1. Optimizar los scripts
Uno de esos casos es encontrar un script optimizado que implemente el conjunto de condiciones de gastos.
En Bitcoin Script, hay muchas formas diferentes de requerir una firma, describir una conjunción o disyunción o implementar un umbral.
Incluso si tienes experiencia trabajando con Bitcoin Script, la elección correcta puede depender de las posibilidades relativas que se satisfagan diferentes condiciones, y ser difícil de calcular.
El compilador online, que también está disponible en código fuente para C++, o implementado como parte de la biblioteca rust-miniscript, puede encontrar instantáneamente el Miniscript más óptimo que corresponde a una política de gasto dada.
El ejemplo anterior lo vemos al compilar la condición de gasto:
or(99@pk(A),1@and(pk(B),older(144)))
Que es una forma de escribir que el lado izquierdo (firma A) tiene un 99% de probabilidad de ser tomado, y el lado derecho (firma B) tiene un 1% de probabilidad.
2. Aumnto de la interoperabilidad
Una vez que se ha encontrado un script eficiente, otro obstáculo común es encontrado por muchos usuarios de Script. Se trata de la falta de interoperabilidad entre diferentes mecanismos de gasto.
Los usuarios que quieren implementar un timelock a largo plazo o complejos requerimientos de multi firma pueden tener miedo de que las otras partes de la transacción no tengan el software para reconocer y gastar las monedas que controlan esta política.
Miniscript, al representar directamente las condiciones de gasto, permite expresar las políticas de tal manera que pueda:
- Calcular las direcciones asociadas al script.
- Determinar que firmas son necesarias o suficientes para firmar en un momento dado.
- Producir una transacción válida dado un conjunto suficiente de firmas.
Los usuarios no tiene que preocuparse por si todos los participantes utilizan un software compatible o si continuara existiendo con el paso del tiempo, en especial para los requerimientos del timelock.
Tampoco deben preocuparse de que sus necesidades puedan volverse incompatibles con el software para firmar gracias a los límites que impone Bitcoin Script.
3. Prueba de reserva
Relacionado con este problema de las firmas se encuentra el problema de proveer reservas, un proceso donde una compañía demuestra que puede gastar una serie de bitcoins sin en realidad gastarlos.
Esta es una función muy interesante para servicios de custodia, que pueden demostrar a sus usuarios que tienen el control sobre los BTC sin tener que enviarlos a ningún sitio.
Mientras que existen herramientas como estas, como la Herramienta de Prueba de Reserva de Blockstream, no existe un estándar en común que pueda ser usado por la industria.
Antes de Miniscript, probablemente no había la posibilidad de lograr un estándar que pudiera abarcar la diversidad de soluciones de custodia que se utilizan a día de hoy.
Agrega un Comentario