Алиса владеет пустым кошельком Ethereum. Получает 1 ETH, затем отправляет 1 ETH Бобу.
Алиса владеет пустым биткойн-кошельком. Получает 1 BTC, затем отправляет 1 BTC Бобу.
Каковы размеры транзакций в байтах (Алиса->Боб) в обоих случаях? Если Ethereum ниже, является ли это основной причиной, по которой Ethereum может обрабатывать больше транзакций в секунду, чем биткойн?
Этот пост содержит несколько вопросов. Давайте рассмотрим их один за другим.
Прежде чем ответить на вопросы, в предположении поста есть ошибка: он не учитывает комиссию за транзакцию. Если у Алисы есть один эфир или один BTC, Боб не сможет получить всю сумму (возможно, он мог бы, во времена нулевой комиссии за транзакцию для BTC, но точно не сейчас), так как комиссия за транзакцию должна быть вычтена. со счета Алисы.
Из желтой бумаги 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 |
-----------------------------
Примечание:
Это только логическая структура. На самом деле данные закодированы в формате RLP , поэтому они длиннее из-за добавленного префикса длины.
Поле 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:
Для грубой оценки, вероятно, хорошим примером транзакции является та, что описана в этом замечательном посте в блоге , число байтов равно 247.
Этот вопрос предполагает, что предельный размер блока Ethereum определяется длиной байта. Это неправда. Размер блока фактически определяется лимитом газа блока. См. этот вопрос для более подробной информации. Поэтому простой ответ на этот вопрос — «нет».
Давайте быстро оценим средний размер транзакции в сети Ethereum.
Упрощение предположений:
Исчисление:
Средний размер транзакции для биткойнов ~ 0,6 КБ (в 3 раза больше, чем у Ethereum)
Так что да, транзакции Ethereum в среднем меньше, но это не объясняет само по себе превосходную вычислительную мощность. Основное различие Биткойн Биткойн и Эфириум заключается в том, что Эфириум не имеет ограничения размера блока как такового, но вместо этого имеет ограничение газа, то есть он может выполнять только максимальное количество вычислений. Таким образом, в зависимости от того, насколько велики транзакции и насколько интенсивны транзакции, блок Ethereum может вместить больше или меньше транзакций. Еще одно соображение заключается в том, что для Ethereum целевое время блока составляет ~ 17 секунд против 10 минут для биткойнов.
Источники:
Мэлоун