# 데이터 푸시 옵코드 (Data-Pushing Opcode)

**데이터 푸시 옵코드**는 비트코인 스크립트 언어에서 0x01부터 0x4e까지의 연산 코드(opcode)로, pubkey 스크립트 또는 시그니처 스크립트 안에 들어 있는 데이터를 스택에 올려 놓는(푸시하는) 역할만 합니다. 이 opcode들은 서명 확인이나 비교 같은 연산을 직접 수행하지 않으며, 그런 연산은 다른 opcode가 스택에 올라온 데이터를 사용해 수행합니다.

## 데이터 푸시 옵코드 이해하기

비트코인 스크립트는 스택 기반 언어입니다. 서명, 공개 키, 공개 키 해시 같은 값은 스크립트 안에 바이트열로 들어 있고, 데이터 푸시 옵코드는 “다음에 오는 몇 바이트를 하나의 데이터로 스택에 올려라”라고 알려 주는 표시입니다. 레시피에 비유하면 재료를 계량해 그릇에 담는 단계에 해당하고, 섞거나 굽는 단계는 다른 opcode가 맡습니다.

## 종류

1. **0x01–0x4b (PUSHBYTES_1–PUSHBYTES_75, 흔히 PUSH1–PUSH75):** opcode 값 자체가 길이를 나타내며, 바로 뒤의 1~75바이트를 스택에 푸시합니다. 예를 들어 0x14는 다음 20바이트(공개 키 해시)를 푸시합니다.
2. **0x4c PUSHDATA1:** 다음 1바이트가 길이를 나타내며, 최대 255바이트를 푸시할 수 있습니다.
3. **0x4d PUSHDATA2:** 다음 2바이트(리틀 엔디언)가 길이를 나타냅니다.
4. **0x4e PUSHDATA4:** 다음 4바이트가 길이를 나타냅니다. 형식상 최대 4GB의 길이를 표현할 수 있지만, 합의 규칙상 스택 원소 하나는 520바이트로 제한됩니다.

0x00(OP_0)이나 OP_1–OP_16처럼 상수 값을 스택에 올리는 opcode도 있지만, 이들은 뒤따르는 데이터를 읽지 않는 별도의 상수 opcode로 분류됩니다.

## 다른 opcode와의 구분

- **OP_DUP:** 스택의 최상위 항목을 복제합니다.
- **OP_EQUALVERIFY:** 스택의 최상위 두 항목이 같은지 확인한 다음, 같으면 제거합니다. 그렇지 않으면 실패합니다.
- **OP_CHECKSIG:** 서명이 공개 키와 트랜잭션에 대해 유효한지 확인합니다.

이들은 연산 opcode이며 데이터 푸시 옵코드가 아닙니다. 데이터 푸시 옵코드는 이 연산들이 사용할 값을 준비할 뿐입니다.

## 트랜잭션에서의 동작 예시 (P2PKH)

1. 시그니처 스크립트에서 데이터 푸시 옵코드가 서명과 공개 키를 차례로 스택에 푸시합니다.
2. pubkey 스크립트에서 OP_DUP과 OP_HASH160이 공개 키를 복제해 해시하고, 0x14 푸시 옵코드가 기록된 20바이트 공개 키 해시를 스택에 올립니다.
3. OP_EQUALVERIFY가 두 해시를 비교하고, OP_CHECKSIG가 서명을 확인합니다.
4. 검증을 통과한 트랜잭션은 채굴자가 블록에 포함할 수 있습니다.

## 주의할 점

- **최소 인코딩:** 같은 데이터를 여러 방식으로 푸시할 수 있지만, 표준 정책은 가장 짧은 푸시 방식을 요구합니다. 그렇지 않은 트랜잭션은 노드가 중계하지 않을 수 있습니다.
- **복잡성:** 스크립트를 직접 작성하려면 기술적 이해가 필요하며, 길이 바이트를 잘못 쓰는 등 사용자 정의 스크립트의 오류는 자금 손실로 이어질 수 있습니다.

데이터 푸시 옵코드는 비트코인 스크립트가 서명, 공개 키, 해시 같은 데이터를 다루기 위한 기본 구성 요소입니다.

---
출처: https://achivx.kr/glossary/data-pushing-opcode-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%91%B8%EC%8B%9C-%EC%98%A4%ED%8D%BC%EC%BD%94%EB%93%9C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
