Первые инструкции в байт-коде (606060405)
Я пытаюсь понять, как работает байт-код EVM, и я создал пустой контракт в Remix. Версия сборки выглядит следующим образом:
PUSH1 0x60
PUSH1 0x40
MSTORE
CALLVALUE
ISZERO
PUSH1 0xE
JUMPI
PUSH1 0x0
DUP1
REVERT
JUMPDEST
PUSH1 0x35
DUP1
PUSH1 0x1B
PUSH1 0x0
CODECOPY
PUSH1 0x0
RETURN
STOP
PUSH1 0x60
PUSH1 0x40
MSTORE
PUSH1 0x0
DUP1
REVERT
STOP
AFAIK первая часть выполняется при создании контракта, а вторая часть - сам код договора.
То, что я не понимаю, - вот эта часть:
PUSH1 0x60
PUSH1 0x40
MSTORE
Почему нам нужно хранить smth в памяти в начале каждой программы?
1 ответ
4
Отвечая на мой собственный вопрос:
Это указатель свободной памяти. Первые 0x40 байт зарезервированы для внутренних вычислений. Тогда 0x40 - 0x60 (одно слово) хранит указатель на свободную память (доступную для распределений), которая в этом случае, очевидно, равна 0x60.
Итак, этот код:
PUSH1 0x60
PUSH1 0x40
MSTORE
Инициализирует указатель памяти.
ответил AlexeyKarasev 4 MaramSun, 04 Mar 2018 11:44:05 +03002018-03-04T11:44:05+03:0011 2018, 11:44:05