Size: a a a

2021 January 17

DG

Denis Glotov in Ethereum Russia
То есть тогда получается, что в этой формуле (gasSpent + 14154) / 41947, 14154 - довесок газа за вычисление gasSpent, а 41947 - средняя компенсация за сжигание одного токена Chi?
источник

DG

Denis Glotov in Ethereum Russia
но тоже не сходится, так как компенсация за selfdestruct - всего 24000 и освобождение одного токена Chi делает один selfdestruct. То есть 41947 - что-то совсем другое...
источник

AZ

Alexey Zhdanov in Ethereum Russia
@k06aa хелп
источник

V

Vasiliy in Ethereum Russia
Denis Glotov
но тоже не сходится, так как компенсация за selfdestruct - всего 24000 и освобождение одного токена Chi делает один selfdestruct. То есть 41947 - что-то совсем другое...
газтокен может только 50% газа компенисировать, то есть если сжигание бесплатное, то надо делить на 48000, а если платное, то на чуть меньше, так получается
источник

V

Vasiliy in Ethereum Russia
41947 = (48000 - avgCostToBurnChi*2) или что-то вроде
источник

DG

Denis Glotov in Ethereum Russia
Vasiliy
газтокен может только 50% газа компенисировать, то есть если сжигание бесплатное, то надо делить на 48000, а если платное, то на чуть меньше, так получается
о как, а про 50% я не знал, спасибо.  В yellowpaper наверное об этом должны писать?
источник

V

Vasiliy in Ethereum Russia
я yp наизусть не помню, знания получил культурным осмосом
источник

V

Vasiliy in Ethereum Russia
ну это в принципе и понятно, чтобы нельзя было транзакциями за 0 газа блок забить до гигабайт
источник

DG

Denis Glotov in Ethereum Russia
мда, забавно, я даже видел этот код в geth, который вычисляет компенсацию, но что он пополам делит... да, многое это объясняет, спасибо!
источник

DG

Denis Glotov in Ethereum Russia
дополню любопытной подробностью, раз уж подняли тему: гуглением по modifier discountCHI находятся два контракта, которые его используют. Первый CurveExchangeAdapter константы повторяет за авторами Chi (gasSpent + 14154) / 41947, а вот второй ValueVaultBank константы модифицировал (gasSpent + 14154) / 41130. Уже ли вторые сами пересчитали среднюю компенсацию и на сколько это вообще важно?..
источник
2021 January 18

IK

Ilya Kmet in Ethereum Russia
Вообще сообщение 170121 в очереди.
источник

MM

Mikhail Melnik in Ethereum Russia
@denisglotov вот, я кому-то уже расписывал
источник

MM

Mikhail Melnik in Ethereum Russia
Переслано от Mikhail Melnik
Правильно посчитать константы для своего случая 🙂

Общая формула такая:

21000 + calldataCost + executionCost + constBurnCost + n * perTokenBurnCost = 2 * (24000 * n + otherRefunds)

Подогнать под себя ее примерно так:

perTokenBurnCost = 6148
otherRefunds как правило невозможно посчитать, поэтому их игнорируем
constBurnCost зависит от функции которая вызывается для сжигания токенов. free например стоит 14895, а freeFromUpTo стоит 25171.
executionCost можно поставить gasStart - gasleft() как в этом модификаторе, а можно что-нибудь еще круче навернуть. Например если вы знаете сколько газа будет потрачено до того, как посчитается gasStart, то можно этот газ тоже сюда приплюсовать.
calldataCost по-честному считается как 16 * кол-во ненулевых байт в колдате + 4 * кол-во нулевых байт в колдате. Считать ончейн по-честному дорого, поэтому можно прикинуть какое-то среднее число для вашего случая. Для 1inch например мы берем msg.data.length * 5, потому что у нас дофига нулей в колдате. Еще надо помнить, что колдату транзакции можно получить только в первой функции в стеке, поэтому имеет смысл вешать этот модификатор только на самые внешние функции.

Итого для вашего кейса, если предположить, что у вас в колдате половина нулей и половина ненулей, формулу можно написать так:

21000 + msg.data.length * (16 + 4) / 2 + gasStart - gasleft() + 25171 + n * 6148 = 48000 * n

Откуда получаем:

n = (21000 + gasStart - gasleft() + msg.data.length * 10 + 25171) / 41852
источник

MM

Mikhail Melnik in Ethereum Russia
Еще может быть полезно для общего развития: https://misc.zumzoom.dev/chi/
источник

SL

S. L. in Ethereum Russia
всем привет, нода с фаст синком будет давать достоверную инфу о балансах?
источник

DG

Denis Glotov in Ethereum Russia
Mikhail Melnik
@denisglotov вот, я кому-то уже расписывал
Спасибо, это многое проясняет. Но почему 16 газа за ненулевой байт? Ведь в yellowpaper так:
Gtxdatazero 4 Paid for every zero byte of data or code for a transaction.
Gtxdatanonzero 68 Paid for every non-zero byte of data or code for a transaction
?
источник

MM

Mikhail Melnik in Ethereum Russia
Denis Glotov
Спасибо, это многое проясняет. Но почему 16 газа за ненулевой байт? Ведь в yellowpaper так:
Gtxdatazero 4 Paid for every zero byte of data or code for a transaction.
Gtxdatanonzero 68 Paid for every non-zero byte of data or code for a transaction
?
источник

DG

Denis Glotov in Ethereum Russia
оу, что же они yellowpaper не обновили...
источник

MM

Mikhail Melnik in Ethereum Russia
Denis Glotov
оу, что же они yellowpaper не обновили...
источник

MM

Mikhail Melnik in Ethereum Russia
Поставь лайк, может как-то поможет)
источник