EIP-141 지정 무효 EVM 명령어 (Designated invalid EVM instruction)
최종 확정 · EVM·실행 · 원문 상태 Final · 2017-02-09 작성
EVM 옵코드 0xfe를 영구 무효 명령어 INVALID로 지정합니다. 컨트랙트는 이 명령어로 실행을 일부러 중단할 수 있습니다.
왜 필요한가
이더리움 가상 머신(EVM, Ethereum Virtual Machine)은 스마트 컨트랙트 코드를 명령어 단위로 실행합니다. 각 명령어는 옵코드(opcode)라는 1바이트 값으로 구분되는데, 아직 아무 기능도 배정되지 않은 빈 자리도 있습니다. 빈 자리는 나중에 새 기능이 추가되면서 다른 의미가 생길 수 있어 어떤 자리가 앞으로도 계속 무효로 남는다는 보장이 없었습니다. 이 EIP는 0xfe 한 자리를 공식적으로 무효 명령어로 지정해 앞으로도 무효로 남도록 못 박습니다. 이렇게 하면 컨트랙트가 실행을 일부러 멈추고 싶을 때 이 명령어를 쓸 수 있고 다른 종류의 실패와 구분되는 뚜렷한 중단 이유가 됩니다.
무엇이 바뀌나
지금
- 앞으로도 계속 무효로 남는다고 보장된 옵코드 자리가 없습니다
- 실행을 일부러 중단할 때 쓸 공식 명령어가 정해져 있지 않습니다
EIP-141 이후
- 옵코드 0xfe가 INVALID 명령어로 공식 지정됩니다
- 컨트랙트가 실행을 중단(abort)하는 뚜렷한 이유로 이 명령어를 쓸 수 있습니다
- 0xfe는 과거에 쓰인 적이 없어 기존 컨트랙트는 그대로 동작합니다
누구에게 영향이 있나
- 컨트랙트 개발자와 컴파일러 제작자: 실행을 중단하고 싶은 지점에 쓸 수 있는 공식 무효 명령어가 생깁니다.
- 클라이언트 팀: 0xfe를 INVALID 명령어로 처리하도록 명세가 고정됩니다.
- 일반 사용자: 이 명령어는 과거에 쓰인 적이 없어 기존 컨트랙트와 사용 경험에는 영향이 없습니다.
심층 설명
0xfe를 INVALID 명령어로 지정
명세는 한 문장입니다. 옵코드 0xfe가 INVALID 명령어라는 것입니다. EVM의 옵코드는 1바이트 값으로 명령어를 식별하는데, 이 EIP는 0xfe 자리에 어떤 유효한 동작도 배정하지 않고 무효라는 의미 자체를 명세로 고정합니다. 제목이 'Designated invalid EVM instruction'인 이유가 여기에 있습니다. 단순히 현재 정의되지 않은 상태가 아니라, 앞으로도 무효 명령어로 남도록 지정(designate)하기 때문입니다. Abstract도 같은 내용을 한 문장으로 요약합니다. 하나의 명령어를 무효 명령어로 남도록 지정한다는 것입니다.
중단(ABORT) 명령어 역할
원문은 INVALID 명령어를 실행 중단에 쓸 수 있다고 명시하며 ABORT 명령어 역할을 겸한다(duplicates as an ABORT instruction)고 적습니다. Motivation 절은 이 무효 명령어가 실행을 중단하는 구분되는 이유(distinct reason)로 쓰일 수 있다고 설명합니다. 즉 코드 안에서 실행을 멈추고 싶은 지점에 0xfe를 두면 그 지점에서 실행이 중단되고 이것이 다른 실패 원인과 구분되는 명확한 중단 사유가 됩니다.
하위 호환성
원문은 이 명령어가 과거에 사용된 적이 없으므로 기존 컨트랙트에 아무 영향이 없다고 밝힙니다. 이미 배포된 컨트랙트 가운데 0xfe에 다른 의미를 기대하고 쓰는 코드가 없다는 뜻입니다. 따라서 이 지정은 기존 동작을 바꾸는 변경이 아니라 지금까지 비어 있던 자리를 공식화하는 변경이고 하위 호환성 문제가 생기지 않는 이유도 이 한 가지 사실에 있습니다.
제안 성격과 상태
이 제안은 Alex Beregszaszi가 작성했고 2017년 2월 9일에 만들어졌습니다. 유형은 Standards Track, 카테고리는 Core이며 상태는 Final입니다. Final은 명세가 확정되어 더 이상 내용이 바뀌지 않는 단계를 뜻하므로, 0xfe를 INVALID 명령어로 지정한다는 명세는 확정된 사실로 읽으면 됩니다. 저작권은 CC0으로 포기되어 있습니다.