비트코인/비트코인 구조

[비트코인 구조] 잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초

라이튼 2022. 8. 29. 16:25

미리 알아야 할 내용들


 

[비트코인 구조] 비트코인 트랜잭션(Transaction) 기초

미리 알면 좋은 내용들 [블록체인 용어] 블록체인(Block Chain)  블록체인이란 발생한 거래들을 블록에 담고 블록들을 연결하여 나눠가짐으로써 탈중앙화 된 단일 장부를 유지하는 것입니다. 먼저

kwjdnjs.tistory.com

 

[비트코인 기본 구조] 5. 채굴(Mining)

 작업증명에는 많은 시간과 비용이 들어갑니다. 따라서 중앙화 되지 않고 분산화된 네트워크에서 이러한 작업을 수행하도록 독려하려면 인센티브가 필요합니다. 작업증명에 성공한 노드에게

kwjdnjs.tistory.com

 

[비트코인 암호학] 4.1 디지털 서명

 디지털 서명은 공개키 암호화를 이용하여 전송된 데이터를 증명하는 방법입니다. 예를 들어 A가 B에게 비트코인을 이체하려고 한다면, 먼저 A는 공개된 네트워크를 통해 비트코인이 들어있는

kwjdnjs.tistory.com

 

[비트코인 암호학] 4.2 ECDSA - 1

 지금까지 알아봤던 내용들을 정리해보겠습니다. 먼저 타원곡선과 점 덧셈 그리고 유한체 타원곡선과 스칼라 곱셈에 대해 살펴봤습니다. 이후 이 내용들을 토대로 다음과 같이 secp256k1에서 정

kwjdnjs.tistory.com

 

[비트코인 암호학] 4.3 ECDSA - 2

 이번 글에서는 이전 글에서 생성했던 서명을 검증해보겠습니다. [비트코인 암호학] 4.2 ECDSA - 1  지금까지 알아봤던 내용들을 정리해보겠습니다. 먼저 타원곡선과 점 덧셈 그리고 유한체 타원

kwjdnjs.tistory.com


잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초

 

 비트코인에는 스크립트라고 부르는 프로그래밍 언어가 존재합니다. 이 언어로 작성된 잠금 스크립트와 해제 스크립트는 비트코인 트랜잭션의 핵심 구성 요소입니다. 잠금 스크립트와 해제 스크립트 대해 알아보기 전에 비트코인의 발행과 거래에 대해 먼저 알아보겠습니다.

 

1. 비트코인의 발행: 채굴과 코인베이스 트랜잭션

 비트코인은 블록체인에서 블록을 생성하는 과정인 채굴의 보상으로써 발행됩니다. 이때 발행되는 비트코인의 양은 4년을 주기로 절반씩 줄어듭니다. 이를 반감기라고 합니다.

 

 비트코인의 생성은 코인베이스 트랜잭션을 통해 진행됩니다. 코인베이스 트랜잭션은 채굴자에게 비트코인을 발행하여 전송하는 트랜잭션으로 입력은 없이 출력만 존재합니다. 참고로 코인베이스 거래소와 코인베이스 트랜잭션은 서로 연관성이 없습니다.

 

 

2. 비트코인의 거래: 입력과 출력

 채굴자에 의해 생성된 비트코인은 이후 다른 사람들에게로 전파됩니다. 이 과정에서 트랜잭션들이 생성됩니다. 코인베이스 트랜잭션과 다르게 채굴자가 다른 사람에게 비트코인을 보내는 트랜잭션은 코인베이스 트랜잭션을 입력으로 구성합니다. 예를 들어 채굴자가 A와 B에게 24BTC를 송금할 경우 다음과 같이 표현할 수 있습니다.

 

 

 비트코인 거래에서 수수료는 입력에서 출력을 뺀 값으로 계산합니다. 이 트랜잭션에서 입력은 50BTC이고 출력 48BTC이기 때문에 수수료는 2BTC가 됩니다.

 

 여기까지의 과정을 보면 매우 중요한 사실들을 알 수 있습니다.

  1. 비트코인의 트랜잭션의 입력은 이전 트랜잭션의 출력입니다.
  2. 비트코인 트랜잭션의 수수료는 입력 - 출력으로 계산합니다.
  3. 수수료 계산 방식에 의해 새롭게 생성된 트랜잭션은 입력으로 들어온 이전 트랜잭션의 모든 출력 비트코인을 소모해야 합니다.

 여기서 의문점이 한 가지 발생합니다. 채굴자가 코인베이스 트랜잭션을 입력으로 하여 새로운 트랜잭션을 생성할 경우 트랜잭션 내부에서 모든 비트코인을 소모해야 합니다. 하지만 채굴자는 자신이 보유한 50BTC를 모두 소모하고 싶지 않을 수 있습니다. 즉 A에게 20BTC를 전송하는 것으로 트랜잭션을 완료하고 싶을 수 있습니다. 이런 경우에는 어떻게 해야 할까요?

 

 이에 대한 해답은 매우 단순합니다. A에게 전송할 20BTC 그리고 채굴자가 지불하고자 하는 수수료 2BTC를 제외한 28BTC를 다시 자신에게 전송합니다. 즉, 출력 값에 채굴자를 포함시킵니다.

 

 

 결과적으로 트랜잭션 내부에서 입력으로 들어온 50BTC는 모두 소모되었으며, A는 20BTC를 받고 채굴자는 28BTC의 거스름돈을 갖게 됩니다.


 여기에서 더 나아가 보겠습니다. 채굴자가 추가적인 블록을 채굴해 새로운 코인베이스 트랜잭션을 생성했다고 가정해보겠습니다.

 

 

 현재 채굴자의 비트코인 잔액은 이전 트랙잭션1을 포함해 28BTC + 50BTC = 78BTC라고 가정해보겠습니다. 이 상황에서 추가적으로 70BTC를 A에게 전송하려면 어떻게 해야 할까요? 50BTC 트랜잭션을 입력으로 하는 것으로는 비트코인이 부족합니다.

 

 

 하지만 채굴자는 분명 모두 합해서 총 78BTC를 보유하고 있습니다. 그 이유는 다른 트랜잭션에 28BTC가 있기 때문입니다. 결론적으로 채굴자가 70BTC를 전송하려면 추가적으로 다른 트랜잭션을 입력으로 받아야 합니다.

 

 

 이렇게 트랜잭션은 여러 입력과 여러 출력으로 구성되어 있으며, 대부분의 트랜잭션들은 각각 이전 트랜잭션과 다음 트랜잭션과 끊임없이 연결되어 비트코인의 송금이 진행됩니다.

 

3. 잠금 스크립트(scriptPubkey)

 비트코인은 트랜잭션 상에 존재합니다. 즉, 비트코인을 소유하는 것은 트랜잭션에 접근할 수 있는 개인키를 소유하는 것이지 비트코인 자체를 소유하는 것이 아닙니다. 따라서 비트코인 트랜잭션에는 각 출력과 입력에 대한 소유주 검증이 필요합니다. 이 과정에서 사용되는 것이 디지털 서명이며, 비트코인은 여기에 ECDSA를 사용하고 있습니다.

 

 잠금 스크립트와 해제 스크립트는 이러한 디지털 서명을 위해 필요한 스크립트입니다. 이 중 잠금 스크립트에 대해 먼저 알아보겠습니다.

 

 잠금 스크립트는 이름처럼 출력을 잠그는 스크립트입니다. 지금까지 알아봤던 것처럼 트랜잭션의 출력은 비트코인을 전송받을 다음 사람 즉, 비트코인의 다음 소유주에 대한 것입니다. 출력으로 받은 비트코인은 이후 입력으로 사용하여 다른 사람에게 전송할 수 있습니다. 즉, 출력을 생성하는 과정에서 다음 소유자만이 비트코인에 접근할 수 있도록 하는 장치가 필요합니다. 이때 사용하는 장치가 바로 잠금 스크립트입니다.

 

 잠금 스크립트는 쉽게 설명하면 자물쇠입니다. 비트코인의 다음 소유주는 해제 스크립트라고 부르는 열쇠를 이용해서 잠금 스크립트를 해제하고 비트코인을 사용할 수 있습니다. 가장 단순한 방식의 잠금 스크립트는 비트코인을 전송받게 될 다음 사용자의 공개키와 서명을 검증하는 ECDSA 관련 함수를 포함시키는 것입니다.

 

 

4. 해제 스크립트(scriptSig)

 해제 스크립트는 잠금스크립트를 해제하는 스크립트입니다. 이를 이해하기 위해서 먼저 ECDSA의 기본 구조를 다시 한번 살펴보겠습니다.

 ECDSA는 A가 공개키에 맞는 개인키를 소유하고 있는지 확인하기 위해서 공개키와 메시지 그리고 A의 서명을 통해 검증하는 알고리즘입니다. 공개키, 서명, 메시지만 있으면 해당 서명이 A가 전송한 것이라는 것을 증명할 수 있습니다.

 

 비트코인 트랜잭션 입장에서 생각해보겠습니다. 트랜잭션의 출력을 구성하는 과정에서 A의 공개키와 함께 서명을 검증할 수 있는 함수를 포함시켰습니다. 이를 해제하기 위해서는 메시지와 함께 A가 보유하고 있는 개인키를 통해 생성된 올바른 서명이 필요합니다. 메시지의 해시값 z는 트랜잭션을 통해 구할 수 있기 때문에 A는 자신의 서명만을 해제 스크립트에 포함시키면 됩니다. 만약 누군가가 올바르지 않은 서명을 이용해 해제 스크립트를 작성하여 A에게 보내진 비트코인(출력)에 접근한다면 잠금스크립트에 포함된 서명 검증 함수가 이를 거부할 것입니다. 거부된 트랜잭션은 블록에 포함되지 않고, 거래는 중단됩니다.

 

 

 비트코인은 이렇게 트랜잭션의 입력과 출력에 잠금 스크립트와 해제 스크립트를 도입해 소유주를 검증하고 트랜잭션이 올바른지 확인합니다. 이번 글에서는 실제 비트코인 스크립트의 구성과 스크립트 코드는 빠져있습니다. 이 부분은 이후 글들에서 다루겠습니다.

 

 지금까지 잠금 스크립트와 해제 스크립트의 기초였습니다. 감사합니다.

 

 

이어지는 글들


 

[비트코인 구조] UTXO

미리 알아야 할 내용들 [비트코인 구조] 잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초 미리 알아야 할 내용들 [비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 미리 알면 좋은 내용

kwjdnjs.tistory.com

 

[비트코인 구조] 스크립트(Script)와 Opcode, P2PK

미리 알아야 할 내용들 [비트코인 구조] 잠금 스크립트(scriptPubkey)와 해제 스크립트(scriptSig) 기초 미리 알아야 할 내용들 [비트코인 구조] 비트코인 트랜잭션(Transaction) 기초 미리 알면 좋은 내용

kwjdnjs.tistory.com