옵코드 (Opcode)
옵코드(Opcode)는 데이터를 푸시하거나 pubkey script 또는 signature script 내에서 기능을 수행하는 Bitcoin Script 언어의 작업 코드(연산 코드)입니다. 각 옵코드는 1바이트 값으로 표현되며, 이 명령어들이 모여 비트코인을 어떤 조건에서 지출할 수 있는지 정의합니다.
Bitcoin Script 언어의 기본 사항
Bitcoin Script는 비트코인 네트워크에서 트랜잭션 처리에 쓰이는 스택 기반 프로그래밍 언어입니다. 스크립트는 왼쪽부터 차례로 실행되며, 옵코드는 스택에 값을 넣거나 스택 맨 위의 값을 꺼내 연산합니다. 반복문이 없어 실행이 반드시 끝나도록 설계되었습니다.
옵코드의 두 가지 역할
- 데이터 푸시: 일부 옵코드는 데이터를 스택에 넣도록(푸시) 설계되었습니다. 이 데이터는 공개 키, 공개 키 해시, 서명 등 무엇이든 될 수 있습니다. 예를 들어 값 0x01~0x4b의 옵코드는 뒤따르는 1~75바이트를 그대로 푸시하고, 더 긴 데이터에는 OP_PUSHDATA1/2/4를 씁니다.
- 기능 수행: 데이터를 푸시하지 않는 옵코드(non-data-pushing opcode)는 서명 검증이나 조건 확인 같은 기능을 수행해, 트랜잭션이 처리되기 전에 정해진 기준을 충족하는지 확인합니다.
대표적인 옵코드 예시
- OP_DUP: 스택 맨 위의 값을 복제합니다.
- OP_HASH160: 스택 맨 위의 값을 SHA-256 후 RIPEMD-160으로 해시합니다.
- OP_EQUALVERIFY: 맨 위 두 값이 같은지 확인하고, 다르면 스크립트를 실패시킵니다.
- OP_CHECKSIG: 서명이 공개 키와 트랜잭션에 대해 유효한지 검증합니다. 여러 서명을 요구할 때는 OP_CHECKMULTISIG를 씁니다.
- OP_CHECKLOCKTIMEVERIFY / OP_CHECKSEQUENCEVERIFY: 정해진 시점이나 블록 수가 지나기 전에는 지출할 수 없도록 하는 타임락을 겁니다.
- OP_RETURN: 해당 출력을 지출할 수 없게 만들며, 블록체인에 소량의 데이터를 기록하는 데 쓰입니다.
가장 흔한 P2PKH 출력의 pubkey script는 OP_DUP OP_HASH160 <공개 키 해시> OP_EQUALVERIFY OP_CHECKSIG입니다. 지출하는 쪽이 signature script로 서명과 공개 키를 푸시하면, 공개 키의 해시가 일치하는지와 서명이 유효한지를 차례로 확인합니다.
스크립트의 역할
- Pubkey Script:
- 이 스크립트는 비트코인을 지출하기 위해 충족해야 하는 조건을 지정합니다. 보통 공개 키(또는 그 해시)를 푸시하는 옵코드와 서명을 검증하는 옵코드가 들어 있습니다.
- Signature Script:
- 이 스크립트는 pubkey script에서 설정한 조건을 충족하는 데 필요한 데이터(서명 등)를 제공해 사실상 트랜잭션을 승인합니다.
이러한 스크립트와 옵코드는 비트코인 네트워크에서 안전하고 검증 가능한 트랜잭션을 보장하는, 블록체인 기술의 필수 구성 요소입니다.
옵코드의 장점:
- 유연성: 옵코드를 조합하면 비트코인 블록체인에서 복잡한 조건의 스크립트(스마트 계약)를 만들어 다양한 지출 조건과 자동 실행을 구현할 수 있습니다.
- 보안: 일부 옵코드는 다중 서명 요구나 타임락(시간 잠금) 같은 조건을 강제해 트랜잭션 보안을 높이고 상대방 위험을 줄입니다.
옵코드의 단점:
- 복잡성: 옵코드를 제대로 이해하고 활용하려면 Bitcoin Script 언어에 대한 깊은 기술적 이해가 필요해, 일부 사용자에게는 진입 장벽이 됩니다.
- 보안 위험: 옵코드는 보안을 강화할 수 있지만, 잘못 사용하거나 특정 옵코드에 취약점이 있으면 트랜잭션이 공격이나 악용에 노출될 수 있습니다. 이런 이유로 초기 비트코인에서 일부 옵코드(OP_CAT 등)가 비활성화되었습니다.
- 제한된 지원: 모든 거래소나 플랫폼이 여러 옵코드로 이루어진 복잡한 비트코인 스크립트를 완전히 지원하는 것은 아니어서, 환경에 따라 실제 활용이 제한될 수 있습니다.
일상 속 비유:
- 데이터 푸시:
- 계산원이 계산대에 상품 가격을 입력합니다.
- 어떤 사람이 자신의 전화번호를 종이에 적습니다.
- 기능 수행:
- 요리사가 케이크를 굽기 위해 레시피를 따릅니다.
- 운전자가 목적지까지 내비게이션 안내를 따릅니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.