Ось як працює базова операція Solidity під капотом. Візьмемо простий вираз, наприклад, uint c = a + b — здається, що це просто, коли ви його пишете, але компілятор перетворює його у щось зовсім інше на рівні байткоду.
Після компіляції ви отримуєте опкоди, які приблизно виглядають так: PUSH1 a PUSH1 b ADD
Це говорить EVM. Кожна інструкція виконується одна за одною. Клієнт обробля кожен окремий опкод послідовно, додаючи значення у стек, виконуючи операції та переходячи до наступної інструкції. Ніяких скорочень, ніякої магії — лише детермінована послідовність кроків, яка перетворює ваш високорівневий код у машинно-исполняємі операції.
Саме тому оптимізація газу так важлива у розробці блокчейну. Кожен опкод має свою ціну, і розуміння того, який байткод генерується з вашого Solidity, — це різниця між ефективними та марнотратними смарт-контрактами.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
10 лайків
Нагородити
10
5
Репост
Поділіться
Прокоментувати
0/400
SelfSovereignSteve
· 4год тому
Вперше я зрозумів, що наш код настільки простий і грубий, прямо — стековий безумний push і pop
gas — це справжній козир, різниця між контрактами, що знають байткод, і тими, що не знають, дуже велика
Ей, чому ще хтось пише такі речі, що сильно споживають gas...
Написання на Solidity — це круто, але після компіляції ця вся штука виглядає дуже заплутано
Ось чому іноді низькорівневі операції assembly можуть економити великі гроші
Переглянути оригіналвідповісти на0
SchrödingersNode
· 4год тому
Здається, проста додавання, але після компіляції воно перетворюється на цей набір opcode... Щоразу потрібно нагадувати собі, що не слід думати стереотипно
Переглянути оригіналвідповісти на0
BearMarketBarber
· 4год тому
Чесно кажучи, розробка на Solidity без розуміння байткоду — це платити податок на розумові здібності.
Переглянути оригіналвідповісти на0
RetiredMiner
· 4год тому
Вау, написати a+b виявляється так складно наспіх, не дивно, що комісія за газ така болюча
Переглянути оригіналвідповісти на0
AirdropSkeptic
· 5год тому
Саме так, за виглядом простої рядка коду ховається виконання opcode, тому й так багато газових комісій...
Ось як працює базова операція Solidity під капотом. Візьмемо простий вираз, наприклад, uint c = a + b — здається, що це просто, коли ви його пишете, але компілятор перетворює його у щось зовсім інше на рівні байткоду.
Після компіляції ви отримуєте опкоди, які приблизно виглядають так:
PUSH1 a
PUSH1 b
ADD
Це говорить EVM. Кожна інструкція виконується одна за одною. Клієнт обробля кожен окремий опкод послідовно, додаючи значення у стек, виконуючи операції та переходячи до наступної інструкції. Ніяких скорочень, ніякої магії — лише детермінована послідовність кроків, яка перетворює ваш високорівневий код у машинно-исполняємі операції.
Саме тому оптимізація газу так важлива у розробці блокчейну. Кожен опкод має свою ціну, і розуміння того, який байткод генерується з вашого Solidity, — це різниця між ефективними та марнотратними смарт-контрактами.