Glosario / Protocolo y actualizaciones
Covenant
- ¿Qué es un covenant?
- Un covenant es una regla de gasto que limita adónde puede ir después el bitcoin, no solo quién puede moverlo, y hoy ningún opcode (código de operación) del Script de Bitcoin puede hacer cumplir uno.
Todo script de la cadena responde a una pregunta: ¿está autorizado este gasto? Un covenant dejaría que el script hiciera una segunda pregunta sobre la transacción que lo gasta, y todas las propuestas para permitirlo (BIP-119, BIP-118, BIP-345, BIP-347) llevan años sin activarse. Nada de lo que usted conserva hoy se ve afectado, pero los productos de bóveda y de herencia que la gente no deja de pedir están a la espera de esto.
Cómo funciona
Estado: ningún opcode de covenant está activo en la mainnet de Bitcoin. Cada diseño que sigue es una propuesta, y ninguno tiene parámetros de activación integrados en Bitcoin Core.
La capacidad que falta tiene un nombre preciso: introspección. Cuando un nodo ejecuta un script, el script puede examinar firmas, hash, bloqueos temporales (timelocks) y la pila, pero no puede leer las salidas de la transacción que gasta la moneda. Ese único punto ciego es la razón por la que bitcoin puede expresar "dos de estas tres personas deben estar de acuerdo" y no puede expresar "este dinero solo puede moverse a esa dirección".
Las propuestas cierran esa brecha de dos formas distintas, y la diferencia entre ellas es el núcleo del debate.
El enfoque de plantilla fija de antemano un hash de toda la transacción de gasto. El opcode OP_CHECKTEMPLATEVERIFY funciona así: la salida guarda un hash de 32 bytes, y el gasto falla salvo que el hash de la transacción coincida con ese valor. Es estrecho, es barato de verificar y, como el compromiso no puede describir otro compromiso, la restricción no puede repetirse indefinidamente.
El enfoque de introspección le da al script las piezas y le deja hacer aritmética. Combinar el opcode OP_CAT con una verificación de firma, o añadir el opcode OP_CHECKSIGFROMSTACK, permite a un script reconstruir el hash de firma de la transacción a partir de piezas de la pila y verificarlo, y a partir de ese momento el script puede exigir lo que quiera sobre las salidas. Este enfoque es general, y es recursivo: un covenant puede insistir en que la siguiente salida lleve el mismo covenant.
La recursión es la objeción que lo ha frenado todo. Unas monedas bloqueadas en una regla que se perpetúa a sí misma podrían, en principio, quedar gravadas para siempre, lo que plantea preguntas sobre la fungibilidad y sobre los emisores que podrían hacer obligatoria esa regla. El contraargumento es que un grupo de personas ya puede simular un covenant prefirmando el único gasto permitido y destruyendo la clave, así que la capacidad existe en la práctica, y el hecho de que el consenso haga cumplir el covenant elimina sobre todo la necesidad de confiar en que la clave se destruyó de verdad.
Dónde aparece
Los covenants ya están desplegados en cadenas que copian el motor de script de bitcoin, lo cual es la forma más barata de ver lo que hacen.
Liquid, la cadena lateral (sidechain) basada en Elements, ejecuta un tapscript con opcodes de introspección que leen directamente las salidas de la transacción de gasto, y su federación los usa para su anclaje. Cualquiera puede además probar los opcodes de bitcoin propuestos en signets personalizadas antes de decidir si los querría en la mainnet.
En la mainnet, lo que hace las veces de covenant es una transacción prefirmada con una clave eliminada. Un proveedor de bóvedas genera la clave de depósito, firma el único retiro que llegará a permitir y luego destruye la clave para que no pueda crearse ningún otro gasto. Es un covenant que se hace cumplir con una promesa en lugar de con la red, y la promesa es justo lo que un opcode de covenant real haría innecesario. Conviene saberlo si un servicio le vende una bóveda: pregunte cuál de las dos cosas es.
Covenant frente a contrato de escrow
Un covenant restringe el destino; un contrato de escrow (depósito en garantía) restringe a los firmantes. Resuelven mitades distintas de la misma preocupación, y solo uno de los dos está disponible.
Un contrato de escrow es un multisig corriente con un tercero en el quórum, normalmente dos de tres, y funciona hoy en bitcoin: una plataforma de compraventa conserva una clave, y el comprador y el vendedor pueden liquidar sin ella o recurrir a ella para desempatar en una disputa. Lo que el escrow no puede hacer es restringir el resultado. En cuanto se forma un quórum de gasto, las monedas pueden ir a cualquier parte, incluso al árbitro. Un covenant fijaría de antemano el destino y eliminaría por completo del diseño la discrecionalidad del árbitro.