Первые инструкции в байт-коде (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 в памяти в начале каждой программы?

5 голосов | спросил AlexeyKarasev 4 MaramSun, 04 Mar 2018 10:10:45 +03002018-03-04T10:10:45+03:0010 2018, 10:10:45

1 ответ


4

Отвечая на мой собственный вопрос:

Это указатель свободной памяти. Первые 0x40 байт зарезервированы для внутренних вычислений. Тогда 0x40 - 0x60 (одно слово) хранит указатель на свободную память (доступную для распределений), которая в этом случае, очевидно, равна 0x60.

Итак, этот код:

PUSH1 0x60 
PUSH1 0x40 
MSTORE 

Инициализирует указатель памяти.

Подробнее: https: //solidity.readthedocs. IO /ен /разработки /miscellaneous.html # макета из-государственных-переменных-в-хранения

ответил AlexeyKarasev 4 MaramSun, 04 Mar 2018 11:44:05 +03002018-03-04T11:44:05+03:0011 2018, 11:44:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132