>> Clave privada, pública y dirección
Donar BitcoinConstruye una transacción Bitcoin paso a paso. Empezamos seleccionando un UTXO P2WPKH (bc1q) que queremos gastar. Instrucciones de uso y seguridad
Una transacción Bitcoin no empieza indicando simplemente una cantidad. Primero debemos elegir una salida no gastada (UTXO) de una transacción anterior. Para identificarla necesitamos su TXID y el índice de salida (vout).
El TXID y el vout se enviarán a mempool.space para verificarlos (la dirección de destino y las claves nunca se envían).
Esta salida pertenece a la transacción anterior y, al estar sin gastar, puede utilizarse como input de nuestra nueva transacción.
El output indicado ya fue utilizado como input de otra transacción. Por tanto, ya no es un UTXO y no puede volver a utilizarse en una nueva transacción.
La transacción anterior creó una salida con una cantidad de satoshis y una condición de gasto. Mientras esa salida no se haya gastado, es un UTXO. Nuestra nueva transacción hará referencia a ese UTXO mediante TXID + vout.
Nos centramos en direcciones bc1q, y aceptamos únicamente outputs P2WPKH / SegWit nativo.
Ahora indicamos a qué dirección bc1q queremos enviar los satoshis y qué cantidad queremos enviar. ClaveBit convertirá localmente la dirección Bech32 en su witness program y construirá el scriptPubKey del output.
Este output representa lo que queremos que reciba la dirección destino. Todavía no hemos calculado la comisión ni el cambio.
El input indica qué UTXO anterior vamos a gastar. ClaveBit utiliza automáticamente el TXID y el vout obtenidos en el paso 1. Esta transacción se construirá con RBF activado, para poder reemplazarla posteriormente por otra con una comisión mayor si fuera necesario.
Activado
Este input todavía no está firmado. La firma y el witness se añadirán en pasos posteriores.
El UTXO que gastamos vale más que la cantidad que enviamos. La diferencia se reparte entre la comisión que cobran los mineros y una salida de cambio (vuelta) que vuelve a una dirección tuya.
El tamaño se estima para 1 input P2WPKH firmado (≈68 vB) más el overhead de la transacción (≈10,5 vB) y 1 o 2 salidas P2WPKH (≈31 vB cada una), siguiendo la fórmula estándar de tamaño virtual (vsize) de Bitcoin.
Con el input y los outputs ya definidos, se puede construir la transacción
completa en formato binario (hexadecimal): versión, lista de inputs, lista
de outputs y locktime. El scriptSig del input todavía va vacío
porque esta transacción aún no está firmada — eso se hará en el
siguiente paso, añadiendo el witness.
Formato: versión (4 B, little-endian) · nº de inputs (compactSize) · por cada input: txid invertido (32 B) + vout (4 B LE) + longitud de scriptSig (0x00) + sequence (4 B) · nº de outputs (compactSize) · por cada output: valor en sats (8 B LE) + longitud de scriptPubKey + scriptPubKey · locktime (4 B).
En una transacción SegWit no se firma el hexadecimal completo, sino un
resumen (sighash) definido en el BIP143. Este resumen compromete
los inputs, los outputs, el valor del UTXO que se gasta y el
scriptCode, de modo que la firma no puede reutilizarse para
otra transacción. Aquí calculamos ese resumen con
SIGHASH_ALL; en el siguiente paso se firmará con la clave privada.
Preimage: versión (4 B) · hashPrevouts · hashSequence · outpoint (txid
invertido + vout) · scriptCode · valor del UTXO (8 B LE) · sequence ·
hashOutputs · locktime · tipo de sighash (01000000). Los tres
hashes son SHA-256 doble, y el sighash final también.
Se firma el sighash con ECDSA (secp256k1, nonce determinista RFC 6979, s bajo),
se codifica la firma en DER + 01 (SIGHASH_ALL) y se construye el
witness [firma, clave pública]. La clave privada puede indicarse en
formato WIF (el que exportan las carteras) o en hex (los 32 bytes en bruto).
Se usa solo en tu navegador y no se envía ni se guarda.