컴퓨터공학
Bytecode바이트코드
바이트코드(Bytecode)는 고수준 프로그래밍 언어 소스 코드를 컴파일한 중간 표현으로, 가상 머신(VM)이 해석·실행하는 저수준 명령어 집합이다. 기계어보다 추상적이고 소스 코드보다 낮은 수준이다. 블록체인에서는 Solidity, Vyper 등의 스마트 컨트랙트 언어를 EVM 바이트코드로 컴파일해 블록체인에 배포한다.
바이트코드의 위치
EVM 바이트코드의 구성
바이트코드는 opcode(연산 코드) 의 시퀀스다.
| Opcode | 값 | 설명 |
|---|---|---|
| PUSH1 | 0x60 | 1바이트 값을 스택에 추가 |
| ADD | 0x01 | 스택 상위 두 값 더하기 |
| SSTORE | 0x55 | 스토리지에 값 저장 |
| CALL | 0xF1 | 다른 컨트랙트 호출 |
| RETURN | 0xF3 | 실행 결과 반환 |
바이트코드 vs 소스 코드
| 항목 | 소스 코드 | 바이트코드 |
|---|---|---|
| 읽기 | 사람이 읽을 수 있음 | 기계 전용 |
| 크기 | 크고 설명적 | 작고 효율적 |
| 실행 | 직접 실행 불가 | VM이 실행 |
| 검증 | 소스 공개 필요 | 블록체인에 저장됨 |
배포 바이트코드 vs 런타임 바이트코드
컴파일 결과물은 두 가지 바이트코드로 구성된다.
| 유형 | 설명 | 블록체인 저장 |
|---|---|---|
| 배포 바이트코드 (Creation Code) | 컨트랙트 초기화 로직 포함, 배포 트랜잭션에 사용 | 저장 안됨 |
| 런타임 바이트코드 (Runtime Code) | 실제 함수 로직, 호출 시 실행 | 컨트랙트 주소에 저장 |
실제 바이트코드 예시 (단순 저장 컨트랙트):
0x6080604052348015600f57600080fd5b50...
각 2자리 16진수(0~FF)가 하나의 opcode 또는 데이터를 나타낸다.
블록체인 배포와 검증
스마트 컨트랙트는 바이트코드 형태로 블록체인에 저장된다. Etherscan 등에서 소스코드를 업로드하면 바이트코드와 일치하는지 검증해 "Verified" 상태가 된다.
관련 개념
- •컴파일 — 소스 코드를 바이트코드로 변환하는 과정
- •EVM — EVM 바이트코드를 실행하는 가상 머신
- •Solidity — EVM 바이트코드로 컴파일되는 언어
- •스마트 컨트랙트 — 바이트코드로 블록체인에 배포되는 프로그램