SlideShare a Scribd company logo
Mastering Bitcoin
Chap 7. Advanced Transactions and Scripting
Song Je-Ho
qwerwon@gmail.com
서명 스크립트
다중서명(Multisig)
 다중서명은 N개의 공개키가 스크립트 내에 기록되어 있고, 예상지출 상태를 풀기 위해서는 이
중 적어도 M개 이상의 개인키가 서명을 제공해야 한다는 조건을 설정함.
 잠금 스크립트
M <Public Key 1> <Public Key 2> … <Public Key N> N OP_CHECKMULTISIG
 검증 스크립트
OP_0 <Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C>
3 OP_CHECKMULTISIG
서명 스크립트
다중서명 (Multisig)
 다중서명을 사용하면 키를 여러 개 사용해야 하므로 당연히 보안상의 이점이 있다.
 [사례 1] 철수가 데스크톱 컴퓨터와 스마트폰에 개인키를 하나씩 보유한
경우(2-of-2 거래), 해커는 철수의 지갑을 해킹하기 위해선
데스크톱 컴퓨터와 스마트폰에 모두 접근해야 하는 어려움이 있다.
 [사례 2] A회사에서는 3-of-5 서명 지갑을 생성해 이사회에서 나눠 가졌다.
이 경우 5명의 이사회 임원 중 3명의 동의가 있어야 예산 집행이 가능하다.
서명 스크립트
다중서명 (Multisig) 실제 사용법(multisig address 생성&BTC 전송)
서명 스크립트
다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송)N개의 공개키로 multisig
address 생성
서명 스크립트
다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송)
Multisig address로 BTC를 보내는
Transaction 생성
서명 스크립트
다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송)
서명
서명 스크립트
다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송)
Transaction 전파
서명 스크립트
다중서명 (Multisig) 실제 사용법(multisig transaction 생성)
서명 스크립트
다중서명 (Multisig) 실제 사용법(multisig transaction 생성)
N개의 개인키 중 1개의 개인키로
서명(“complete” : false)
서명 스크립트
다중서명 (Multisig) 실제 사용법(multisig transaction 생성)
나머지 개인키로 서명(“complete” :
true)
서명 스크립트
Pay-to-Script-Hash( P2SH )
 복잡한 거래 스크립트 사용을 단순화 시킨 거래 방식
 P2SH로 인코딩된 스크립트
리딤 스크립트 2 PubKey1 PubKey2 PubKey3 PubKey 4 PubKey 5 5 OP_CHECKMULTISIG
잠금 스크립트 OP_HASH160 <20-byte hash of redeem script> OP_EQUL
해제 스크립트 Sig1 Sig2 redeem script
서명 스크립트
Pay-to-Script-Hash( P2SH )
 복잡한 거래 스크립트 사용을 단순화 시킨 거래 방식
 P2SH로 인코딩된 스크립트
리딤 스크립트 2 PubKey1 PubKey2 PubKey3 PubKey 4 PubKey 5 5 OP_CHECKMULTISIG
잠금 스크립트 OP_HASH160 <20-byte hash of redeem script> OP_EQUL
해제 스크립트 Sig1 Sig2 redeem script
잠금스크립트가 redeem script로 대체되어 거래를 보낼때 스크립트를 전부 입력하지않아서 유용함.
서명 스크립트
서명 스크립트
서명 스크립트
Benefit of Pay-to-Script-Hash( P2SH )
 복잡한 스크립트를 짧게 대체. 잠금 스크립트의 크기를 줄이고 그것을 해제스크립트로 이동.
 스크립트 구성의 부담을 송신자에게 넘긴다.
 잠금 스크립트의 길이가 줄어 UTXO에 저장되는 용량을 줄여줌.
 저장공간의 부담을 현재(payment time)에서 미래(when it is spent)로 이동시킨다.
서명 스크립트
Transaction Locktime
 트랜잭션을 일정시간동안 잠궈놓음.
 [예시] Alice가 Bob에게 locktime을 3개월을 걸어서 트랜잭션을 보냄.
• Bob 은 이를 3개월이 지나서 사용할 수 있다.
• 3개월동안 Alice는 double-spending 을 할 수 있게되는 문제점이 발생.
• Bob은 Alice의 double-spending을 막을 권한이 없음.
서명 스크립트
Check Lock Time Verify (CLTV)
 Output의 redeem script에 timelock을 추가해서 보냄.
 current block height + 12,960 (blocks) or current Unix epoch time + 7,760,000 (seconds)
 서명에 Bob의 키를 추가하여 Alice가 사용할 수 없게함.
 Bob은 3개월 이후에 사용할 수 있음.
Segregated Witness
Segwit
 비트코인의 합의 과정과 네트워크 프로토콜을 업그레이드함.
 블록의 구조를 보면 서명과 거래내역이 하나로 뭉쳐있음.
 블록의 크기를 1MB로 제한하면서 서명부분을 분리시켜 거래내용을 더 많이 담자.
서명란
거래내용
서명이 실제로 차지하는
크기는 크지않지만
서명란 자체가 차지하는
부피가 크다.
거래내용 서명란
Segregated Witness
Pay-to-Witness-Script-Hash(P2WSH)
 P2SH의 스크립트와 transaction.
Segregated Witness
Pay-to-Witness-Script-Hash(P2WSH)
 P2WSH의 스크립트가 조금 더 simple함.
 Transaction에서는 서명부분을 삭제하고 witness
참고 자료
 https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch07.asciidoc#with_p2sh
 https://gist.github.com/gavinandresen/3966071
 https://bitcoin.stackexchange.com/questions/3712/how-can-i-create-a-multi-signature-2-of-3-
transaction

More Related Content

More from 제호 송

Blockchain sharding
Blockchain shardingBlockchain sharding
Blockchain sharding
제호 송
 
Multisig and segwit
Multisig and segwitMultisig and segwit
Multisig and segwit
제호 송
 
About dapp
About dappAbout dapp
About dapp
제호 송
 
Cryptokitties Code Review
Cryptokitties Code ReviewCryptokitties Code Review
Cryptokitties Code Review
제호 송
 
Mastering ethereum(oracle)
Mastering ethereum(oracle)Mastering ethereum(oracle)
Mastering ethereum(oracle)
제호 송
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
제호 송
 
Mastering bitocin chap5
Mastering bitocin chap5Mastering bitocin chap5
Mastering bitocin chap5
제호 송
 
Mastering bitcoin chap6
Mastering bitcoin chap6Mastering bitcoin chap6
Mastering bitcoin chap6
제호 송
 
Mastering bitcoin chap1
Mastering bitcoin chap1Mastering bitcoin chap1
Mastering bitcoin chap1
제호 송
 
Mastering bitcoin chap8
Mastering bitcoin chap8Mastering bitcoin chap8
Mastering bitcoin chap8
제호 송
 

More from 제호 송 (10)

Blockchain sharding
Blockchain shardingBlockchain sharding
Blockchain sharding
 
Multisig and segwit
Multisig and segwitMultisig and segwit
Multisig and segwit
 
About dapp
About dappAbout dapp
About dapp
 
Cryptokitties Code Review
Cryptokitties Code ReviewCryptokitties Code Review
Cryptokitties Code Review
 
Mastering ethereum(oracle)
Mastering ethereum(oracle)Mastering ethereum(oracle)
Mastering ethereum(oracle)
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
Mastering bitocin chap5
Mastering bitocin chap5Mastering bitocin chap5
Mastering bitocin chap5
 
Mastering bitcoin chap6
Mastering bitcoin chap6Mastering bitcoin chap6
Mastering bitcoin chap6
 
Mastering bitcoin chap1
Mastering bitcoin chap1Mastering bitcoin chap1
Mastering bitcoin chap1
 
Mastering bitcoin chap8
Mastering bitcoin chap8Mastering bitcoin chap8
Mastering bitcoin chap8
 

Mastering bitcoin chap7

  • 1. Mastering Bitcoin Chap 7. Advanced Transactions and Scripting Song Je-Ho qwerwon@gmail.com
  • 2. 서명 스크립트 다중서명(Multisig)  다중서명은 N개의 공개키가 스크립트 내에 기록되어 있고, 예상지출 상태를 풀기 위해서는 이 중 적어도 M개 이상의 개인키가 서명을 제공해야 한다는 조건을 설정함.  잠금 스크립트 M <Public Key 1> <Public Key 2> … <Public Key N> N OP_CHECKMULTISIG  검증 스크립트 OP_0 <Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG
  • 3. 서명 스크립트 다중서명 (Multisig)  다중서명을 사용하면 키를 여러 개 사용해야 하므로 당연히 보안상의 이점이 있다.  [사례 1] 철수가 데스크톱 컴퓨터와 스마트폰에 개인키를 하나씩 보유한 경우(2-of-2 거래), 해커는 철수의 지갑을 해킹하기 위해선 데스크톱 컴퓨터와 스마트폰에 모두 접근해야 하는 어려움이 있다.  [사례 2] A회사에서는 3-of-5 서명 지갑을 생성해 이사회에서 나눠 가졌다. 이 경우 5명의 이사회 임원 중 3명의 동의가 있어야 예산 집행이 가능하다.
  • 4. 서명 스크립트 다중서명 (Multisig) 실제 사용법(multisig address 생성&BTC 전송)
  • 5. 서명 스크립트 다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송)N개의 공개키로 multisig address 생성
  • 6. 서명 스크립트 다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송) Multisig address로 BTC를 보내는 Transaction 생성
  • 7. 서명 스크립트 다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송) 서명
  • 8. 서명 스크립트 다중서명 (Multisig) 실제 사용법 (multisig address 생성&BTC 전송) Transaction 전파
  • 9. 서명 스크립트 다중서명 (Multisig) 실제 사용법(multisig transaction 생성)
  • 10. 서명 스크립트 다중서명 (Multisig) 실제 사용법(multisig transaction 생성) N개의 개인키 중 1개의 개인키로 서명(“complete” : false)
  • 11. 서명 스크립트 다중서명 (Multisig) 실제 사용법(multisig transaction 생성) 나머지 개인키로 서명(“complete” : true)
  • 12. 서명 스크립트 Pay-to-Script-Hash( P2SH )  복잡한 거래 스크립트 사용을 단순화 시킨 거래 방식  P2SH로 인코딩된 스크립트 리딤 스크립트 2 PubKey1 PubKey2 PubKey3 PubKey 4 PubKey 5 5 OP_CHECKMULTISIG 잠금 스크립트 OP_HASH160 <20-byte hash of redeem script> OP_EQUL 해제 스크립트 Sig1 Sig2 redeem script
  • 13. 서명 스크립트 Pay-to-Script-Hash( P2SH )  복잡한 거래 스크립트 사용을 단순화 시킨 거래 방식  P2SH로 인코딩된 스크립트 리딤 스크립트 2 PubKey1 PubKey2 PubKey3 PubKey 4 PubKey 5 5 OP_CHECKMULTISIG 잠금 스크립트 OP_HASH160 <20-byte hash of redeem script> OP_EQUL 해제 스크립트 Sig1 Sig2 redeem script 잠금스크립트가 redeem script로 대체되어 거래를 보낼때 스크립트를 전부 입력하지않아서 유용함.
  • 16. 서명 스크립트 Benefit of Pay-to-Script-Hash( P2SH )  복잡한 스크립트를 짧게 대체. 잠금 스크립트의 크기를 줄이고 그것을 해제스크립트로 이동.  스크립트 구성의 부담을 송신자에게 넘긴다.  잠금 스크립트의 길이가 줄어 UTXO에 저장되는 용량을 줄여줌.  저장공간의 부담을 현재(payment time)에서 미래(when it is spent)로 이동시킨다.
  • 17. 서명 스크립트 Transaction Locktime  트랜잭션을 일정시간동안 잠궈놓음.  [예시] Alice가 Bob에게 locktime을 3개월을 걸어서 트랜잭션을 보냄. • Bob 은 이를 3개월이 지나서 사용할 수 있다. • 3개월동안 Alice는 double-spending 을 할 수 있게되는 문제점이 발생. • Bob은 Alice의 double-spending을 막을 권한이 없음.
  • 18. 서명 스크립트 Check Lock Time Verify (CLTV)  Output의 redeem script에 timelock을 추가해서 보냄.  current block height + 12,960 (blocks) or current Unix epoch time + 7,760,000 (seconds)  서명에 Bob의 키를 추가하여 Alice가 사용할 수 없게함.  Bob은 3개월 이후에 사용할 수 있음.
  • 19. Segregated Witness Segwit  비트코인의 합의 과정과 네트워크 프로토콜을 업그레이드함.  블록의 구조를 보면 서명과 거래내역이 하나로 뭉쳐있음.  블록의 크기를 1MB로 제한하면서 서명부분을 분리시켜 거래내용을 더 많이 담자. 서명란 거래내용 서명이 실제로 차지하는 크기는 크지않지만 서명란 자체가 차지하는 부피가 크다. 거래내용 서명란
  • 21. Segregated Witness Pay-to-Witness-Script-Hash(P2WSH)  P2WSH의 스크립트가 조금 더 simple함.  Transaction에서는 서명부분을 삭제하고 witness
  • 22. 참고 자료  https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch07.asciidoc#with_p2sh  https://gist.github.com/gavinandresen/3966071  https://bitcoin.stackexchange.com/questions/3712/how-can-i-create-a-multi-signature-2-of-3- transaction