Testigo segregado, Parte 1: Cómo un truco inteligente podría aumentar significativamente el potencial de Bitcoin

BITCOIN SEWGIT Testigo Segregado Ya LLEGO! (Junio 2019).

Anonim

Si una propuesta entusiasmó a los asistentes al reciente taller Scaling Bitcoin en Hong Kong, Bitcoin Core y Blockstream, fue el Segregated Witness del desarrollador Dr. Pieter Wuille. Elogiado por muchos dentro de la comunidad técnica, se espera que Segregated Witness mejore el rendimiento de Bitcoin de varias maneras, mientras que algunos incluso esperan que sea la solución de escalamiento lo que ayude a devolver algo de paz a la comunidad de Bitcoin.

En esta primera parte de la serie de tres partes de Bitcoin Magazine sobre Segregated Witness: cómo funciona.

¿Qué son las transacciones de Bitcoin nuevamente?

Para entender a Testigo Segregado, es útil entender qué transacciones de Bitcoin son a un nivel más técnico. (Siéntase libre de saltar a la última sección de este artículo si este es un tema familiar.)

Para empezar, es importante darse cuenta de que el protocolo de Bitcoin, en su núcleo, consiste en transacciones. Los nodos en la red peer-to-peer no se envían entre sí bitcoin; se envían paquetes que contienen datos de transacciones.

Estas transacciones de Bitcoin, en cierto modo, son realmente conjuntos de "bloqueos". "Más específicamente, cada transacción contiene dos componentes principales. La mitad desbloquea efectivamente bitcoins que estaban bloqueados en transacciones previas, usando datos llamados entradas . Las entradas incluyen scripts, instrucciones sobre cómo desbloquear la entrada, llamadas scriptSigs . La otra mitad consiste en uno o varios bloqueos nuevos llamados salidas , que bloquean la misma cantidad o menos bitcoin de nuevo. Las salidas incluyen scripts llamados scriptPubKeys . Como tal, bitcoin se mueve con eficacia de las entradas a las salidas dentro de una sola transacción, y pasa de una transacción a otra al mismo tiempo.

Hay una excepción principal a esta regla. Una transacción coinbase (que no debe confundirse con la compañía de billeteras e intercambiar con el mismo nombre) es la transacción creada por un minero cuando encuentra un nuevo bloque y contiene la recompensa del bloque: actualmente 25 bitcoin. Además, un minero puede aumentar la recompensa de la base de monedas por cualquier cantidad de bitcoin que se haya desbloqueado en las transacciones, pero no encerrado nuevamente: la diferencia entre las entradas y las salidas. Estas son las tarifas de transacción.

Todo este "desbloqueo" y "bloqueo" de bitcoin lo realizan los remitentes de las transacciones y, posteriormente, se transmiten a través de la red de Bitcoin como paquetes de información. Todos los nodos en la red, entonces, verifican si este proceso de desbloqueo y bloqueo se realizó correctamente. Si todo sale bien, reenvían la transacción a otros nodos. Y si un nodo también es un minero, podría incluir la transacción en un bloque. Sin embargo, si él realmente lo hace, depende del minero; es por eso que tiene sentido incluir una tarifa.

Es de vital importancia que las reglas utilizadas por todos los nodos para verificar transacciones sean compatibles con las reglas utilizadas por (casi) todos los mineros.Si algunos mineros incluyen transacciones en bloques que otros nodos rechazan, el bloque completo se considerará no válido por ese nodo. Si ese nodo también es minero, esto podría generar doble gasto y forks de red.

Estas reglas de consenso (las reglas en que todos los nodos están de acuerdo) permiten que las transacciones bloqueen (y desbloqueen) bitcoin de varias maneras diferentes a la vez. Pero las salidas que bloquean Bitcoin típicamente, al menos, incluyen un scriptPubKey en la línea de: "Demostrar que posee (o sabe) la clave privada que corresponde a la clave pública que corresponde a esta dirección de Bitcoin. "

(Es fácil reproducir una clave pública desde una clave privada , pero es básicamente imposible reproducir una clave privada de un público clave . Del mismo modo, es fácil reproducir una dirección de Bitcoin desde una clave pública , pero es imposible reproducir una clave pública desde un Dirección de Bitcoin . Como tal, también es fácil reproducir una dirección de Bitcoin desde una clave privada , pero es imposible reproducir una clave privada de una Dirección de Bitcoin . Es una "calle de sentido único")

La dirección de Bitcoin utilizada para bloquear Bitcoin en el scriptPubKey, por supuesto, es la dirección proporcionada por el receptor de la transacción. Como el receptor creó esa dirección usando una clave privada, solo él sabe, él es el único que puede crear un scriptSig válido y, por lo tanto, el único que puede crear una nueva transacción y gastar el bitcoin bloqueado.

¿Dónde entran las firmas?

Para probar la propiedad de la clave privada que corresponde a la clave pública que corresponde a una dirección de Bitcoin, uno podría teóricamente incluir la clave privada en el scriptSig de una transacción. Pero, por supuesto, eso no es seguro en absoluto. Lo que es más importante, cualquiera que vea la transacción podría tomar la clave privada y crear una nueva transacción (o cambiar la transacción original) para atribuirse tantos bitcoins como estén bloqueados antes de que la transacción original se incluya en un bloquear. De hecho, si un minero hiciera esto, se convertiría en un pedazo de torta para robar bitcoin, ya que él es el que elige qué transacciones confirmar. En cambio, por lo tanto, las ScriptPubKeys generalmente requieren que scriptSig incluya una o más firmas

para desbloquear Bitcoin. Las firmas son un truco criptográfico que usa una

clave privada en combinación con cualquier otro dato para calcular una cadena única de números. Y, utilizando la magia de la criptografía, la clave pública correspondiente se puede usar para verificar que la firma se haya creado con esa clave privada . Como tal, las firmas prueban tanto la propiedad de una clave privada, como la aprobación de una pieza específica de datos por parte del propietario de esa clave privada, todo sin la necesidad de revelar la clave privada. En el caso de Bitcoin, las claves privadas generalmente se utilizan para firmar los datos de la transacción menos las entradas. (Por lo tanto, el scriptPubKeys, los importes bloqueados y algunos detalles adicionales.Posteriormente, esta firma y la clave pública de la cual se gastan los bitcoins se agregan al campo de entrada de la transacción. Esto demuestra que el propietario de la clave privada realmente intentó crear la transacción y se asegura de que no se pueda alterar.

Luego, todos estos datos de transacción, incluidas las entradas esta vez, se procesan juntos, lo que crea la identificación de la transacción e identifica la transacción específica. Si posteriormente se incluye una transacción en un bloque, el minero mezcla la ID de transacción junto con otra ID de transacción para producir un nuevo hash. Y este hash vuelve a ser hash, esta vez junto con el hash de otros dos ID de transacción. Este proceso continúa hasta que solo queda un hash. Esta estructura de hashes se llama

Merkle Tree , y el hash restante es Merkle Root . Esta Merkle Root se combina con datos de bloque adicionales para formar el encabezado de bloque , que se utiliza para identificar el bloque específico. Un hash de este encabezado de bloque, finalmente, se debe incluir en el encabezado del siguiente bloque, encadenando bloques juntos. Bitcoin se considera inmutable porque el cambio de cualquier parte de cualquier transacción de forma retroactiva alteraría la identificación de la transacción, alternando el encabezado del bloque. Pero este encabezado de bloque alterado ya no cumpliría con el requisito de prueba de trabajo. Y dado que el encabezado del bloque influye en la composición de los encabezados de bloque subsiguientes, tampoco lo haría ninguno de esos.

¿Qué es un Testigo segregado?

La propuesta de Witregated Witness presentada por Wuille en Hong Kong se basa en un concepto utilizado en los elementos Sidechain de Blockstream y en una idea complementaria del desarrollador de Bitcoin Core, Luke Dashjr. Fue conceptualizado en los últimos meses en cooperación con los desarrolladores de Bitcoin Core, Gregory Maxwell y Eric Lombrozo, y podría extenderse durante el próximo año.

Como tal, desde la perspectiva de los nodos de Bitcoin que

no usan usan Testigo Segregado (llamémoslos "nodos antiguos"), algunas salidas recién creadas podrían usar pronto un tipo extraño de scriptPubKeys. Extraño, porque estas ScriptPubKeys difícilmente pueden considerarse un bloqueo. Comúnmente conocido como "Cualquiera puede gastar", estos ScriptPubKeys básicamente proclaman que no requieren una firma. Además, incluirán algún texto sin sentido. Los nodos antiguos considerarán estas transacciones como locas. Pensarán que cualquiera puede crear un nuevo scriptSig, desbloqueando estos productos, lo que significa que son muy inseguros. Pero, al mismo tiempo, a los nodos antiguos tampoco les importará. Después de todo, no es su bitcoin el que está siendo manipulado, y otras personas son libres de hacer con su bitcoin a su antojo. El texto sin sentido se considerará extraño, pero también está bien. Por lo tanto, confirmarán que las transacciones son válidas y lo reenviarán a otros nodos.

Sin embargo, los nodos habilitados para Testigos segregados (vamos a llamarlos "nuevos nodos") notarán algo más. Verán el texto sin sentido en ScriptPubKey, pero no lo considerarán sin sentido.En cambio, los nuevos nodos reconocerán este fragmento de texto como otro tipo de salida muy especial.

Al igual que las salidas típicas, este nuevo tipo de salida requerirá una o varias firmas para desbloquear el bitcoin. Pero a diferencia de las salidas típicas, este nuevo tipo de salida no requerirá que la firma se incluya en el scriptSig de una transacción posterior. En cambio, requerirá que la firma se incluya en una parte completamente nueva de la transacción: el Testigo Segregado.

Este Testigo Segregado es básicamente un "complemento" que lleva firmas y algunos datos adicionales. Es importante destacar que los testigos segregados son completamente ignorados por los nodos antiguos, pero son reconocidos por los nuevos nodos. Además, los datos que llevan no se procesan junto con las otras partes de una transacción en la ID de la transacción.

Como tal, tanto los nodos antiguos como los nodos nuevos considerarán válidas las transacciones que contienen firmas en el Testigo segregado. Los nodos antiguos los validan porque, desde su punto de vista, estas transacciones no requieren una firma (y no ven una), y los nuevos nodos las validan porque la firma requerida está en el Testigo segregado. Y dado que tanto los nodos antiguos como los nuevos transfieren los datos de transacción a la misma ID de transacción, todos están de acuerdo en la composición de los bloques y, como tal, en la estructura de toda la cadena de bloques.

(Tenga en cuenta que

es importante que todos los mineros, o una gran mayoría, utilicen Testigos segregados para evitar el doble gasto y los tenedores de cadena, o ninguno de ellos debería hacerlo. Si todos los mineros utilizan Testigos segregados, los nodos antiguos en la red podrían preguntarse por qué algunas transacciones no están incluidas en bloques, pero dado que siempre dependía de los mineros decidir qué transacciones incluir, y dado que estas no son sus transacciones, tampoco les importará. .) Pero hay un problema: si las firmas no tienen ningún efecto en la composición de la cadena de bloques, la cadena de bloques ya no sirve como prueba de que se incluyeron las firmas correctas en las transacciones.

Sin embargo, para asegurarse de que las firmas estén integradas en la cadena de bloques, un minero segregado habilitado para Testigos agrega un truco también. En lugar de crear solo un Árbol Merkle de todas las transacciones, también crea un Árbol Merkle de todos los Testigos Segregados, para reflejar el árbol de transacciones. El Segregated Witness Merkle Root, entonces, está incluido en el campo de entrada de la transacción de coinbase. Como tal, Segregated Witness Merkle Root cambia los datos de transacción de la transacción de la base de monedas, su ID de transacción, por lo tanto influye en el encabezado del bloque y, en última instancia, la composición de la cadena de bloques.

La propuesta Withere Witness de Wuille permite que las firmas se eliminen de las transacciones de Bitcoin, mientras se mantiene la inmutabilidad de Bitcoin y sin romper ninguna de las reglas de consenso existentes.

La segunda parte de esta historia de tres partes explorará por qué Segregated Witness es realmente útil.

Gracias a los co-fundadores de

Blockstream Pieter Wuille y Mark Friedenbach, al CEO de Ciphrex Eric Lombrozo, y al CET Blocktrail Ruben de Vries por proporcionar información y comentarios agregados