1. Antecedentes de Bitcoin

Bitcoin adopta un modelo de transacción similar al efectivo (sistema de efectivo) y su método de pago se basa en un modelo llamado UTXO, que es diferente del modelo tradicional basado en el saldo de la cuenta. Por ejemplo: en el proceso del modelo de contabilidad de cuentas del banco, cuando A transfiere 100 yuanes a B, el banco registrará tres pasos, que constituyen un proceso de transacción. El primer paso es deducir 100 yuanes de la cuenta de A. El ID de registro de este paso es tid1. El segundo paso es depositar 100 yuanes en la cuenta de B. El ID de registro de este paso es tid2. El tercer paso es registrar un registro de transferencia, que vincula tid1 y tid2, lo que indica que la cuenta A disminuye en 100 yuanes y la cuenta B aumenta en 100 yuanes. De esta manera, la relación de transferencia entre A y B queda registrada y puede consultarse y rastrearse en el futuro. Ahora, explicaremos el método de pago de Bitcoin mediante la introducción de UTXO y el modelo de pago.

UTXO

En la cadena de bloques de Bitcoin, todos los saldos se almacenan en una lista llamada "Salida de transacciones no gastadas" (UTXO). Cada UTXO contiene una determinada cantidad de Bitcoins, así como información sobre los propietarios de estos Bitcoins, e indica si están disponibles. Piense en ello como un cheque en efectivo con el nombre del titular y, siempre que el titular lo firme, los derechos de uso pueden transferirse a otra persona. Para una dirección específica, la suma de todos los montos de UTXO es el saldo de la billetera de la dirección. Al recorrer todos los UTXO, podemos obtener el saldo actual de cada dirección. Sume la cantidad total de todos los UTXO para obtener todos los Bitcoins actualmente en circulación.

En la estructura de transacciones de Bitcoin, cada transacción incluye varias entradas y salidas, donde cada entrada es una referencia a una UTXO existente, y cada salida especifica una nueva dirección de recepción de fondos y el monto correspondiente. Una vez que se inicia una transacción, el UTXO al que hace referencia su parte de entrada se bloquea temporalmente para evitar su reutilización hasta que se complete la transacción. Solo cuando los mineros empaqueten con éxito la transacción en un bloque y la red la confirme, el estado UTXO relacionado cambiará. Específicamente, los UTXO utilizados como entradas a la transacción se eliminarán de la lista de UTXO, lo que indica que se han consumido, mientras que las salidas de la transacción generarán nuevos UTXO y se agregarán a la lista de UTXO. Se puede entender que después de utilizar el cheque de caja antiguo, éste deja de ser válido y se genera un nuevo cheque de caja, cuya propiedad pertenece al nuevo titular.

Vale la pena enfatizar que cada UTXO solo puede usarse una vez en una transacción. Una vez que se consume como entrada, se elimina permanentemente de la lista UTXO. Al mismo tiempo, la salida recién generada se agrega a la lista como un nuevo UTXO. La lista de UTXO cambia constantemente y, a medida que se crea cada nuevo bloque, se actualiza en consecuencia. Y, al analizar el historial de transacciones en la cadena de bloques, podemos reconstruir el estado de la lista UTXO en cualquier momento dado.

Además, el monto total de entrada de una transacción generalmente excederá ligeramente su monto total de salida. Esta diferencia, denominada tarifa de transacción o tarifa de red, se otorga como incentivo a los mineros responsables de empaquetar las transacciones en bloques. El tamaño de la tarifa de red es proporcional a la complejidad de la transacción, por lo que una transacción con más entradas y salidas generalmente requerirá una tarifa de red más alta.

Ahora, para comprender más vívidamente la estructura de transacciones de Bitcoin, realizaremos un análisis en profundidad a través de un ejemplo específico. La estructura de transacción de Bitcoin es la siguiente, donde las dos variables vin y vout representan la "entrada" y la "salida" de la transacción de Bitcoin, respectivamente. Las transacciones de Bitcoin no registran cambios de datos en forma de cuenta como el modelo tradicional de saldo de cuenta, sino que están representadas por entradas y salidas.

const std::vector<CTxIn> vin;const std::vector<CTxOut> vout;const int32_t nVersion;const uint32_t nLockTime;

Podemos seleccionar aleatoriamente un registro de transacción en blockchain.com para analizar. La siguiente figura muestra la transacción con Hash ID 0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2. Contiene una entrada y dos salidas.

Al utilizar los comandos bitcoin-cli getrawtransaction y decoderrawtransaction, podemos ver la estructura subyacente de la transacción anterior:

{"version": 1,"locktime": 0,"vin": [{"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18","vout": 0,"scriptSig" : "3045022100884d142d86652 a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[TODOS] 0484ecc0d46f1918b3 0928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf","sequence": 4294967295 }],"vout": [{"value": 0.01500000,"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"},{"value": 0.08450000,"scriptPubKey": "OP_D ARRIBA OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",}]}

En la red Bitcoin, el resultado de la transacción contiene dos datos importantes: la dirección (hash de clave pública) y la cantidad (en Bitcoins). Si el resultado de una transacción no se utiliza en la entrada de otras transacciones, entonces el resultado de la transacción se denomina resultado de transacción no gastada (UTXO). Quien posee la clave privada correspondiente a la clave pública en UTXO tiene derecho a usar (es decir, gastar) este UTXO.

Observemos la información en "vin" en el código anterior, que indica que el UTXO gastado por esta transacción proviene de la salida 0 (la salida de una transacción puede tener múltiples, el índice es del número inicial 0), podemos encontrar el cantidad de este UTXO de transacciones históricas (por ejemplo, 0.1), por lo que en esta transacción, el usuario gastó 0.1 BTC, y el valor 0.1 no necesita escribirse explícitamente en la transacción, pero a través de la búsqueda se obtiene información de UTXO. El "vout" de esta transacción tiene dos salidas, estas dos salidas son dos nuevos UTXO, correspondientes al nuevo saldo y titular, hasta que otra transacción los consuma como entrada.

Modelo de pago

Para comprender mejor el modelo de pago de la red Bitcoin, utilizamos un ejemplo para presentar el proceso de pago en el que A paga a B una cantidad de n Bitcoins. La siguiente figura muestra el proceso en el que el usuario A envía 3 Bitcoins al usuario B.

  1. Para el usuario A, en primer lugar, es necesario determinar el conjunto de todos los UTXO que posee, es decir, todos los Bitcoins que el usuario A puede controlar;

  2. A selecciona uno o más UTXO de este conjunto como entrada de la transacción. La suma de las cantidades de estas entradas es m (2+0.8+0.5=3.3 BTC), que es mayor que la cantidad a pagar n (3 BTC );

  3. El usuario A establece dos salidas para la transacción, una salida se paga a la dirección de B, la cantidad es n (3 BTC) y la otra salida se paga a la propia dirección de cambio de A, la cantidad es m-n-tarifa (3.3-3-0.001 = 0,299 BTC). La billetera de un usuario generalmente consta de varias direcciones. Generalmente, cada dirección solo se usa una vez y el cambio se devuelve a una nueva dirección de forma predeterminada;

  4. Después de que el minero empaqueta la transacción y la carga en la cadena para su confirmación, B puede recibir la información de la transacción. Debido a que el tamaño del bloque tiene un límite superior (aproximadamente 1 MB), los mineros darán prioridad a las transacciones con tasas de transacción altas (fee_rate=tarifa/tamaño) para obtener los retornos de tarifa más altos. Podemos ver la situación de las tarifas de transacción minera en tiempo real en mempool. Si queremos la confirmación más rápida durante el proceso de transferencia, podemos elegir Alta Prioridad o personalizar una tasa de transacción adecuada;

2. Numeración y seguimiento de cong

El número total de Bitcoins es 21 millones y cada Bitcoin contiene 10^8 Satoshi (Satoshi, Sat). Por lo tanto, hay un total de 21 millones*10^8 satoshis en la red Bitcoin. El protocolo Ordinals distingue estos satoshis y le da a cada satoshi un número único. Esta sección presentará cómo este protocolo numera de forma única a cada Satoshi y cómo rastrea la cuenta a la que pertenece. Además, también se introducirá la clasificación de rareza de Satoshi.

El numero de Satoshi.

Según el protocolo Ordinals, los satoshis se numeran según el orden en que se extraen. La siguiente figura muestra la representación del 0.º satoshi minado en el 0.º bloque.

Hay muchas formas de expresar Satoshi:

  • Símbolo entero: Por ejemplo, 2099994106992659, que representa el número de serie asignado al satoshi según el orden de minado.

  • Notación decimal: por ejemplo, 3891094.16797, el primer número indica la altura del bloque donde se extrajo el satoshi y el segundo número indica el número de satoshi en el bloque.

  • Símbolo de grado: por ejemplo, 3°111094′214″16797‴, el primer número es el período, numerado a partir de 0, el segundo número es el índice de bloque de la época de reducción a la mitad y el tercer número es el índice de bloque durante la dificultad. período de ajuste, el último número es el índice de sat en el bloque.

  • Símbolo de porcentaje: por ejemplo, 99,99971949060254% indica la posición del Satoshi en el suministro de Bitcoin, expresada como porcentaje.

  • Nombre: Por ejemplo Satoshi. Un nombre que codifica el número de secuencia utilizando los caracteres de la a a la z.

Usaremos un ejemplo para explicar cómo numerar los Bitcoins recién extraídos. Al observar el bloque 795952 de la cadena de bloques de Bitcoin, podemos ver que la primera transacción Tx 3a1f...b177 registra la recompensa del minero (transacción coinbase). Esta transacción incluye los Bitcoins recién extraídos, que se utilizan como paquetes de recompensas para los mineros, así como las tarifas de gestión pagadas a los mineros por el iniciador de la transacción. Al observar la entrada en la figura siguiente, podemos encontrar que su identificación UTXO consta de una cadena de 0 y la altura del bloque. La dirección de salida es la dirección de la billetera del minero y el monto es la suma de las recompensas y tarifas de manejo anteriores.

Si analizamos más a fondo la salida a los mineros, podemos ver la distribución de direcciones, cantidades y satoshis contenidos. Como se mencionó anteriormente, estos incluyen recompensas y tarifas mineras. Entre ellos, la información del número de sats verde 1941220000000000–1941220625000000 es el nuevo satoshi generado por la recompensa minera, y los 712 registros satoshi restantes corresponden a todas las tarifas de manejo en el bloque.

Podemos verificar el número Sat 1941220000000000. Su número de bloque es 795952 y la notación decimal (decimal) es 795952.0, lo que significa que la altura del bloque para extraer este Satoshi es 795952, el número de Satoshi en este bloque es 0 y la marca de rareza posterior (rareza) es poco común. Esto se explicará en detalle en una sección posterior.

La circulación de Cong

Debido a que cada BTC se genera a través de recompensas mineras, todos son rastreables. Las cuentas Bitcoin utilizan el modelo UTXO. Supongamos que el usuario A obtiene el satoshi número 100-110 mediante la minería (10 satoshis se almacenan en su conjunto en el mismo UTXO con el ID adc123). Cuando el usuario A quiere pagar 5 satoshis al usuario B, elige usar el ID abc123 como entrada de la transacción, de los cuales 5 satoshis se entregan al usuario B y 5 satoshis se devuelven al usuario A como cambio. Estas dos copias de 5 satoshis son un todo y están almacenadas en dos UTXO con ID abc456 y abc789 respectivamente. La identificación de UTXO anterior y la cantidad de satoshis se muestran solo como ejemplos. En situaciones reales, la cantidad mínima de satoshis enviados está limitada a 546 y la identificación de UTXO no se expresa de esta forma.

En la transacción anterior, la ruta de circulación de los 10 satoshis del usuario A es:

  1. La minería produce 10 satoshis, numerados [100, 110). Significa que los satoshis del 100 al 109 se almacenan en el UTXO con el id abc123 y su propietario es el usuario A.

  2. Cuando A transfiere dinero, 10 satoshis se dividen en dos partes, cada una con 5 satoshis. Aquí se utiliza el principio de "primero en entrar, primero en salir", es decir, el orden numérico de los satoshis se determina de acuerdo con su índice en la salida de la transacción. Supongamos que el orden de salida es primero el usuario A, luego el usuario B, luego el número de serie de los 5 satoshis restantes del usuario A es [100, 105), almacenado en el UTXO con ID abc456, y el número de serie de los 5 satoshis del usuario B es [105, 110), almacenado en el UTXO con id abc789.

Rareza (Raro Satoshi)

Como resultado del protocolo Ordinals, la rareza de los satoshis se puede definir en función del orden en que se extraen. Esto dará como resultado que algunos satoshis especiales tengan diferentes rarezas. Aquí están los niveles de rareza de los diferentes Satoshis:

  • común: cualquier satoshi excepto el primer satoshi del bloque (la oferta total es de 2100 billones)

  • poco común: primer satoshi en cada bloque (la oferta total es 6.929.999)

  • raro: primer satoshi en cada período de ajuste de dificultad (suministro total 3437)

  • Épico: el primer satoshi después de cada reducción a la mitad (el suministro total es 32)

  • legendario: el primer satoshi de cada ciclo (el suministro total es 5)

  • mítico: el primer satoshi en el bloque génesis (el suministro total es 1)

Este concepto de satoshis raros puede agregar más interés y valor al ecosistema de Bitcoin. Los satoshis de diferentes rarezas pueden tener diferentes valores en el mercado, lo que atrae a coleccionistas e inversores.

3. Método de inscripción

Los ordinales son significativamente diferentes de los NFT en otras cadenas que no son de Bitcoin. La principal diferencia es que los metadatos de Ordinals no se almacenan en una ubicación específica. En cambio, estos metadatos están incrustados en los datos testigo de la transacción (datos testigo, campo testigo), por lo que los llamamos "inscripción" porque estos datos están "grabados" en Bitcoin como una inscripción. En una parte específica de la transacción, los datos están adjuntos a un Satoshi específico. Este proceso de inscripción se implementa a través de Segregated Witness (SegWit) y Pay-to-Taproot (P2TR), que incluye dos etapas: confirmar y revelar, en las que se puede inscribir cualquier forma de contenido (como texto, imágenes o videos) en el sitio designado. Satoshi. A continuación presentaremos otro método de almacenamiento más directo, OP_RETURN, y explicaremos por qué no se utiliza como medio de inscripción. Al mismo tiempo, presentaremos qué son Segregated Witness y Pay-to-Taproot, y qué roles desempeñan en Inscription. Finalmente introduciremos el método de inscripción.

OP_RETURA

En la versión 0.9 del cliente Bitcoin Core, el compromiso finalmente se logró mediante la adopción del operador RETURN. **RETURN permite a los desarrolladores agregar 80 bytes de datos de falta de pago al resultado de la transacción. **A diferencia de los pseudopagos, RETURN crea una salida no consumible explícitamente verificable que no necesita almacenarse en un conjunto UTXO. Las salidas RETURN se registran en la cadena de bloques. Consumen espacio en disco y aumentan el tamaño de la cadena de bloques. Sin embargo, no se almacenan en el conjunto UTXO, por lo que no expandirán el grupo de memoria UTXO y no aumentarán el número de nodos completos. Costos de memoria costosos.

Si bien OP_RETURN es un medio muy sencillo de almacenar información en la cadena de bloques de Bitcoin, también es un método potencial de inscripción. Pero las limitaciones de OP_RETURN hacen que enfrente algunos desafíos cuando se trata de almacenamiento de metadatos. En primer lugar, OP_RETURN solo puede almacenar 80 bytes de datos. Para situaciones en las que es necesario almacenar una mayor cantidad de datos, esta limitación es obviamente insatisfactoria. En segundo lugar, los datos OP_RETURN se almacenan en la parte de salida de la transacción y, aunque estos datos no se almacenan en el conjunto UTXO, ocupan el espacio de almacenamiento de la cadena de bloques, lo que aumenta el tamaño de la cadena de bloques. Finalmente, usar OP_RETURN genera tarifas de transacción más altas porque requiere pagar más para publicar estas transacciones.

Testigo segregado

Por el contrario, el nuevo método proporcionado por SegWit puede superar los problemas anteriores. SegWit es una importante actualización del protocolo para Bitcoin, propuesta por el desarrollador principal de Bitcoin, Pieter Wuille, en 2015 y finalmente adoptada oficialmente en la versión 0.16.0 en 2017. Segregado en Testigo segregado significa separación y aislamiento. El testigo es una firma relacionada con una transacción. Por lo tanto, SegWit separa ciertos datos de firma de transacción (datos de testigos) de la transacción.

El principal beneficio de separar las firmas de los datos relacionados con las transacciones es reducir el tamaño de los datos almacenados en un bloque de Bitcoin. Esto tiene capacidad adicional por bloque para almacenar más transacciones, lo que también significa que la red puede manejar más transacciones y los remitentes pagan tarifas más bajas. Técnicamente hablando, significa sacar la información de la firma del script (scriptSig) de la estructura básica (bloque base) y colocarla en una nueva estructura de datos. Los nodos y mineros que realizan el trabajo de verificación también verificarán la firma del script en esta nueva estructura de datos para garantizar que la transacción sea válida. La actualización de Segwit introduce un nuevo campo testigo en los resultados de las transacciones para garantizar la privacidad y el rendimiento. Si bien los datos de los testigos no están diseñados para el almacenamiento de datos, en realidad nos brindan la oportunidad de almacenar cosas como metadatos de inscripción. Usamos la siguiente figura para comprender más vívidamente el Testigo Segregado:

Raíz principal

P2TR es un tipo de salida de transacción de Bitcoin que se introdujo en la actualización de Taproot en 2021, que permite almacenar diferentes condiciones de transacción en la cadena de bloques de manera más privada. En la inscripción de Ordinals, P2TR juega un papel vital. Básicamente, la inscripción incorpora contenido de datos específicos en las transacciones de Bitcoin, y las actualizaciones de Taproot, especialmente P2TR, hacen que esta incorporación de datos sea más flexible y económica.

En primer lugar, debido a la forma en que se almacenan los scripts Taproot, podemos almacenar el contenido de la inscripción en los scripts de gastos de ruta del script Taproot, que casi no tienen restricciones en el contenido, al mismo tiempo que recibimos descuentos en los datos de los testigos, lo que hace que almacenar el contenido de la inscripción sea relativamente económico. Dado que el consumo de scripts de Taproot solo se puede realizar desde la salida de Taproot ya existente, Inscription utiliza un proceso de confirmación/revelación de dos etapas. Primero, en la transacción de confirmación, se crea una salida Taproot que promete un script que contiene el contenido de la inscripción. Luego, en una transacción de revelación, se consume la salida creada por la transacción de confirmación, revelando así el contenido de la inscripción en la cadena.

Este enfoque reduce en gran medida el consumo de recursos. Si no se utiliza P2TR, la información del testigo se almacenará en el resultado de la transacción. De esta forma, mientras no se consuma esta salida, la información del testigo siempre se almacenará en el conjunto UTXO. Por el contrario, si se utiliza P2TR, la información del testigo no aparecerá en la transacción generada durante la fase de confirmación, por lo que no se escribirá en el conjunto UTXO. Solo cuando se consuma este UTXO aparecerá la información del testigo en la entrada de la transacción durante la fase de revelación. P2TR permite escribir metadatos en la cadena de bloques de Bitcoin, pero nunca aparece en el conjunto UTXO. Dado que mantener/modificar el conjunto UTXO requiere más recursos, este enfoque puede ahorrar muchos recursos.

inscripción

El protocolo Ordinals aprovecha SegWit para relajar el límite de tamaño del contenido escrito en la red Bitcoin, almacenando el contenido de la inscripción en los datos del testigo. Permitiéndole almacenar hasta 4 MB de metadatos. Taproot facilita el almacenamiento de datos de testigos arbitrarios en transacciones de Bitcoin, lo que permite al desarrollador de Ordinals, Casey Rodarmor, reutilizar códigos de operación antiguos (OP_FALSE, OP_IF, OP_PUSH) en lo que él describe como "sobres" para lo que él llama almacenamiento de "inscripción" de datos arbitrarios.

El proceso de fundición de inscripciones consta de los dos pasos siguientes:

  1. Primero, debe crear una transacción de confirmación en la salida Taproot del script que contiene el contenido de la inscripción. El formato de almacenamiento es Taproot, es decir, la salida de la transacción anterior es P2TR (Pay-To-Taproot), y la entrada de la siguiente transacción está incrustada en un formato específico en el script Taproot presenciado; primero, la cadena ord es empujado a la pila, para eliminar la ambigüedad de que la inscripción tenía otros usos. OP_PUSH 1 indica que el siguiente envío contiene el tipo de contenido y OP_PUSH 0 indica que los envíos de datos posteriores contienen el contenido en sí. Las inscripciones grandes deben utilizar múltiples envíos de datos porque una de las pocas limitaciones de taproot es que un único envío de datos no puede tener más de 520 bytes. En este momento, los datos de inscripción se han asignado al UTXO del resultado de la transacción, pero no se han hecho públicos.

  2. En segundo lugar, el resultado creado por la transacción de confirmación debe consumirse en la transacción de revelación. En esta etapa, se inicia una transacción utilizando como entrada el UTXO correspondiente a esa inscripción. En ese momento, el contenido de la inscripción correspondiente se hizo público en todo Internet.

A través de los dos pasos anteriores, el contenido de la inscripción se ha vinculado al UTXO inscrito. De acuerdo con el posicionamiento de Satoshi presentado anteriormente, la inscripción se realiza en el primer Satoshi correspondiente a la entrada UTXO y el contenido de la inscripción se incluye en la entrada de la transacción mostrada. De acuerdo con la introducción a la circulación y seguimiento de satoshis presentada anteriormente, estos satoshis grabados con contenido especial pueden transferirse, comprarse, venderse, perderse y recuperarse. Cabe señalar que no se permiten inscripciones repetidas, de lo contrario las inscripciones posteriores no serán válidas.

Explicaremos este proceso en detalle mediante el ejemplo de grabar una pequeña imagen BTC NFT. Este proceso incluye principalmente las dos etapas de confirmación y revelación mencionadas anteriormente. Primero, vemos que el ID de hash de la primera transacción es 2ddf9...f585c. Se puede observar que el resultado de esta transacción no contiene datos de testigos y no hay información de inscripción relevante en la página web.

A continuación, verificamos el registro de la segunda etapa, cuyo Hash ID es e7454...7c0e1. Aquí podemos ver la información de la inscripción Ordinales, que es el contenido de la inscripción del testimonio. La dirección de entrada de esta transacción es la dirección de salida de la transacción anterior, y la salida 0.00000546BTC (546 Satoshi) es para enviar este NFT a su propia dirección. Al mismo tiempo, también podemos encontrar el satoshi donde se encuentra esta inscripción en Sat 1893640468329373.

En la billetera Bitcoin podemos ver este activo. Si queremos comercializar este NFT, podemos enviarlo directamente a direcciones de otras personas, es decir, enviar este UTXO, completando así la transferencia de la inscripción.

4. Billetera Bitcoin

Una vez que comprendamos qué es la ecología de los ordinales, la circulación de satoshis y el conocimiento relacionado de las inscripciones, actualmente existen muchos escenarios de aplicación, ya sea el surgimiento de BRC-20, ORC-20, BRC-721, GBRC-721 y otros protocolos derivados relacionados, que requieren que tengamos billeteras correspondientes para admitir y mostrar información de tokens o imágenes pequeñas de NFT. En esta sección presentaremos los conceptos y características de diferentes direcciones de billetera Bitcoin.

Las direcciones de Bitcoin comienzan con 1, 3 o bc1. Al igual que las direcciones de correo electrónico, se pueden compartir con otros usuarios de Bitcoin que pueden utilizarlas para enviar Bitcoin directamente a sus propias billeteras. Desde una perspectiva de seguridad, las direcciones de Bitcoin no contienen nada confidencial. Se puede publicar en cualquier lugar sin comprometer la seguridad de su cuenta. A diferencia de las direcciones de correo electrónico, se pueden crear nuevas direcciones en cualquier momento según sea necesario, y todas ellas depositarán fondos directamente en su billetera. De hecho, muchas billeteras modernas crean automáticamente una nueva dirección para cada transacción para maximizar la privacidad. Una billetera es simplemente una colección de direcciones y claves que desbloquean los fondos que contiene. Primero necesitamos saber cómo se genera la dirección de la billetera Bitcoin.

Claves públicas y privadas de Bitcoin

Bitcoin utiliza la curva elíptica Secp256k1. La "clave privada" es un número aleatorio entre 1 y n-1. n es un número grande (256 bits). n se expresa en notación científica de la siguiente manera:

Este rango es extremadamente grande y es casi imposible para nosotros adivinar las claves privadas de otras personas. Esta clave privada entera aleatoria se puede representar con 256 bits y existen múltiples métodos de codificación. Si la clave privada en forma WIF o comprimida WIF no está cifrada, se puede obtener el "entero aleatorio" original decodificandola. Otra forma es BIP38, que propone utilizar el algoritmo AES para cifrar la clave privada. La clave privada obtenida mediante este método comienza con el carácter 6P. Este tipo de clave privada debe ingresar una contraseña antes de poder importarse a varias billeteras Bitcoin. Esto es lo que hacemos habitualmente: claves privadas de uso común.

Luego usaremos la fórmula de curva elíptica K = kG para generar la clave pública de Bitcoin K a partir de la clave privada K. G es el punto base, que es un parámetro de secp256k1. Se pueden obtener las dos coordenadas de K, que son las dos expresiones de la clave pública, a saber, "formato sin comprimir" y "formato comprimido".

  • La forma sin comprimir consiste en conectar directamente las dos coordenadas xey y luego agregar un prefijo 0x04 al frente;

  • La forma comprimida significa que cuando y es un número par, el código es 02 x, y cuando y es un número impar, el código es 03 x;

Dirección de Bitcoin

En la siguiente figura se muestran varios tipos de direcciones de Bitcoin y existen cuatro métodos de representación:

Referencia: https://en.bitcoin.it/wiki/Invoice_address

1. Formato heredado (P2PKH)

Ejemplo: 1Fh7ajXabJBpZPZw8bjD3QU4CuQ3pRty9u

Las direcciones que comienzan con "1" son el formato de dirección original de Bitcoin y todavía se utilizan en la actualidad. Se obtiene mediante cálculo Hash de la clave pública, también conocido como P2PKH, que es la abreviatura de Pay To PubKey Hash (pago a hash de clave pública).

2. Formato SegWit anidado (P2SH)

Ejemplo: 3KF9nXowQ4asSGxRRzeiTpDjMuwM2nypAN

La dirección comienza con "3" y P2SH es la abreviatura de Pay To Script Hash, que admite funciones más complejas que las direcciones heredadas. P2SH anidado, toma la dirección P2SH existente (que comienza con "3") y la encapsula con la dirección SegWit.

3. Formato nativo SegWit (Bech32)

Ejemplo: bc1qf3uwcxaz779nxedw0wry89v9cjh9w2xylnmqc3

Las direcciones que comienzan con bc1 se proponen en BIP0173, que son direcciones SegWit nativas. La dirección codificada Bech32 es un formato de dirección especialmente desarrollado para SegWit. Bech32 se definió en BIP173 a finales de 2017. Una de las características principales de este formato es que no distingue entre mayúsculas y minúsculas (la dirección solo contiene 0-9, a-z), por lo que puede evitar eficazmente confusiones al ingresar y es más legible. . Dado que se requieren menos caracteres en la dirección, la dirección utiliza codificación Base32 en lugar de la tradicional Base58, lo que hace que los cálculos sean más convenientes y eficientes. Los datos se pueden almacenar de forma más precisa en códigos QR. Bech32 proporciona mayor seguridad, código de detección de errores de suma de comprobación mejor optimizado y minimiza la posibilidad de direcciones no válidas.

Las propias direcciones Bech32 son compatibles con SegWit. No se requiere espacio adicional para colocar la dirección SegWit en la dirección P2SH, por lo que al usar la dirección en formato Bech32, la tarifa de manejo será menor. Las direcciones Bech32 tienen varias ventajas sobre las direcciones Base58 más antiguas (la codificación Base58Check se utiliza para codificar matrices de bytes en Bitcoin en cadenas codificables por humanos): los códigos QR son más pequeños; mejor a prueba de errores; más seguros; mayúsculas y minúsculas indistinguibles; constan solo de letras minúsculas , para que sea más fácil de leer, escribir y comprender.

4. Formato de raíz principal (P2TR)

Bech32 tiene un inconveniente: si el último carácter de una dirección es p, insertar o eliminar cualquier número de caracteres q inmediatamente antes de p no invalidará su suma de verificación.

Para aliviar las deficiencias anteriores de Bech32, se propuso la dirección Bech32m en BIP0350:

  • Para direcciones SegWit nativas de la versión 0, utilice Bech32 anterior;

  • Para direcciones SegWit nativas de la versión 1 (o superior), se utiliza el nuevo Bech32m.

Para las direcciones Bech32m, cuando la versión es 1, siempre comienzan con bc1p (es decir, direcciones Taproot). Específicamente, al igual que el SegWit nativo, una billetera puede estar compuesta por una frase inicial y una frase de contraseña. Se utilizan para generar claves públicas y privadas extendidas que se utilizan para derivar direcciones para rutas arbitrarias en una billetera determinista jerárquica. Almacena principalmente BRC-20 y BTC NFT, etc.