모든 비트코인 거래는 거래가 유효한 조건을 설명하는 작은 프로그램을 실행합니다. 이 놀라운 행동은 비트코인 위에 다양한 계약을 구성하는 데 활용될 수 있습니다. 이 기사에서는 기본 거래 스크립트가 원리적으로 어떻게 작동하는지 배울 것입니다.
새로운 거래는 자신의 입력 필드의 거래 스크립트와 이전 거래의 거래 스크립트가 참으로 검증될 경우 유효합니다.
그림: 출력 거래는 스크립트 프로그램이 부울 TRUE를 결과로 내야만 유효합니다. 스크립트는 두 개의 스크립트 블록으로 구성되어 있으며, 스크립트의 실행 순서는 다음과 같습니다: 먼저 OutputTX의 ScriptA가 실행되고, 그 다음 InputTX의 ScriptB가 실행됩니다.
스크립트 언어는 스택 기반으로, 이는 각 데이터, 입력 또는 출력이 다른 데이터의 스택에 놓인다는 것을 의미합니다. OutputTX의 스크립트가 먼저 실행됩니다: 즉, 리디머의 코드입니다. 그러나 스크립트가 완전히 실행되기 전에 중단하고 거래를 유효하다고 표시하는 것은 불가능합니다. 마지막으로 InputTX의 ScriptB가 실행되고 프로그램이 종료될 때 반환 값이 OutputTX가 유효한지 여부를 결정합니다.
증명 가능한 사용 불가능한 거래
널 거래는 아마도 가장 간단한 거래입니다.
이 거래는 항상 유효하지 않습니다. ScriptA에 어떤 코드가 있든, ScriptB가 실행될 때 OP_RETURN op-code가 거래 스크립트의 실행을 중단하고 FALSE로 검증합니다. 이 패턴은 종종 블록체인에 데이터를 인코딩하는 데 사용됩니다. OP_RETURN 이후에는 임의의 데이터를 삽입할 수 있습니다. 장점은 간단한 비트코인 노드가 거래를 잘라내어 메모리를 절약할 수 있고, 전체 노드는 이를 보유할 수 있다는 것입니다. 이는 데이터를 저장하기 위해 블록체인을 ‘오용’할 때 좋은 행동으로 간주됩니다.
누구나 사용할 수 있는 거래
첫 번째 거래의 출력 스크립트가 비어 있다면, 리디밍하는 두 번째 거래는 스택에 TRUE를 간단히 넣어 거래를 유효하게 만들 수 있습니다. 운이 좋다면 그러한 ‘비어 있는’ 거래를 발견할 수 있는 사람이라면 누구나 할 수 있습니다. 누구나 사용할 수 있는 거래는 현재 비표준이며, 네트워크에서 방송되지 않습니다. 그러나 미래에 중요한 역할을 할 수 있습니다, 예를 들어 신뢰 채권과 같은 경우에.
생성 거래
일반적으로 비트코인 거래는 이전 거래(입력 거래)에 대해 검증됩니다. 채굴자가 해시 경쟁에서 이기고 상금을 리디밍할 때, 이전 거래는 없습니다. 그는 공개적으로 알려진 채굴 수수료로 Input TX를 간단히 생성합니다. 그러한 거래를 리디밍하는 것은 Input TX의 공개 키의 유효한 서명을 제공할 수 있는 누구에게나 허용됩니다, 즉 채굴자 자신입니다.
이제 스크립트를 단계별로 실행할 시간입니다. 거래 스크립트는 스택에서 실행됩니다. 처음에는 스택이 비어 있고 프로그램은 다음과 같습니다:
OP_CHECKSIG
- 먼저 프로그램은 첫 번째 토큰을 읽고, 데이터이므로 스택에 넣습니다. 이는 권한 있는 리디머의 개인 키로 암호화된 데이터 조각이어야 합니다.
- 이제 두 번째 토큰도 데이터이므로 pubkey를 스택에 넣습니다. pubkey는 리디머의 공개 키(해시되지 않은 비트코인 주소)입니다. 이 두 작업이 끝나면 스택은 다음과 같습니다:
다음 토큰은 연산입니다. OP_CHECKSIG는 스택에서 첫 번째 인수를 가져와 두 번째 인수를 검증합니다. 기본적으로 공개 키로 열려고 시도합니다. 성공하면 true를 반환하여 거래 Output TX를 유효하게 만듭니다.
우리는 보았습니다: 개인 키의 소유자만 생성 거래를 리디밍할 수 있으며, 그는 운이 좋은 채굴자입니다.
단순 거래
표준 거래 스크립트는 다음과 같습니다:
따라서 전체 스크립트는 다음과 같습니다:
OP_DUP OP_HASH160
OP_EQUALVERIFY OP_CHECKSIG
프로그램의 실행을 단계별로 살펴보겠습니다:
- 두 개의 데이터 토큰이 프로그램의 처음 두 단계에서 스택에 놓입니다.
- 연산 OP_DUP는 스택의 첫 번째 요소를 복제하여 다음과 같이 만듭니다:
- 연산 OP_HASH160은 스택의 첫 번째 요소를 해시하여 다음과 같이 만듭니다:
- 스택에 놓입니다:
- 연산 OP_EQUALVERIFY는 스택의 첫 번째 두 요소를 비교합니다. 실제로 이것은 조합된 연산입니다: OP_EQUAL과 OP_VERIFY가 실행됩니다. OP_EQUAL은 두 요소가 같으면 스택에 TRUE를 놓습니다. OP_VERIFY는 스택의 최상위 요소가 참이면 거래를 유효하다고 표시하고, 참이면 최상위 스택 요소를 제거하며, 거짓이면 그대로 둡니다. 일반적으로 스택에서 실행되는 명령은 스택에서 매개변수를 가져오고 결과를 스택에 놓습니다. 따라서 OP_VERIFY는 거짓일 때 정상적으로 작동하며, 결과를 스택에 남깁니다. 그러나 참일 때 비정상적으로 작동합니다. 결과 TRUE를 스택에서 제거하여 다음 매개변수로 진행합니다. 긍정적인 검증의 결과는 다음과 같습니다:
- 마지막으로 스택의 서명이 생성 거래와 동일한 방식으로 OP_CHECKSIG로 검증됩니다. 검증이 성공하면 TRUE가 반환됩니다.
따라서 단순 거래는 전혀 단순하지 않습니다. 먼저 리디머가 주장하는 공개 키가 Input TX에 있었던 것과 동일한지 증명한 다음, 리디머가 거래의 서명을 검증하여 올바른 비밀 키를 가지고 있는지 확인합니다.
결론
이 기사에서는 거래 스크립트가 지불자의 입력 스크립트와 이전 거래의 출력 스크립트로 구성된다는 것을 배웠습니다. 스크립트는 거래가 유효하다고 간주되기 위해 TRUE로 검증되어야 합니다. 우리는 스크립트가 단계별로 실행되는 방식을 보았습니다.
이 지식을 바탕으로 다중 서명, 에스크로 및 스마트 자산과 같은 더 고급 계약에 대해 배울 수 있습니다.
참조
opcodes 및 스크립트의 세부 설명: https://en.bitcoin.it/wiki/Script
일부 고급 거래 스크립트: https://en.bitcoin.it/wiki/Contracts
비트코인에 대한 기술적 소개: youtube.com/watch?v=Lx9zgZCMqXE
비트코인 프로토콜이 실제로 작동하는 방식: michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works
비탈릭 부테린의 비트코인 프로그래밍 소개: https://bitcoinmagazine.com/articles/developers-introduction-bitcoin-1388634312