Каков размер (в байтах) простой транзакции Ethereum по сравнению с транзакцией биткойнов?

Алиса владеет пустым кошельком Ethereum. Получает 1 ETH, затем отправляет 1 ETH Бобу.

Алиса владеет пустым биткойн-кошельком. Получает 1 BTC, затем отправляет 1 BTC Бобу.

Каковы размеры транзакций в байтах (Алиса->Боб) в обоих случаях? Если Ethereum ниже, является ли это основной причиной, по которой Ethereum может обрабатывать больше транзакций в секунду, чем биткойн?

Ответы (2)

Этот пост содержит несколько вопросов. Давайте рассмотрим их один за другим.

Прежде чем ответить на вопросы, в предположении поста есть ошибка: он не учитывает комиссию за транзакцию. Если у Алисы есть один эфир или один BTC, Боб не сможет получить всю сумму (возможно, он мог бы, во времена нулевой комиссии за транзакцию для BTC, но точно не сейчас), так как комиссия за транзакцию должна быть вычтена. со счета Алисы.

Размер простой транзакции Ethereum

Из желтой бумаги Ethereum мы знаем, что логическая структура транзакции выглядит следующим образом.

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

Примечание:

  1. Это только логическая структура. На самом деле данные закодированы в формате RLP , поэтому они длиннее из-за добавленного префикса длины.

  2. Поле V всегда было на 1 байт раньше EIP-155 . Вероятно, можно с уверенностью сказать, что каждый крупный клиент внедрил EIP-155. Для основной сети, тестовой сети, это поле остается равным 1 байту даже с EIP-155. Для частных сетей с большими значениями «идентификатора цепочки» это поле может быть намного длиннее. Смотрите этот вопрос .

Мы могли бы использовать нелепые данные, чтобы дать теоретический «минимальный» размер, например, задав нулевую цену на газ. Однако это не имеет большого значения, поскольку в наши дни такие транзакции не могут быть добыты. Вместо этого мы используем эту транзакцию в качестве образца для анализа, поскольку это действительно простой платеж Алисы Бобу.

В консоли web3 выполните следующее (в зависимости от клиента может потребоваться вместо этого использовать «eth.getRawTransaction»)

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

Это должно дать

"0xf86b80850ba43b7400825208947917bc33eea648809c285607579c9919fb864f8f8703baf82d03a0008025a0067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46a069b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69"

что составляет 109 байт. Если мы разберем данные

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)

Из этого образца больше нечего укорачивать. Меньшее значение может уменьшить поле значения до одного байта. Более низкая цена на газ может сократиться еще на один или два байта. Таким образом, реалистичный "минимальный" размер транзакции должен быть больше 100 байт (109 - 7 -2).

Размер простой биткойн-транзакции

С биткойн-транзакцией все сложнее (структура описана здесь ). Предположим, что это "классическая" транзакция, т.е. без SegregatedWitness:

  1. Биткойн-транзакция всегда ссылается на свои предыдущие хэши UTXO (неизрасходованные транзакции). Простое предположение «Алиса получает 1 BTC» не подразумевает, сколько сумм UTXO составляет этот 1 BTC. Может варьироваться от 1 до любого числа.
  2. Аналогичным образом предположение «Алиса платит Бобу 1 BTC» не подразумевает количество выходов транзакции. Может быть только 1 выход, что означает, что любой оставшийся баланс идет майнеру, или произвольное количество выходов, при этом оставшийся баланс Алисы делится на несколько «ветвей» (выходов).
  3. Ситуация усложняется, когда мы рассматриваем scriptSig и scriptPubKey (как уже говорилось, предположим, что нет SegWit). UTXO Алисы могут состоять из простого скрипта P2PKH, или multi-sig, или P2SH, или, в крайнем случае, глупого скрипта «каждый может потратить» (см. пример здесь ). То же самое верно и для выходов транзакций, умножая количество возможных комбинаций в двух вышеуказанных точках, тогда возникает слишком много возможностей.

Для грубой оценки, вероятно, хорошим примером транзакции является та, что описана в этом замечательном посте в блоге , число байтов равно 247.

это основная причина, почему Эфириум может делать больше транзакций

Этот вопрос предполагает, что предельный размер блока Ethereum определяется длиной байта. Это неправда. Размер блока фактически определяется лимитом газа блока. См. этот вопрос для более подробной информации. Поэтому простой ответ на этот вопрос — «нет».

Давайте быстро оценим средний размер транзакции в сети Ethereum.

Упрощение предположений:

  • Большая часть размера блока, если занята транзакциями
  • Большинство транзакций являются простыми транзакциями, которые просто передают эфир (это предположение сомнительно, я знаю...)


Исчисление:

  • Среднее количество транзакций в час ~ 20 000
  • Среднее # блоков в час = 261
  • => 20 000/261 ~ 76 транзакций на блок в среднем
  • => 15 КБ/76 ~ 0,2 КБ

Средний размер транзакции для биткойнов ~ 0,6 КБ (в 3 раза больше, чем у Ethereum)

Так что да, транзакции Ethereum в среднем меньше, но это не объясняет само по себе превосходную вычислительную мощность. Основное различие Биткойн Биткойн и Эфириум заключается в том, что Эфириум не имеет ограничения размера блока как такового, но вместо этого имеет ограничение газа, то есть он может выполнять только максимальное количество вычислений. Таким образом, в зависимости от того, насколько велики транзакции и насколько интенсивны транзакции, блок Ethereum может вместить больше или меньше транзакций. Еще одно соображение заключается в том, что для Ethereum целевое время блока составляет ~ 17 секунд против 10 минут для биткойнов.

Источники: