Есть ли ограничение на размер транзакции?

Существует ли теоретический предел размера данных транзакции при отправке транзакции в сеть Ethereum?

Ссылка

Существует ли (теоретический) предел объема данных, которые может хранить контракт?

Ответы (2)

Вау, это такой интересный вопрос! TL; DR : ограничение размера транзакции на момент написания статьи составляет около 780 КБ (около 3 миллионов газа). Но читайте дальше.


Не существует прямых или фиксированных ограничений ни для размеров транзакций, ни для размеров блоков. Это сильная сторона сети Ethereum, она масштабируется.

Это не значит, что нет ограничений. В настоящее время существует лимит газа на блок , равный 3 141 592 газа, который можно потратить максимум на блок.

Это означает, что теоретически вы можете создать одну транзакцию, которая потребляет весь газ одного блока.

Давайте попробуем отправить случайные данные 256 КБ с контрактом:

trx со случайными данными 256 КБ

Это потребовало бы почти 9 миллионов газа, которого в настоящее время нет. Mist пытается создать транзакцию, но она будет недействительной.

Давайте попробуем создать что-то близкое к лимиту газа, 44 444 случайных байта :

44k случайных байтов

Эта транзакция прошла, вот ссылка на проводник . Хэш:

I0207 11:47:14.558908 eth/api.go:946] Tx(0x25e54394ab4e5f17d6e1240c02c1a6c4bb675ef9471f1105b006988f5fe5aec1) to: 0xfcae7970392f510a985a7eaccd3820b7759d65d9
  • Стоимость: 60 финни (0,06 эфира)
  • Газ: 3131800
  • Цена газа: 50 Gwei (0,00000005 эфира)
  • Газ, использованный транзакцией: 3031800
  • Фактическая стоимость транзакции: 151,59 финни (0,15159 эфира).
  • Совокупный использованный газ: 3031800

Итак, я только что добавил 44 КБ в блокчейн в блоке 967163 .

И теперь магия масштабирования Ethereum начинает срабатывать. В блоке 967164 сеть реагирует на высокое потребление газа и увеличивает лимит газа в блоке до 3 142 967 !

лимит газа увеличен

Таким образом, если есть постоянный запрос на высокое потребление газа, лимит газа может быть увеличен на плюс/минус 1/1024, что составляет около 0.09%. См . уравнения желтой бумаги 40-42 .

Короче говоря, ограничение: да, на момент написания около 780 КБ для tx, заполненного нулевыми байтами, или 46 КБ для tx, полного ненулевых байтов. Фиксированные лимиты (как в биткойнах): нет.

Обновление: в Homestead блок gasLimit теперь составляет 4 712 388 (в 1,5 раза больше миллиона PI), а цена на газ составляет 20 ГВт. (Методология выше все еще может быть использована.)
Я может пропустил это, но как 89kB == 3 миллиона газа?
Хм, это не так. Хорошо подмечено. Это, вероятно, около 40 КБ. Кто-нибудь, пожалуйста, пересчитайте, 3 миллиона газа тоже устарели. :-)
На самом деле вы отправляли 44 444 случайных байта. Поскольку внутри у вас было 178 нулевых байтов, собственный газ был равен 21 000 + (178 * 4) + (44 266 * 68) = 3 031 800. Лимит газа переменный (сейчас, например, 500к из-за недавней атаки на сеть), поэтому я думаю, что не стоит обновлять это значение в ответе.
С этим последним ответом я немного смущен. GasLimit по-прежнему равен 3 141 388 gas или обновлен до 4 712 388? Спасибо
Это отличается. в настоящее время около 4000000. проверьте подробности на ethstats.net .
Поскольку этот выпуск коммита с geth v1.6.6 будет отбрасывать транзакции размером более 32 КБ.

По состоянию на 08.12.2017 лимит газа, указанный на EthStats.net , составляет 6 700 314 .

Лимит газа «застрял» на отметке 4,7 миллиона. Майнерам было рекомендовано изменить свои настройки, чтобы можно было увеличить лимит газа.

Как указано в этой статье , это произошло.

Каждый шестнадцатеричный символ занимает 4 бита. 2 символа это байт.

В желтой бумаге указаны сборы за различные операции.

Плата за желтую бумагу

Используя расчеты, аналогичные тем, которые использовали 5hcdn/Джузеппе Бертоне, мы теперь можем видеть, что транзакция может (в принципе) содержать ****

(6 700 314 - 21 000) / 68 = 98 225 (округлено вниз) ненулевых байтов.

Статистика EthGasStation

Теперь... данные, предоставленные EthGasStation , позволяют нам увидеть, что мы могли бы провести транзакцию с ценой на газ всего 0,5 Gwei.

6,700,314 * 0.5 = 3,350,157 Gwei = 0.003350157 Ether.

Более стандартная цена газа 20 Gwei даст:

6,700,314 * 20 = 40,201,884 Gwei = 0.040201884 Ether.

При текущей цене ETH около 315 долларов США передача такого количества данных в цепочку блоков будет стоить от 1,05 до 12,66 долларов США .

"По состоянию на 08.12.2017" Вы из будущего?
Неа. Я британец ;)