데이터 푸시 옵코드 (Data-Pushing Opcode)
데이터 푸시 옵코드는 비트코인 스크립트 언어에서 0x01부터 0x4e까지의 연산 코드(opcode)로, pubkey 스크립트 또는 시그니처 스크립트 안에 들어 있는 데이터를 스택에 올려 놓는(푸시하는) 역할만 합니다. 이 opcode들은 서명 확인이나 비교 같은 연산을 직접 수행하지 않으며, 그런 연산은 다른 opcode가 스택에 올라온 데이터를 사용해 수행합니다.
데이터 푸시 옵코드 이해하기
비트코인 스크립트는 스택 기반 언어입니다. 서명, 공개 키, 공개 키 해시 같은 값은 스크립트 안에 바이트열로 들어 있고, 데이터 푸시 옵코드는 “다음에 오는 몇 바이트를 하나의 데이터로 스택에 올려라”라고 알려 주는 표시입니다. 레시피에 비유하면 재료를 계량해 그릇에 담는 단계에 해당하고, 섞거나 굽는 단계는 다른 opcode가 맡습니다.
종류
- 0x01–0x4b (PUSHBYTES_1–PUSHBYTES_75, 흔히 PUSH1–PUSH75): opcode 값 자체가 길이를 나타내며, 바로 뒤의 1~75바이트를 스택에 푸시합니다. 예를 들어 0x14는 다음 20바이트(공개 키 해시)를 푸시합니다.
- 0x4c PUSHDATA1: 다음 1바이트가 길이를 나타내며, 최대 255바이트를 푸시할 수 있습니다.
- 0x4d PUSHDATA2: 다음 2바이트(리틀 엔디언)가 길이를 나타냅니다.
- 0x4e PUSHDATA4: 다음 4바이트가 길이를 나타냅니다. 형식상 최대 4GB의 길이를 표현할 수 있지만, 합의 규칙상 스택 원소 하나는 520바이트로 제한됩니다.
0x00(OP_0)이나 OP_1–OP_16처럼 상수 값을 스택에 올리는 opcode도 있지만, 이들은 뒤따르는 데이터를 읽지 않는 별도의 상수 opcode로 분류됩니다.
다른 opcode와의 구분
- OP_DUP: 스택의 최상위 항목을 복제합니다.
- OP_EQUALVERIFY: 스택의 최상위 두 항목이 같은지 확인한 다음, 같으면 제거합니다. 그렇지 않으면 실패합니다.
- OP_CHECKSIG: 서명이 공개 키와 트랜잭션에 대해 유효한지 확인합니다.
이들은 연산 opcode이며 데이터 푸시 옵코드가 아닙니다. 데이터 푸시 옵코드는 이 연산들이 사용할 값을 준비할 뿐입니다.
트랜잭션에서의 동작 예시 (P2PKH)
- 시그니처 스크립트에서 데이터 푸시 옵코드가 서명과 공개 키를 차례로 스택에 푸시합니다.
- pubkey 스크립트에서 OP_DUP과 OP_HASH160이 공개 키를 복제해 해시하고, 0x14 푸시 옵코드가 기록된 20바이트 공개 키 해시를 스택에 올립니다.
- OP_EQUALVERIFY가 두 해시를 비교하고, OP_CHECKSIG가 서명을 확인합니다.
- 검증을 통과한 트랜잭션은 채굴자가 블록에 포함할 수 있습니다.
주의할 점
- 최소 인코딩: 같은 데이터를 여러 방식으로 푸시할 수 있지만, 표준 정책은 가장 짧은 푸시 방식을 요구합니다. 그렇지 않은 트랜잭션은 노드가 중계하지 않을 수 있습니다.
- 복잡성: 스크립트를 직접 작성하려면 기술적 이해가 필요하며, 길이 바이트를 잘못 쓰는 등 사용자 정의 스크립트의 오류는 자금 손실로 이어질 수 있습니다.
데이터 푸시 옵코드는 비트코인 스크립트가 서명, 공개 키, 해시 같은 데이터를 다루기 위한 기본 구성 요소입니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.