Магические 6080604052
Уверен, никто не прочитал число в заголовке поста. А зря...
Это число является байткодом, с которого начинается байткод любого смарт контракта. Ну, иногда с легкими изменениями в 6060604052. Хотите узнать что это такое?
И это тоже относится к опкоду EVM. В другом формате это можно было бы записать так:
PUSH1 0x60 PUSH1 0x80 MSTORE
Как мы можем убедиться из таблицы опкодов, PUSH1 = 60, MSTORE = 52.
PUSH1 (0x60) - кладет 0х60 в Stack (мы же помним о форматах памяти?);
PUSH1 (0x60) - потом кладет 0х80 в Stack;
MSTORE (0x52) - берет 0х60 из памяти и перемещает в слот 0х80;
Если выполнить все эти действия по порядку, получится именно 6080604052.
Далее чуть сложнее.
0х80 и 0х60 не могут быть использованы, как простые числа 80 или 60. Так как они hexadecimal, то в переводе в decimal 60 будет ровняться 96, а 80 - 128.
Короче говоря, PUSH1 0x60 PUSH1 0x80 MSTORE берет 96 байтов памяти и перемещает указатель в начало 128 байта. Именно поэтому в памяти первые 64 байта всегда пустые, следующие 32 являются указателем, и потом уже идет запись контракта в саму память.
#evm #opcode
Post #493
247
- 👍 1