📜 비트코인 스크립트 Bitcoin Script
비트코인에 내장된 소형 프로그래밍 언어로, 코인을 쓸 수 있는 조건을 설정해요. 돈에 붙은 자물쇠와 그걸 여는 열쇠라고 생각하면 돼요. 규칙이 충족됐는지를 네트워크가 확인하고, 통과하면 코인이 이동해요.
🔐 쉽게 풀면 — 자물쇠와 열쇠
비트코인이 전송될 때마다 코인에는 '다음에 이 코인을 쓰려면 이 조건을 충족해야 한다'는 작은 프로그램이 붙어요. 이게 잠금 스크립트(기술 명칭은 scriptPubKey)예요. 보통 "이 주소의 소유자만 쓸 수 있다"는 내용이에요. 나중에 그 코인을 보내려면 본인의 디지털 서명과 공개키가 담긴 해제 스크립트(scriptSig, 혹은 최신 트랜잭션에서는 witness)를 제출해요. 열쇠가 자물쇠에 맞으면 거래가 유효해져요. 자판기와 비슷해요. 기계에 규칙이 있고, 그 규칙에 맞게 투입하면 나와요. 당신이 누구인지는 묻지 않아요.
🧮 노드가 실제로 검증하는 방법
스크립트는 스택 기반으로 동작해요. 명령어를 하나씩 순서대로 처리하면서 값을 쌓고(push) 꺼내는(pop) 방식이에요(마지막에 넣은 것을 먼저 꺼냄). 코인을 쓰려 할 때 노드는 같은 스택에서 해제 스크립트를 먼저 실행하고, 이어서 잠금 스크립트를 실행해요. 오류 없이 끝나고 스택 맨 위에 '참(true)' 값이 남으면 코인 이동이 허용돼요. 뭔가 실패하면 거래는 거부되고 코인은 그대로 남아요.
| 구성 요소 | 역할 |
|---|---|
| 🔒 잠금 스크립트 (scriptPubKey) | 코인에 붙은 지출 조건 — 자물쇠 |
| 🔑 해제 스크립트 (scriptSig / witness) | 조건을 충족하는 서명과 키 — 열쇠 |
| 🧮 스택 | 노드가 값을 쌓고 꺼내며 규칙을 검사하는 임시 공간 |
🛡️ 왜 일부러 단순하게 만들었나요?
스크립트에는 반복문도, 재귀도, 실행 사이에 남는 메모리도 없어요. 한마디로 무한 실행이 불가능하고 자유로운 연산도 안 돼요. 약점처럼 들리지만, 이건 안전을 위한 선택이에요. 스크립트는 반드시 빠르게 끝나기 때문에 끝없이 돌아가는 코드로 네트워크를 마비시키는 서비스 거부(DoS) 공격의 흔한 방식이 통하지 않아요. 규칙이 작고 고정돼 있어서 거래 결과를 미리 예측하기도 쉬워요.
🧩 스크립트로 실제로 가능한 것들
이런 제약에도 스크립트는 진짜 프로그래밍 가능한 돈을 구현하기에 충분해요. 사람들이 '비트코인 스마트 컨트랙트'라고 부르는 것들이 바로 이것들이에요:
- 🖊️ 멀티시그(다중 서명) — 2-of-3처럼 여러 키가 있어야 쓸 수 있는 코인. 공동 금고나 에스크로에 쓰여요 (멀티시그 지갑 참고)
- ⏳ 타임락 — 특정 시간이나 블록 높이 이전엔 쓸 수 없는 코인. 베스팅이나 에스크로에 유용해요
- ⚡ 해시 타임락 계약(HTLC) — 라이트닝 네트워크와 크로스체인 스왑의 핵심 구성 요소예요
🌿 탭루트(Taproot) 업그레이드(2021년 11월 활성화)로 슈노르 서명과 Tapscript/MAST가 추가됐어요. 복잡한 스크립트 계약도 일반 결제처럼 보이게 할 수 있어서 프라이버시와 효율성이 올라갔어요.
❓ 자주 묻는 질문
- 그럼 비트코인은 스마트 컨트랙트가 안 되나요?
- 됩니다, 다만 범위가 제한적이에요. 비트코인은 출시 첫날부터 스크립트를 탑재했고, 이 덕분에 멀티시그 지갑·타임락·라이트닝 네트워크 같은 실제 프로그래밍 결제가 가능해요. '스마트 컨트랙트가 아예 안 된다'가 아니라, '의도적으로 단순하게 설계됐다'는 표현이 정확해요.
- 왜 일부러 기능을 제한했나요?
- 안전성과 예측 가능성 때문이에요. 스크립트에는 반복문도 없고 무한 실행도 불가능해서, 스크립트는 항상 빠르게 끝나요. 덕분에 끝없이 돌아가는 코드로 네트워크를 마비시키는 공격(서비스 거부 공격)을 막을 수 있고, 결과를 미리 예측하기도 쉬워요.
- 내가 직접 비트코인 스크립트를 작성해야 하나요?
- 거의 그럴 일 없어요. 비트코인을 받거나 보낼 때마다 지갑이 잠금·해제 스크립트를 뒤에서 자동으로 만들어줘요. 멀티시그 지갑이나 타임락처럼 고급 설정을 직접 구성할 때만 스크립트를 가까이 접하게 돼요.