Summary

EVM opcode는 이더리움 네트워크에서 스마트 계약을 실행하기 위한 기계어 명령어입니다.

Description

EVM opcode는 이더리움 네트워크에서 스마트 계약을 실행하기 위한 기계어 명령어로, EVM이 스마트 계약의 코드를 이해하고 실행할 수 있게 해줍니다. Opcode는 스마트 계약의 로직을 구현하는 데 필수적인 요소이며, 가스 소비, 메모리 관리, 흐름 제어 등 다양한 작업을 수행합니다.

중요성

  • 가스 소비 계산: 각 opcode는 실행 시 일정량(변동성을 가진 연산도 존재)의 가스를 소비합니다. 이는 네트워크의 자원을 사용하는 대가로, 스마트 계약의 효율성을 평가하는 데 중요한 요소입니다.
  • 스마트 계약 실행: opcode는 스마트 계약의 비즈니스 로직을 실행하는 데 필요한 기본적인 구성 요소입니다.
  • 보안: 일부 opcode는 보안 관련 작업을 수행하여 스마트 계약을 안전하게 유지합니다.

주요 Opcode 예시

  • SSTORE (0x55): storage[key] := val
  • SLOAD (0x54): storage[key]
  • CREATE (0xF0): addr = keccak256(rlp([address(this), this.nonce]))
  • CREATE2 (0xF5): addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:]
    • ++ 연산자는 EVM의 CREATE2 opcode 컨텍스트에서 문자열 또는 바이트 시퀀스의 연결을 나타냅니다.

Tips

  • a, b => a + bADD opcode가 스택에서 두 항목(ab)을 가져와 이들의 합을 스택에 다시 놓는다는 의미입니다. 가장 왼쪽 항목(a)이 스택의 최상위 항목입니다.
  • 모든 스택 설명은 이후 스택 항목을 생략합니다. 명시되지 않은 스택 요소는 연산의 의미에 영향을 주지 않는다고 가정할 수 있습니다. 단, 스택 오버플로우가 발생하는 경우는 예외입니다.
  • 스택의 최대 크기는 1024 항목이며, 모든 스택 항목은 32 바이트입니다.
  • a // b는 내림 나눗셈을 나타냅니다. EVM에서 0으로 나누기의 결과는 0입니다.
  • 모든 산술 연산은 모듈로 2**256로 수행됩니다.
  • 지정된 INVALID opcode를 포함하여 EVM은 현재 141 개의 opcode를 구현하고 있으며, 그 중 65 개는 중복된 명령어(PUSHn, DUPn, SWAPn, LOGn)입니다.

Existing Opcodes

Shanghai

NumberNameExecution spec categoryInitial ReleaseEIP
0x00STOPControl Flow
0x01ADDArithmetic
0x02MULArithmetic
0x03SUBArithmetic
0x04DIVArithmetic
0x05SDIVArithmetic
0x06MODArithmetic
0x07SMODArithmetic
0x08ADDMODArithmetic
0x09MULMODArithmetic
0x0AEXPArithmetic
0x0BSIGNEXTENDArithmetic
0x10LTComparison
0x11GTComparison
0x12SLTComparison
0x13SGTComparison
0x14EQComparison
0x15ISZEROComparison
0x16ANDBitwise
0x17ORBitwise
0x18XORBitwise
0x19NOTBitwise
0x1ABYTEBitwise
0x1BSHLBitwiseConstantinopleEIP-145
0x1CSHRBitwiseConstantinopleEIP-145
0x1DSARBitwiseConstantinopleEIP-145
0x20KECCAKKeccak
0x30ADDRESSEnvironmental
0x31BALANCEEnvironmental
0x32ORIGINEnvironmental
0x33CALLEREnvironmental
0x34CALLVALUEEnvironmental
0x35CALLDATALOADEnvironmental
0x36CALLDATASIZEEnvironmental
0x37CALLDATACOPYEnvironmental
0x38CODESIZEEnvironmental
0x39CODECOPYEnvironmental
0x3AGASPRICEEnvironmental
0x3BEXTCODESIZEEnvironmental
0x3CEXTCODECOPYEnvironmental
0x3DRETURNDATASIZEEnvironmentalByzantiumEIP-211
0x3ERETURNDATACOPYEnvironmentalByzantiumEIP-211
0x3FEXTCODEHASHEnvironmentalConstantinopleEIP-1052
0x40BLOCKHASHBlock
0x41COINBASEBlock
0x42TIMESTAMPBlock
0x43NUMBERBlock
0x44DIFFICULTYBlockFrontierLondon
0x44PREVRANDAOBlockParisEIP-4399
0x45GASLIMITBlock
0x46CHAINIDBlockIstanbulEIP-1344
0x47SELFBALANCEBlockIstanbulEIP-1884
0x48BASEFEEBlockLondonEIP-3198
0x50POPPop
0x51MLOADMemory
0x52MSTOREMemory
0x53MSTORE8Memory
0x54SLOADStorage
0x55SSTOREStorage
0x56JUMPControl Flow
0x57JUMPIControl Flow
0x58PCControl Flow
0x59MSIZEMemory
0x5AGASControl Flow
0x5BJUMPDESTControl Flow
0x5FPUSH0PushShanghaiEIP-3855
0x60PUSH1Push
0x61PUSH2Push
0x62PUSH3Push
0x63PUSH4Push
0x64PUSH5Push
0x65PUSH6Push
0x66PUSH7Push
0x67PUSH8Push
0x68PUSH9Push
0x69PUSH10Push
0x6APUSH11Push
0x6BPUSH12Push
0x6CPUSH13Push
0x6DPUSH14Push
0x6EPUSH15Push
0x6FPUSH16Push
0x70PUSH17Push
0x71PUSH18Push
0x72PUSH19Push
0x73PUSH20Push
0x74PUSH21Push
0x75PUSH22Push
0x76PUSH23Push
0x77PUSH24Push
0x78PUSH25Push
0x79PUSH26Push
0x7APUSH27Push
0x7BPUSH28Push
0x7CPUSH29Push
0x7DPUSH30Push
0x7EPUSH31Push
0x7FPUSH32Push
0x80DUP1Dup
0x81DUP2Dup
0x82DUP3Dup
0x83DUP4Dup
0x84DUP5Dup
0x85DUP6Dup
0x86DUP7Dup
0x87DUP8Dup
0x88DUP9Dup
0x89DUP10Dup
0x8ADUP11Dup
0x8BDUP12Dup
0x8CDUP13Dup
0x8DDUP14Dup
0x8EDUP15Dup
0x8FDUP16Dup
0x90SWAP1Swap
0x91SWAP2Swap
0x92SWAP3Swap
0x93SWAP4Swap
0x94SWAP5Swap
0x95SWAP6Swap
0x96SWAP7Swap
0x97SWAP8Swap
0x98SWAP9Swap
0x99SWAP10Swap
0x9ASWAP11Swap
0x9BSWAP12Swap
0x9CSWAP13Swap
0x9DSWAP14Swap
0x9ESWAP15Swap
0x9FSWAP16Swap
0xA0LOG0Log
0xA1LOG1Log
0xA2LOG2Log
0xA3LOG3Log
0xA4LOG4Log
0xF0CREATESystem
0xF1CALLSystem
0xF2CALLCODESystem
0xF3RETURNSystem
0xF4DELEGATECALLSystemHomesteadEIP-7
0xF5CREATE2SystemConstantinopleEIP-1014
0xFASTATICCALLSystemByzantiumEIP-214
0xFDREVERTSystemByzantiumEIP-140
0xFEINVALID/ABORTSystem(unofficial)EIP-141
0xFFSELFDESTRUCTSystem

https://github.com/ethereum/execution-specs/blob/master/lists/evm/pending-opcodes.md https://github.com/ethereum/execution-specs/blob/master/lists/evm/proposed-opcodes.md

References