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?
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.
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:
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.
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).
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:
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.
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:
Cálculo:
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:
Malone