Chapter 8. P2SH 스크립트

J.Jeong
Programming Bitcoin
5 min readMay 31, 2020

아래 글에서는 “밑바닥부터 시작하는 비트코인(Programming Bitcoin) -한빛미디어(2019)”의 Chapter 6. 스크립트에 대한 내용을 다룬다. P2SH스크립트가 무엇인지, 어떻게 작동하는지 설명한다.

Reviewed by.

Programming Bitcoin Series

Chapter 1. 유한체
Chapter 2. 타원곡선
Chapter 3. 타원곡선 암호
Chapter 4. 직렬화
Chapter 5. 트랜잭션
Chapter 6. 스크립트
Chapter 7. 트랜잭션 검증과 생성
Chapter 8. p2sh 스크립트
Chapter 9. 블록
Chapter 10. 네트워킹
Chapter 11. 단순 지급 검증
Chapter 12. 블룸 필터
Chapter 13. 세그윗

Contents

  1. P2MS
  2. P2SH
  3. 왜 P2SH를 더 사용하는가

1. P2MS

P2MS는 여러개의 공개 키로 비트코인을 잠글 수 있다. 그리고 설정에 따라 해제하기 위해서 잠근 공개 키의 일부 또는 모든 키의 서명을 요구할 수 있다. 예를 들면 3개의 공개키를 포함하고 2개의 서명을 요구하는 경우다. P2MS 역시 표준 스크립트이지만 현재는 P2SH로 한번 감싸서 사용된다.

P2MS 스크립트 구성

잠금 스크립트는 아래와 같이 구성된다.

  1. 필요한 서명 개수를 나타내는 OP코드(M)
  2. 공개 키 집합
  3. 포함된 공개 키 개수를 나타내는 OP코드(N)
  4. CHECKMULTISIG OP코드

해제 스크립트는 필요한 서명(M)을 포함한다.

P2MS 스크립트 실행

스크립트가 실행되면 모든 서명과 공개 키를 스택에 담는다. CHECKMULTISIG 연산자를 만나면 N개의 공개 키와 M개의 서명을 스택에서 꺼낸다. 모든 서명과 공개 키를 꺼내면 서명을 공개 키와 하나씩 비교한다. 비교한 공개 키와 맞지 않으면 다음 공개 키로 이동한다.

P2MS 한계

  • P2MS는 주소 형식에 맞지 않다. 따라서 P2MS로 비트코인을 잠갔다면 스스로 잠금 스크립트를 생성하고 가공되지 않은 스크립트를 직접 보내야만 한다. 더 심한 경우 트랜잭션이 생성되지 않을 수 있다. 대부분의 지갑에서는 주소로만 거래를 생성하고 스크립트로 자체로는 만들지 않는다.
  • P2MS는 3개의 공개 키만 포함할 수 있다. UTXO에 너무 많은 데이터를 저장하는 것을 막기 위해 공개 키는 3개 까지만 허용한다. 하지만 P2SH는 최대 15개의 공개 키까지 포함할 수 있다.

2. P2SH

P2SH는 2012년 4월 표준 스크립트로 소개되었다. P2SH는 스크립트를 해시하여 비트코인을 잠글 수 있다. 그리고 원래 스크립트를 사용하여 해제할 수 있다. 기본적으로 리딤 스크립트를 생성하고 쉽게 다른 사람들에게 공유 할 수 있도록 한다.

P2SH 스크립트 구성

잠금 스크립트는 리딤 스크립트를 해시한 해시값과 HASH160, EQUAL 연산자로 이루어진다. 해제 스크립트는 리딤 스크립트와 서명으로 이루어진다. 먼저 리딤 스크립트는 P2MS로 해제할 수 있다.

P2SH 스크립트 실행

P2SH는 두 단계로 실행한다.

1)표준 실행 : 리딤 스크립트를 해시한 값과 잠금 스크립의 해시 값이 같은지 검증한다.

출처: P2SH (https://learnmeabitcoin.com/)

2)리딤 스크립트 실행 : 특별한 부분으로 리딤 스크립트를 파싱하고 리딤 스크립트 포함하여 스크립트를 다시 실행한다.

출처: P2SH (https://learnmeabitcoin.com/)

3. 왜 P2SH를 사용하는가?

복잡한 잠금 스크립트를 다른 사람에게 공유하기 쉽기 때문이다. P2SH 전에 P2MS와 같은 복잡한 잠금 스크립트 사용하여 비트코인을 전송하려면 전체 잠금 스크립트를 보내야 했다. 하지만 P2SH를 사용하면 전체가 아닌 해시 값만 보내면 된다. 따라서 보내는 사람은 잠금 스크립트의 크기 때문에 고민하지 않아도 된다.

  • 보내는 사람은 거래 수수료 부담을 덜 수 있다. 잠금 스크립트 크기가 클 수록 트랜잭션 크기가 커진다. 따라서 보내는 사람은 거래 수수료를 더 많이 지불 해야한다.
  • P2SH 잠금 스크립트로 주소를 생성할 수 있다. P2SH는 고정된 구조를 가지고 있어 쉽게 표준 주소 형태를 만들 수 있다. 따라서 잠금 스크립트를 주소로 바꾸어서 쉽게 공유할 수 있다.
  • P2SH는 기밀성이 좋다. P2SH 잠금 스크립트는 다른 잠금 스크립트를 해시한 값으로 구성되어 있다. 따라서 어떤 종류의 잠금 스크립트가 해시 되었는지 알 수 없다.
  • UTXO 크기를 줄일 수 있다. 비트코인 프로그램을 빠르게 실행하기 위해서 UTXO를컴퓨터 RAM에 저장한다. UTXO에는 잠금 스크립트가 포함되어 있어 P2MS처럼 사이즈가 큰 스크립트 보다 필요한 RAM 크기를 줄일 수 있다.

요약

P2SH는 공개키가 아닌 스크립트 해시에 지불하는 개념이다. 여러 공개키를 사용하는 경우 잠금 스크립트는 매우 길어진다. 따라서 이 점을 보완하기 위해서 공개 키 부분을 따로 빼서 리딤 스크립트를 생성한다. 그리고 이 리딤 스크립트를 해시하여 잠금 스크립트에 포함한다. P2SH는 하나 이상의 공개 키, 개인 키가 필요하다. 공동사업자 또는 회사에서 여러 단계 승인이 필요한 결제를 처리할 때 사용할 수 있다.

참고자료 : 프로그래밍 비트코인(한빛미디어, 2019), Learn Me a Bitcoin (https://learnmeabitcoin.com/)

--

--