Este es el tercer artículo en un serie El profundo buceo en propuestas de pacto individuales que han alcanzado un punto de madurez que merece un desglose en profundidad.
Txhash y checktxhashverify (TXHASH), presentado por Steven Roose y Brandon Black con un número de BIP actualmente no asignado, es un pacto “basado en plantillas” que puede ver conceptualmente como una extensión o una versión más avanzada de CheckTemplinge (CTV).
Antes de entrar en el arenoso de cómo funciona TXHash, actualizaremos los datos en una transacción de Bitcoin.
En un nivel alto, tiene las salidas, las entradas y el testigo (o script Sig para transacciones no segwit en la entrada).
Campos de transacción globales:
- Versión
- Marcador, que indica Segwit con un valor de bandera
- Bandera, indicando Segwit con un valor de bandera
- Recuento de insumos
- Recuento de salida
- nlocktime, utilizado para timelocks
Cada entrada contiene:
- TXID de la transacción anterior
- Vout (índice) de la salida de esa transacción gastada
- Tamaño de scriptsig
- ScriptSig (si una transacción no segwit)
- Número de secuencia (utilizado para marcas de RBF y selecciones de tiempo relativas).
Cada salida contiene:
- Cantidad de satoshis asignados a la salida
- ScriptPubkeySize, el tamaño del script de bloqueo
- Scriptpubkey, el script de bloqueo real
Podemos ignorar el campo de los testigos al considerar TXHASH o ChecktxHashverify, ya que ninguno de los códigos de operación restringe el campo de testigos para retener ciertas propiedades.
Cómo funciona Txhash
Tanto TXHASH (solo Tapscript) como CheckTXHASHVERIFY (Legacy Script y Tapscript) tienen diferentes comportamientos en la pila debido a las diferencias entre el script heredado y el tapscript. Para los propósitos de este artículo, estas diferencias no son materiales, por lo que simplemente las ignoraremos.
Si CTV es un código de operación de pacto que limita que una salida de bitcoin solo se gaste de una manera singular y exactamente definida, TXHASH es una versión sobrealimentada de CTV que le permite elegir exactamente qué piezas de una transacción están limitadas y deben gastarse de la manera exactamente predefinida y qué piezas de una transacción puede ser lo que alguien quiera al gastar el tiempo.
Le brinda lo mejor de ambos mundos, que requiere que se haga algo al gastar una moneda restringida del pacto, pero luego permitiendo que un usuario haga lo que quiera con el resto de los fondos disponibles para ellos o la transacción que elabora.
Esto se logra utilizando ‘TXFieldSelector’.
CTV simplemente usa un hash único de la transacción predefinida para verificar al tiempo. Con Txhash, necesita una forma de comunicar a qué información se compromete hash y qué información no es. Ese es el trabajo del TXFieldselector.
Txfieldselector es esencialmente una serie de bytes (que pueden ser variables de longitud), con cada bit comunicando qué campos en una transacción están comprometidos por el hash que se verificará. Esto le permite seleccionar campos específicos de la transacción, Nlocktime, versión, etc., le permite seleccionar campos específicos de las entradas y salidas, es decir, incluir o no el número de secuencia, o el ID de salida anterior, o el Anexo Taproot (un campo de datos específico para los scripts de taproot). Las salidas, ya sea para comprometerse con el scriptpubkey, los valores de la cantidad, ambos o ninguno. También puede decidir exactamente a qué salidas e entradas se aplican estas restricciones.
Existe cierta complejidad y flexibilidad en cómo se junta el TXFieldSelector, y puede leer todos los detalles más finos. aquí En el BIP propuesto si está interesado en esos, pero el principal punto de quitarle es que le permite elegir exactamente qué partes de la transacción están restringidas por el pacto cuando alguien va a gastar la salida gravada, y qué partes no lo están, en un grado muy granular.
¿Para qué es útil txhash?
En primer lugar, TXHash le permite hacer todo lo que pueda con CTV. Por lo tanto, TXHASH también proporciona todo el valor proporcionado por CTV para optimizar los costos de coordinación de cualquier cosa posible con las transacciones previas al firmación. Pero sobrealimenta esa capacidad enormemente. En lugar de tener que comprometerse con la totalidad de una transacción, puede comprometerse solo con las partes que le importan.
Esto tiene dos grandes beneficios en teoría de inmediato. En primer lugar, en la gestión de tarifas de la banda para Twos de la capa se vuelve más fácil de manejar. Actualmente, se requiere el uso de salidas de anclaje para hacer una capa de tarifa dos transacciones de liquidación con los pagos de los niños por los padres, donde una transacción que gasta una salida de una no confirmada puede agregar a las tarifas netas para ambos. Txhash le permite comprometerse con solo sus salidas de contrapartes en una transacción multipartidista, y dejar su el suyo libre para hacer lo que quiera (considera aquí que se deben hacer otras cosas para que esto sea seguro para que un tercero no pueda quemar todos sus fondos a las tarifas), incluida la disminución ligeramente a RBF de la transacción.
En segundo lugar, la puerta ahora está abierta para protocolos multipartidistas para permitir garantías granulares sobre a qué se comprometen las transacciones fuera de la cadena. Algunos usuarios ahora pueden recibir una garantía sobre cómo se gastarán sus monedas, pero no tienen que preocuparse por lo que hace otro grupo de usuarios con las suyas. Puedo estar seguro de que un txfieldselector garantiza que mis monedas se manejan correctamente, y no tengo que preocuparme por dónde van las monedas de otra persona.
En combinación con CheckSigFromstack (CSFS), TXHASH puede facilitar un sistema de sighash completamente generalizado. La bandera de Sighash es parte de una firma que comunica con qué partes de la transacción verificar la firma. Son actualmente:
- Sighash_all: firma todas las entradas y salidas
- Sighash_none: firma todas las entradas y no salidas
- Sighash_single: firma todas las entradas y la salida con el mismo índice que esta entrada
Ninguno de estos indicadores de Sighash permite agregar nuevas entradas a una transacción sin invalidarlos, pero cada uno tiene una versión AnyonecanPay que solo firma sus propias entradas y las salidas apropiadas, lo que permite a cualquier otra persona agregar nuevas entradas y nuevas salidas para la versión Anyonecanpay de Sighash_None y Sighash_single.
Al poder “Sideload” nuevos txfieldselectores utilizando CSF, los usuarios pueden emular un sistema de sighash que les permita elegir exactamente a qué piezas individuales de una transacción se compromete o no.
TXHASH también permite hacer cumplir la igualdad entre el valor de las entradas y salidas mediante el uso de txfieldselectores individuales que se comprometen solo a un campo de valor único de una entrada o salida que desea inspeccionar, y luego garantizar que sus hashes sean los mismos en la pila.
Pensamientos de cierre
TXHASH es una posible sobrealimentación de CTV, que permite un grado increíblemente granular de introspección de la transacción de gasto que puede ser increíblemente poderosa, especialmente en combinación con algo como CSFS.
Sin embargo, ese poder es lo suficientemente expresivo como para abrir la puerta a un espacio de diseño increíblemente grande. Uno que podría tener un efecto material en los incentivos generales de Bitcoin. Cosas como garantizar la cantidad de igualdad en las salidas o entradas es acercarse mucho al territorio de lo que se necesita para el intercambio automatizado sin confianza en la cadena. Esa es una fuente seria de valor extraíble de mineros (MEV), que ha sido un problema de incentivos y centralización muy grave para que otras blockchains sean lidiar.
Txhash no debería descartarse absolutamente, ya que proporciona primitivas increíblemente poderosas para que los desarrolladores de protocolos aprovechen, pero las posibles implicaciones de segundo orden de lo que las personas construirán con él deben sopesarse contra los aspectos positivos.