https://es.bitcoin.it/w/index.php?title=Transacci%C3%B3n&feed=atom&action=historyTransacción - Historial de revisiones2024-03-28T11:44:33ZHistorial de revisiones para esta página en el wikiMediaWiki 1.30.0https://es.bitcoin.it/w/index.php?title=Transacci%C3%B3n&diff=300&oldid=prevNubarius: Traducción de artículo completo de la wiki inglesa2012-12-11T21:52:44Z<p>Traducción de artículo completo de la wiki inglesa</p>
<p><b>Página nueva</b></p><div>[[File:TxBinaryMap.png|thumb|right|Mapa de bytes de las transacciones con cada tipo de entrada y salida TxIn y TxOut]]<br />
Una ''' transacción''' es una sección de datos con firma digital que se transmite a la [[red]] y se almacena en los [[bloque|bloques]]. Este conjunto de datos incluye una referencia a una transacción anterior e indica una cantidad de bitcoins que pasan a estar disponibles para una [[dirección Bitcoin]] de destino. Al igual que el resto de datos que se almacenan en la cadena de bloques, la información no está cifrada.<br />
<br />
Un [[explorador de la cadena de bloques]] es un sitio web en el que se pueden visualizar todas las transacciones incluidas en los bloques. Esto resulta muy útil para ver los detalles técnicos de la transacción y para poder verificar los pagos.<br />
<br />
=== Ejemplo de transacción Bitcoin ===<br />
<br />
==== Datos ====<br />
<br />
<pre>Input:<br />
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6<br />
Index: 0<br />
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10<br />
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501<br />
<br />
Output:<br />
Value: 5000000000<br />
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d<br />
OP_EQUALVERIFY OP_CHECKSIG</pre><br />
<br />
==== Explicación ====<br />
<br />
La entrada (''input'') de esta transacción transfiere 50 BTC desde la salida (''output'') #0 de la transacción f5d8... La salida de esta transacción asigna esos 50 BTC a una dirección Bitcoin (expresada aquí en notación hexadecimal 4043... en lugar del formato base58 habitual). Cuando el receptor quiera gastar esos bitcoins, tendrá que utilizar la salida #0 de esta transacció como entrada de una nueva transacción.<br />
<br />
===== Entrada =====<br />
<br />
Una '''entrada''' (''input'') es una referencia a una salida de otra transacción existente. Cada transacción puede tener múltiples entradas, sumándose los valores de cada salida. El valor total de las entradas es la suma máxima disponible para las salidas. El valor '''Previous tx''' es un [[hash]] de una transacción anterior. '''Index''' es el índice de la salida concreta en la transacción de origen. '''ScriptSig''' es la primera parte de un ''[[script]]'', que se explica más adelante.<br />
<br />
El ''script'' consta de dos componentes: una firma y una clave pública. La clave pública pertenece al propietario de la transacción de origen cuya salida se utiliza como entrada y demuestra que el creador de la transacción está autorizado para gastar la suma de esas salidas de la transacción previa. El otro componente es una firma digital ECDSA (algoritmo de firma digital con curvas elípticas) aplicada a un hash de una versión simplificada de la transacción. Esa firma digital basada en criptografía asimétrica de curvas elípticas, junto a la clave pública, permite verificar que la transacción ha sido generada por el auténtico propietario de la dirección en cuestión (en definitiva, cualquiera que tenga la clave privada con la que se generaron la clave pública y la dirección Bitcoin). Hay además varios parámetros que definen cómo simplificar la transacción y que permiten crear diferentes tipos de pago.<br />
<br />
===== Salida =====<br />
<br />
Una '''salida''' (''output'') contiene las instrucciones para enviar la suma de bitcoins. '''Value''' es el número de ''satoshis'' (1 BTC = 100 000 000 ''satoshis'') que la salida pone a disposición del destinatario. '''ScriptPubKey''' es la segunda mitad de un ''script'' (explicado más adelante). Puede haber más de una salida, de modo que todas ellas se reparten el valor combinado de las entradas. Debido a que una salida solamente puede conectarse a una entrada única, todo el valor neto de las entradas tendrá que enviarse a través de alguna salida si no se desea perderlo. Si, por ejmplo, la entrada es de 50 BTC, pero solamente se desean enviar 25 BTC, se tendrán que crear dos salidas con valor de 25 BTC: uno para el destinatario y otro que vuelva a una dirección del pagador (a estas cantidades que se envían a uno mismo se las denomina "el [[cambio]]"). La diferencia que pueda haber entre la suma de bitcoins de las entradas y las salidas se considerará una [[comisión de transacción]] y se asignará a la direcciñón en la que se genere el bloque que registra la transacción.<br />
[[File:transaction.png|thumb|A envía 100 BTC a C y C genera 50 BTC. C envía 101 BTC a D, y necesita enviarse a sí mismo el cambio. D envía los 101 BTC a otra persona, que aún no los ha gastado (no sale ninguna flecha de su ''output''). Solamente la salida de D (101 BTC) y el cambio que volvió a C (49 BTC) son cantidades disponibles para gastar.]]<br />
<br />
===== Verificación =====<br />
<br />
Para verificar que las entradas tienen autorización para disponer de los valores de las salidas a las que se hace referencia, Bitcoin utiliza un [[script|lenguaje de ''script'']] similar a Forth. El valor ''scriptSig'' de la entrada y la ''referencia'' ''scriptPubKey'' de la salida se evalúan (en ese orden), de modo que ''scriptPubKey'' utiliza los valores que deja ''scriptSig'' en la pila. La entrada se autoriza si ''scriptPubKey'' retorna un valor ''true''. Mediante este sistema de ''script'', el remitente puede crear condiciones sumamente complejas para que se pueda acceder a las cantidades de salida. Por ejemplo, es posible crear una salida que pueda ser gastada por cualquiera sin ningún tipo de autorización. También es posible exigir que una entrada esté firmada por un número arbitrario de claves o que haya que introducir una contraseña en lugar de firmar con una clave privada.<br />
<br />
=== Tipos de transacción ===<br />
Bitcoin actualmente solo crea tres pares diferentes ''scriptSig''/''scriptPubKey'', que se describen a continuación.<br />
<br />
Se pueden diseñar variantes más complejas de transacciones y combinarlas como acuerdos criptográficamente garantizados, a los que se denomina [[contrato]]s.<br />
<br />
==== Transferencia a una dirección IP ====<br />
<br />
scriptPubKey: <pubKey> OP_CHECKSIG<br />
scriptSig: <sig><br />
El remitente obtiene la clave pública al comunicarse con el receptor por IP. Al gastar monedas enviadas a una dirección IP, el receptor solamente presenta una firma, que se coteja con la clave pública de ''scriptPubKey''.<br />
<br />
Proceso de comprobación:<br />
{| class="wikitable" <br />
|-<br />
! Pila <br />
! Script <br />
! Descripción <br />
|-<br />
|Vacío.<br />
|<sig> <pubKey> OP_CHECKSIG<br />
|Se combinan scriptSig y scriptPubKey.<br />
|-<br />
|<sig> <pubKey><br />
| OP_CHECKSIG<br />
|Se añaden constantes a la pila.<br />
|-<br />
|true<br />
|Vacío.<br />
|Se comprueba la firma de los dos elementos superiores de la pila.<br />
|}<br />
<br />
==== Transferencia a una dirección Bitcoin ====<br />
<br />
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG<br />
scriptSig: <sig> <pubKey><br />
Una [[dirección]] Bitcoin es simplemente un valor ''hash'', por lo que el remitente no puede proporcionar una clave pública completa en ''scriptPubKey''. Cuando se gastan bitcoins que han sido recibidos previamente en una dirección Bitcoin, el remitente proporciona tanto la firma como la clave pública. El ''script'' verifica que la clave pública proporcionada tiene el mismo valor ''hash'' que el que aparece en ''scriptPubKey'', y comprueba también la firma con la clave pública.<br />
<br />
Proceso de comprobación:<br />
{| class="wikitable" <br />
|-<br />
! Pila <br />
! Script <br />
! Descripción <br />
|-<br />
|Vacío.<br />
| <sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG <br />
| Se combinan scriptSig y scriptPubKey.<br />
|-<br />
|<sig> <pubKey><br />
| OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG <br />
| Se añaden constantes a la pila.<br />
|-<br />
|<sig> <pubKey> <pubKey><br />
| OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG <br />
| Se duplica el elemento superior de la pila.<br />
|-<br />
|<sig> <pubKey> <pubHashA><br />
|<pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG<br />
| Se obtiene el ''hash'' del elemento superior de la pila.<br />
|-<br />
|<sig> <pubKey> <pubHashA> <pubKeyHash><br />
|OP_EQUALVERIFY OP_CHECKSIG<br />
| Se añade constante.<br />
|-<br />
|<sig> <pubKey><br />
|OP_CHECKSIG<br />
| Se comprueba la igualdad entre los dos elementos superiores de la pila.<br />
|-<br />
|true<br />
|Vacío.<br />
|Se comprueba la firma en los dos elementos superiores de la pila.<br />
|}<br />
<br />
==== Generación ====<br />
<br />
En la generación de nuevos bitcoins como resultado del proceso de minado de un nuevo bloque se crea un tipo de transacción especial que consta de una sola entrada y esta entrada tiene un parámetro "coinbase" en lugar de un ''scriptSig''. Los datos de "coinbase" pueden ser cualquier cosa, ya que no se usa. El programa cliente original de Bitcoin pone ahí el [[objetivo]] actual en formato compacto y el número de precisión arbitraria "extraNonce", que se incrementa cada vez que se sale de rango el campo Nonce del [[Algoritmo_de_hash_de_bloques|encabezado de bloque]]. Las salidas pueden ser también cualquier cosa a efectos del protocolo de red, pero Bitcoin crea una exactamente igual que las de las transacciones IP.<br />
<br />
== Véase también ==<br />
<br />
* [[Script]]<br />
* [[BTC Sender]] Transmite transacciones escritas a mano.<br />
<br />
[[Categoría:Técnica]]<br />
[[Categoría:Vocabulario]]<br />
[[de:Transaktion]]<br />
[[en:Transactions]]<br />
[[pl:Transakcje]]</div>Nubarius