¿Cuál es el tamaño (bytes) de una transacción simple de Ethereum frente a una transacción de Bitcoin?

Alice tiene una billetera Ethereum vacía. Recibe 1 ETH y luego envía 1 ETH a Bob.

Alice tiene una billetera de Bitcoin vacía. Recibe 1 BTC y luego envía 1 BTC a Bob.

¿Cuáles son los tamaños de transacción en bytes (Alice->Bob) en ambos casos? Si Ethereum es más bajo, ¿es esa la razón principal por la que Ethereum puede hacer más tx/seg que bitcoin?

Respuestas (2)

Esta publicación contiene varias preguntas. Vamos a abordarlos uno por uno.

Antes de responder a las preguntas, hay un error en la suposición de la publicación: no considera las tarifas de transacción. Si Alice tiene un Ether o un BTC, Bob no podrá recibir el monto total (tal vez podría, en los días de cero tarifas de transacción para BTC, pero ciertamente no ahora), ya que las tarifas de transacción deben deducirse de la cuenta de Alice.

Tamaño de una transacción simple de Ethereum

Del papel amarillo de Ethereum , sabemos que la estructura lógica de una transacción es la siguiente.

-----------------------------
| Nonce    | Up to 32 bytes |
-----------------------------
| GasPrice | Up to 32 bytes |
-----------------------------
| GasLimit | Up to 32 bytes |
-----------------------------
| To       | 20 bytes addr  |
-----------------------------
| Value    | Up to 32 bytes |
-----------------------------
| Data     | 0 - unlimited  |
-----------------------------
| V        | 1 (usually)    |
-----------------------------
| R        | 32 bytes       |
-----------------------------
| S        | 32 bytes       |
-----------------------------

Nota:

  1. Esta es sólo la estructura lógica. Los datos reales están codificados en formato RLP , por lo que son más largos debido al prefijo de longitud agregado.

  2. El campo V siempre fue de 1 byte antes de EIP-155 . Probablemente sea seguro decir que todos los clientes importantes han implementado EIP-155. Para la red principal, red de prueba, este campo permanece como 1 byte incluso con EIP-155. Para redes privadas con "ID de cadena" de valores más grandes, este campo puede ser mucho más largo. Ver esta pregunta .

Podríamos usar datos ridículos para dar un tamaño "mínimo" teórico, por ejemplo, dando un precio de gasolina cero. Sin embargo, eso no es muy significativo ya que tales transacciones no podrían ser extraídas en estos días. En su lugar, usamos esta transacción como muestra para el análisis, ya que es un pago de Alice-to-Bob realmente simple.

Desde la consola web3, ejecute lo siguiente (según el cliente, es posible que deba usar 'eth.getRawTransaction' en su lugar)

eth.getTransaction(''0x14a298c1eea89f42285948b7d51eeac2876ca7406c9784b9b90dd3591d156d64').raw

esto debería dar

"0xf86b80850ba43b7400825208947917bc33eea648809c285607579c9919fb864f8f8703baf82d03a0008025a0067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46a069b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69"

que es de 109 bytes. Si analizamos los datos

f86b length 80 nonce (0: this is the minimum an account can have) 85 0ba43b7400 gas price 82 5208 gas limit (this is fixed for simple payments) 94 7917bc33eea648809c285607579c9919fb864f8f (address, always 20 bytes) 87 03baf82d03a000 (value, in theory this can be shrunken to zero) 80 (data, already zero length) 25 (V, one byte) a0 067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46 (R) a0 69b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69 (S)

De esta muestra, no hay mucho más que acortar. Un valor menor puede reducir el campo de valor a un byte. El precio más bajo de la gasolina puede reducir uno o dos bytes más. Por lo tanto, parece que un tamaño de transacción "mínimo" realista debería ser superior a 100 bytes (109 - 7 -2).

Tamaño de una simple transacción de Bitcoin

Las cosas son más complicadas para una transacción de Bitcoin (estructura explicada aquí ). Supongamos la transacción "clásica", es decir, sin SegregatedWitness:

  1. Una transacción de Bitcoin siempre hace referencia a sus hashes UTXO (transacción no gastada) anteriores. La simple suposición de que "Alice recibe 1 BTC" no implica cuántos UTXO suman ese 1 BTC. Puede variar de 1 a cualquier número.
  2. De manera similar, la suposición "Alice le paga a Bob 1 BTC" no implica la cantidad de salidas de transacciones. Puede haber solo 1 salida, lo que significa que cualquier saldo restante va al minero, o un número arbitrario de salidas, con el saldo restante de Alice dividido en múltiples "piernas" (salidas).
  3. Las cosas se complican más cuando consideramos el scriptSig y scriptPubKey (como se dijo, suponga que no hay SegWit). Los UTXO de Alice pueden consistir en un simple script P2PKH, o multi-sig, o P2SH, o, en el caso extremo, un tonto script "cualquiera puede gastar" (ver ejemplo aquí ). Lo mismo es cierto para las salidas de transacciones, multiplicando el número de combinaciones posibles en los dos puntos anteriores, aparecen demasiadas posibilidades.

Para una estimación aproximada, probablemente una buena transacción de muestra sea la que se describe en esta impresionante publicación de blog , la cantidad de bytes es 247.

es esa la razón principal por la que Ethereum puede hacer más tx

Esta pregunta asume que el límite de tamaño de bloque de Ethereum está determinado por la longitud de bytes. Esto no es cierto. El tamaño del bloque en realidad está determinado por el límite de gas del bloque. Vea esta pregunta para más detalles. Así que la respuesta simple a esta pregunta es "no".

Hagamos una estimación rápida de la parte posterior del sobre para el tamaño de transacción promedio en la red Ethereum.

Simplificando suposiciones:

  • La mayor parte del tamaño del bloque si está ocupado por transacciones
  • La mayoría de las transacciones son transacciones simples que simplemente transfieren ether (esta suposición es cuestionable, lo sé...)


Cálculo:

  • # promedio de transacciones en una hora ~ 20,000
  • Promedio de # bloques por hora = 261
  • => 20,000/261 ~ 76 transacciones por bloque en promedio
  • => 15 kb/76 ~ 0,2 kb

Tamaño de transacción promedio para bitcoin ~ 0.6kb (3 veces más que Ethereum)

Entonces, sí, las transacciones de Ethereum son más pequeñas en promedio, pero eso no explica por sí solo la capacidad de procesamiento superior. Una gran diferencia entre Bitcoin y Ethereum es que Ethereum no tiene un límite de tamaño de bloque per se, sino que tiene un límite de gas, es decir, solo puede ejecutar una cantidad máxima de cálculos. Entonces, dependiendo de qué tan grandes sean las transacciones y qué tan intensivas sean las transacciones computacionalmente, un bloque Ethereum puede adaptarse a más o menos transacciones. Otra consideración es que para Ethereum el tiempo de bloque objetivo es ~ 17 s frente a 10 minutos para Bitcoin.

Fuentes: