Wie groß (Bytes) ist eine einfache Ethereum-Transaktion im Vergleich zu einer Bitcoin-Transaktion?

Alice besitzt eine leere Ethereum-Brieftasche. Erhält 1 ETH und sendet dann 1 ETH an Bob.

Alice besitzt eine leere Bitcoin-Brieftasche. Erhält 1 BTC und sendet dann 1 BTC an Bob.

Was sind die Transaktionsgrößen in Bytes (Alice->Bob) in beiden Fällen? Wenn Ethereum niedriger ist, ist das der Hauptgrund, warum Ethereum mehr TX/Sek. leisten kann als Bitcoin?

Antworten (2)

Dieser Beitrag enthält mehrere Fragen. Lassen Sie uns sie einzeln ansprechen.

Bevor die Fragen beantwortet werden, gibt es einen Fehler in der Annahme des Beitrags: Er berücksichtigt nicht die Transaktionsgebühren. Wenn Alice einen Ether oder einen BTC hat, kann Bob nicht den vollen Betrag erhalten (vielleicht könnte er das, damals in den Tagen ohne Transaktionsgebühren für BTC, aber sicherlich nicht jetzt), da die Transaktionsgebühren abgezogen werden müssen von Alices Konto.

Größe einer einfachen Ethereum-Transaktion

Aus dem gelben Papier von Ethereum wissen wir, dass die logische Struktur einer Transaktion wie folgt ist.

-----------------------------
| 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       |
-----------------------------

Notiz:

  1. Dies ist nur die logische Struktur. Die tatsächlichen Daten sind im RLP -Format kodiert, sind also aufgrund des hinzugefügten Längenpräfixes länger.

  2. Das V-Feld war immer 1 Byte vor EIP-155 . Es ist wahrscheinlich sicher zu sagen, dass jeder größere Kunde EIP-155 implementiert hat. Für das Hauptnetz, Testnetz, bleibt dieses Feld auch bei EIP-155 auf 1 Byte. Bei privaten Netzwerken mit "Ketten-ID" mit größeren Werten kann dieses Feld viel länger sein. Siehe diese Frage .

Wir könnten lächerliche Daten verwenden, um eine theoretische "minimale" Größe anzugeben, zB indem wir einen Null-Gaspreis angeben. Dies ist jedoch nicht sehr aussagekräftig, da solche Transaktionen heutzutage nicht mehr abgebaut werden könnten. Stattdessen verwenden wir diese Transaktion als Beispiel für die Analyse, da es sich um eine realistisch einfache Zahlung von Alice an Bob handelt.

Führen Sie in der web3-Konsole Folgendes aus (je nach Client muss möglicherweise stattdessen „eth.getRawTransaction“ verwendet werden)

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

Das sollte geben

"0xf86b80850ba43b7400825208947917bc33eea648809c285607579c9919fb864f8f8703baf82d03a0008025a0067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46a069b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69"

das sind 109 Bytes. Wenn wir die Daten analysieren

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)

Von diesem Beispiel gibt es nicht mehr viel zu kürzen. Ein kleinerer Wert kann das Wertefeld auf ein Byte reduzieren. Ein niedrigerer Gaspreis kann um ein oder zwei Bytes weiter schrumpfen. Daher scheint es, dass eine realistische "minimale" Transaktionsgröße größer als 100 Bytes (109 - 7 -2) sein sollte.

Größe einer einfachen Bitcoin-Transaktion

Bei einer Bitcoin-Transaktion ist die Sache komplizierter (Struktur hier erklärt ). Gehen Sie von der "klassischen" Transaktion aus, dh ohne SegregatedWitness:

  1. Eine Bitcoin-Transaktion verweist immer auf ihre vorherigen UTXO-Hashes (nicht ausgegebene Transaktion). Die einfache Annahme „Alice erhält 1 BTC“ impliziert nicht, wie viele UTXO-Summen diesen 1 BTC ergeben. Er kann von 1 bis zu einer beliebigen Zahl reichen.
  2. In ähnlicher Weise impliziert die Annahme „Alice zahlt Bob 1 BTC“ nicht die Anzahl der Transaktionsausgaben. Es kann nur 1 Ausgang geben, was bedeutet, dass das verbleibende Guthaben an den Miner geht, oder eine beliebige Anzahl von Ausgängen, wobei Alices verbleibendes Guthaben in mehrere „Zweige“ (Ausgänge) aufgeteilt wird.
  3. Die Dinge werden komplizierter, wenn wir scriptSig und scriptPubKey betrachten (nehmen Sie wie gesagt kein SegWit an). Alices UTXOs können aus einem einfachen P2PKH-Skript oder Multi-Sig oder P2SH oder im Extremfall aus einem albernen „Jeder kann ausgegeben“-Skript bestehen (siehe Beispiel hier ). Dasselbe gilt für die Transaktionsausgaben, multipliziert man die Anzahl der möglichen Kombinationen in den obigen zwei Punkten, ergeben sich dann zu viele Möglichkeiten.

Für eine grobe Schätzung ist wahrscheinlich eine gute Beispieltransaktion die in diesem großartigen Blogbeitrag beschriebene Transaktion , die Anzahl der Bytes beträgt 247.

Das ist der Hauptgrund, warum Ethereum mehr TX leisten kann

Diese Frage geht davon aus, dass die Blockgrößenbeschränkung von Ethereum durch die Bytelänge bestimmt wird. Das ist nicht wahr. Die Blockgröße wird tatsächlich durch das Gaslimit des Blocks bestimmt. Siehe diese Frage für weitere Details. Die einfache Antwort auf diese Frage lautet also „nein“.

Lassen Sie uns kurz die Envelope-Schätzung für die durchschnittliche Transaktionsgröße im Ethereum-Netzwerk durchgehen.

Vereinfachende Annahmen:

  • Der größte Teil der Blockgröße wird von Transaktionen belegt
  • Die meisten Transaktionen sind einfache Transaktionen, die nur Ether übertragen (diese Annahme ist fragwürdig, ich weiß ...)


Infinitesimalrechnung:

  • Durchschnittliche Anzahl von Transaktionen in einer Stunde ~ 20.000
  • Durchschnittliche # Blöcke pro Stunde = 261
  • => 20.000/261 ~ 76 Transaktionen pro Block im Durchschnitt
  • => 15kb/76 ~ 0,2kb

Durchschnittliche Transaktionsgröße für Bitcoin ~ 0,6 kb (3-mal mehr als Ethereum)

Also ja, Ethereum-Transaktionen sind im Durchschnitt kleiner, aber das erklärt nicht allein die überlegene Verarbeitungskapazität. Ein wesentlicher Unterschied zwischen Bitcoin Bitcoin und Ethereum besteht darin, dass Ethereum per se kein Blockgrößenlimit hat, sondern ein Gaslimit, dh es kann nur eine maximale Anzahl von Berechnungen ausführen. Je nachdem, wie groß Transaktionen und wie rechenintensiv Transaktionen sind, kann ein Ethereum-Block also mehr oder weniger Transaktionen aufnehmen. Eine weitere Überlegung ist, dass die Zielblockzeit für Ethereum ~ 17 Sekunden gegenüber 10 Minuten für Bitcoin beträgt.

Quellen: