Доп 3. Коды EVM и потребление газа

Это приложение основано на работе по консолидации, проделанной людьми с сайта https://github.com/trailofbits/evm-opcodes в качестве справочника по опкодам и информации об инструкциях Ethereum VM (EVM), лицензированного по лицензии Apache License 2.0.

Таблица 1. Опкоды EVM и стоимость газа

ОпкодИмяОписаниеДопГаз
0x00STOPОстановка выполнения-0
0x01ADDОперация сложения-3
0x02MULОперация умножения-5
0x03SUBОперация вычитания-3
0x04DIVОперация деления целых чисел-5
0x05SDIVОперация деления целого числа со знаком (усеченная)-5
0x06MODОперация остатка по модулю-5
0x07SMODОперация знакового модульного остатка-5
0x08ADDMODОперация сложения по модулю-8
0x09MULMODОперация умножения по модулю-8
0x0aEXPЭкспоненциальная операция-10***
0x0bSIGNEXTENDУвеличение длины целого знакового числа с двойным дополнением-5
0x0c - 0x0fНеиспользуемые---
0x10LTМеньше, чем сравнение-3
0x11GTБольше, чем сравнение-3
0x12SLTПодписанное сравнение меньшего с меньшим-3
0x13SGTЗнак больше, чем сравнение-3
0x14EQСравнение по качеству-3
0x15ISZEROПростой оператор NOT-3
0x16ANDПобитовая операция AND-3
0x17ORПоразрядная операция OR-3
0x18XORБитрейшая операция XOR-3
0x19NOTБитрейшая операция NOT-3
0x1aBYTEПолучение одного байта из слова-3
0x1b - 0x1fНеиспользуемые---
0x20SHA3Вычисление хэша Keccak-256-30
0x21 - 0x2fНеиспользуемые---
0x30ADDRESSПолучение адреса текущего исполняемого счета-2
0x31BALANCEПолучение баланса данного счета-400
0x32ORIGINПолучение адреса начала исполнения-2
0x33CALLERПолучение адреса вызывающего абонента-2
0x34CALLVALUEПолучение значения, депонированного инструкцией/транзакцией, ответственной за данное выполнение-2
0x35CALLDATALOADПолучение входных данных текущей среды-3
0x36CALLDATASIZEПолучение размера входных данных в текущей среде-2
0x37CALLDATACOPYКопирование входных данных в текущей среде в память-3
0x38CODESIZEПолучить размер кода, выполняемого в текущей среде-2
0x39CODECOPYКопирование кода, выполняющегося в текущей среде, в память-3
0x3aGASPRICEПолучение цены на газ в текущей среде-2
0x3bEXTCODESIZEПолучение размера кода счета-700
0x3cEXTCODECOPYКопирование кода счета в память-700
0x3dRETURNDATASIZEЗагоняет размер буфера данных возврата в стекEIP-2112
0x3eRETURNDATACOPYКопирует данные из буфера возвращенных данных в памятьEIP-2113
0x3fНеиспользуемый---
0x40BLOCKHASHПолучение хэша одного из 256 последних полных блоков-20
0x41COINBASEПолучение адреса получателя блока-2
0x42TIMESTAMPПолучение временной метки блока-2
0x43NUMBERПолучить номер блока-2
0x44DIFFICULTYПолучить сложность блока-2
0x45GASLIMITПолучить лимит газа блока-2
0x46 - 0x4fНеиспользуемые---
0x50POPУдаление слова из стека-2
0x51MLOADЗагрузка слова из памяти-3
0x52MSTOREСохранение слова в память-3*
0x53MSTORE8Сохранение байта в память-3
0x54SLOADЗагрузка слова из памяти-200
0x55SSTOREСохранение слова в память-0*
0x56JUMPАльтернативный счетчик программы-8
0x57JUMPIУсловное изменение счетчика программы-10
0x58GETPCПолучение значения программного счетчика перед инкрементом-2
0x59MSIZEПолучить размер активной памяти в байтах-2
0x5aGASПолучение количества доступного газа, включая соответствующее уменьшение количества доступного газа-2
0x5bJUMPDESTМаркировка допустимого места назначения для прыжков-1
0x5c - 0x5fНеиспользуемые---
0x60PUSH1Поместить 1-байтовый элемент в стек-3
0x61PUSH2Поместить 2-байтовый элемент в стек-3
0x62PUSH3Поместить 3-байтовый элемент в стек-3
0x63PUSH4Поместить 4-байтовый элемент в стек-3
0x64PUSH5Поместить 5-байтовый элемент в стек-3
0x65PUSH6Поместить 6-байтовый элемент в стек-3
0x66PUSH7Поместить 7-байтовый элемент в стек-3
0x67PUSH8Поместить 8-байтовый элемент в стек-3
0x68PUSH9Поместить 9-байтовый элемент в стек-3
0x69PUSH10Поместить 10-байтовый элемент в стек-3
0x6aPUSH11Поместить 11-байтовый элемент в стек-3
0x6bPUSH12Поместить 12-байтовый элемент в стек-3
0x6cPUSH13Поместить 13-байтовый элемент в стек-3
0x6dPUSH14Поместить 14-байтовый элемент в стек-3
0x6ePUSH15Поместить 15-байтовый элемент в стек-3
0x6fPUSH16Поместить 16-байтовый элемент в стек-3
0x70PUSH17Поместить 17-байтовый элемент в стек-3
0x71PUSH18Поместить 18-байтовый элемент в стек-3
0x72PUSH19Поместить 19-байтовый элемент в стек-3
0x73PUSH20Поместить 20-байтовый элемент в стек-3
0x74PUSH21Поместить 21-байтовый элемент в стек-3
0x75PUSH22Поместить 22-байтовый элемент в стек-3
0x76PUSH23Поместить 23-байтовый элемент в стек-3
0x77PUSH24Поместить 24-байтовый элемент в стек-3
0x78PUSH25Поместить 25-байтовый элемент в стек-3
0x79PUSH26Поместить 26-байтовый элемент в стек-3
0x7aPUSH27Поместить 27-байтовый элемент в стек-3
0x7bPUSH28Поместить 28-байтовый элемент в стек-3
0x7cPUSH29Поместить 29-байтовый элемент в стек-3
0x7dPUSH30Поместить 30-байтовый элемент в стек-3
0x7ePUSH31Поместить 31-байтовый элемент в стек-3
0x7fPUSH32Поместить 32-байтовый элемент (полное слово) в стек-3
0x80DUP1Дублирование 1-го элемента стека-3
0x81DUP2Дублирование 2-го элемента стека-3
0x82DUP3Дублирование 3-го элемента стека-3
0x83DUP4Дублирование 4-го элемента стека-3
0x84DUP5Дубликат 5-го элемента стека-3
0x85DUP6Дубликат 6-го элемента стека-3
0x86DUP7Дубликат 7-го элемента стека-3
0x87DUP8Дубликат 8-го элемента стека-3
0x88DUP9Дубликат 9-го элемента стека-3
0x89DUP10Дубликат 10-го элемента стека-3
0x8aDUP11Дубликат 11-го элемента стека-3
0x8bDUP12Дубликат 12-го элемента стека-3
0x8cDUP13Дубликат 13-го элемента стека-3
0x8dDUP14Дубликат 14-го элемента стека-3
0x8eDUP15Дубликат 15-го элемента стека-3
0x8fDUP16Дубликат 16-го элемента стека-3
0x90SWAP1Замена 1-го и 2-го элементов стека-3
0x91SWAP2Замена 1-го и 3-го элементов стека-3
0x92SWAP3Замена 1-го и 4-го элементов стека-3
0x93SWAP4Замена 1-го и 5-го элементов стека-3
0x94SWAP5Замена 1-го и 6-го элементов стека-3
0x95SWAP6Замена 1-го и 7-го элементов стека-3
0x96SWAP7Замена 1-го и 8-го элементов стека-3
0x97SWAP8Замена 1-го и 9-го элементов стека-3
0x98SWAP9Замена 1-го и 10-го элементов стека-3
0x99SWAP10Замена 1-го и 11-го элементов стека-3
0x9aSWAP11Замена 1-го и 12-го элементов стека-3
0x9bSWAP12Замена 1-го и 13-го элементов стека-3
0x9cSWAP13Замена 1-го и 14-го элементов стека-3
0x9dSWAP14Замена 1-го и 15-го элементов стека-3
0x9eSWAP15Замена 1-го и 16-го элементов стека-3
0x9fSWAP16Замена 1-го и 17-го элементов стека-3
0xa0LOG0Добавить запись журнала без тем-375
0xa1LOG1Добавить запись журнала с одной темой-750
0xa2LOG2Добавить запись журнала с двумя темами-1125
0xa3LOG3Добавить запись журнала с тремя темами-1500
0xa4LOG4Добавить запись журнала с четырьмя темами-1875
0xa5 - 0xafНеиспользуемые---
0xb0JUMPTOТенденция http://bit.ly/2Sx2Vkg[libevmasm имеет другие номера]EIP615
0xb1JUMPIFTentativeEIP615
0xb2JUMPSUBTentativeEIP615
0xb4JUMPSUBVTentativeEIP615
0xb5BEGINSUBTentativeEIP615
0xb6BEGINDATATentativeEIP615
0xb8RETURNSUBTentativeEIP615
0xb9PUTLOCALОбязательноEIP615
0xbaGETLOCATentativeEIP615
0xbb - 0xe0Неиспользуемые---
0xe1SLOADBYTESТолько в pyethereum--
0xe2SSTOREBYTESТолько в pyethereum--
0xe3SSIZEТолько в pyethereum--
0xe4 - 0xefНеиспользуемые---
0xf0CREATEСоздать новый аккаунт с ассоциированным кодом-32000
0xf1CALLОтправка сообщения на счет-Complicated
0xf2CALLCODEОтправка сообщения на этот счет с альтернативным кодом счета-Complicated
0xf3RETURN+Выполнение шага, возвращающего выходные данные-0
0xf4DELEGATECALLВызов сообщения на этот счет с кодом альтернативного счета, но персистинг на этот счет с кодом альтернативного счета-Сложный
0xf5CALLBLACKBOX--40
0xf6 - 0xf9Неиспользуемые---
0xfaSTATICCALLПохож на CALL, но не изменяет состояние-40
0xfbCREATE2Создание нового аккаунта и установка адреса создания в sha3(sender + sha3(init code)) % 2**160--
0xfcTXEXECGASНе в желтой бумаге FIXME--
0xfdREVERTОстановить выполнение и вернуть изменения состояния, не израсходовав весь предоставленный газ и не указав причину-0
0xfeINVALIDОпределение недействительной инструкции-0
0xffSELFDESTRUCTОстановить выполнение и зарегистрировать счет для последующего удаления-5000*