SlideShare a Scribd company logo
1 of 28
Transaction
• 철수가 영희에게 1.25 bitcoin를 전달한다고 가정할 때 Transaction 생성 및 검증
과정을 설명
기본 전제
• 원리에 집중하여 설명하기위해 transaction의 일부 field는 생략하였음(locktime 등)
• 기본적으로 잠금, 해제 스크립트는 P2PK 를 전제로 함
• 서명 해시는 SIGHASH_ALL 을 전제로 함
Transaction 생성
1. 철수의 UTXO 파악
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
From
회윤
To
철수
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
2. input setting
From
회윤
To
철수
입력 카운터: 2
이전 거래의 해시값(txid)
이전 거래의 인덱스
해제 스크립트
Sequence number
이전 거래의 해시값(txid)
이전 거래의 인덱스
해제 스크립트
Sequence number
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
2. input setting
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
2. input setting
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
3. output setting
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
Z Private keySig = F ( , )sig
전자서명
4. signature setting
Transaction 생성
Signature를 생성하려면, 트랜잭션의 해시 (i.e. Z) 가 필요하다.
하지만 트랜잭션 직렬화 시에 signature를 포함한다고 하면 트랜잭션의 해시를 만들기 위해서
Signature가 필요하여 무한 재귀에 빠지게 된다.
이 문제를 해결하기 위해서 signature를 포함하지 않고 Z 값을 생성한다.
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
4. signature setting
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
4. signature setting
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
TX Hash: tx01
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
철수의 주소(잠금 스크립트)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
4. signature setting
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
TX Hash: tx01
4. signature setting
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
철수의 주소(잠금 스크립트)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
SIGHASH_ALL
Transaction 생성
4. signature setting
Hash
fuction
Transaction hash (i.e. Z)
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
철수의 주소(잠금 스크립트)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
SIGHASH_ALL
Transaction 생성
Hash
fuction
Transaction hash (i.e. Z)
Z Private keySig = F ( , )sig
전자서명
4. signature setting
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
0
ffffffff
Transaction (철수 -> 영희)
철수의 주소(잠금 스크립트)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
SIGHASH_ALL
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
4. signature setting
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
4. signature setting
Transaction 생성
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
0.25 bit
철수의 주소(잠금 스크립트)
TX Hash: tx02
From
회윤
To
철수
입력 카운터: 1 출력 카운터: 1
이전 거래의 해시값(txid)
이전 거래의 인덱스
전자서명
Sequence number
1 bit
철수의 주소(잠금 스크립트)
TX Hash: tx01
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
4. signature setting
Transaction 검증
1. 기본 검증
• 각 input이 가리키는 output은 UTXO가 맞는가?
• Sum of Input >= Sum of output
• ETC..
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
Transaction 검증
2. Script 검증
• 각 input에 대한 script 검증
Verify( sig(r, s), z, public key )
전자서명
True or False
각 Node는 Z를 직접 생성하여 검증
Transaction 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
2.1 SIGHASH 확인
각각 검증
Transaction 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
2.1 SIGHASH 확인
Transaction 검증
2.1 SIGHASH 확인
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
Transaction 검증
2.2 Z 생성
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
해제 스크립트
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
전자서명
SIGHASH_ALL
전체를 직렬화!
Transaction 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
해제 스크립트
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
전자서명
SIGHASH_ALL
0
2.2 Z 생성
Transaction 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
0
철수의 주소(잠금 스크립트)
2.2 Z 생성
Transaction 검증
2.2 Z 생성
From
회윤
To
철수
입력 카운터: 2
tx01
0
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
0
철수의 주소(잠금 스크립트)
SIGHASH_ALL
Transaction 검증
2.3 script 실행 및 검증
Hash
fuction
Transaction hash (i.e. Z)
Verify( sig(r, s), z, public key )
전자서명
From
회윤
To
철수
입력 카운터: 2
tx01
0
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
0
철수의 주소(잠금 스크립트)
SIGHASH_ALL
Transaction 검증
Hash
fuction
Transaction hash (i.e. Z)
True
Verify( sig(r, s), z, public key )
전자서명
2.3 script 실행 및 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
0
철수의 주소(잠금 스크립트)
SIGHASH_ALL
Transaction 검증
Hash
fuction
Transaction hash (i.e. Z)
True
Verify( sig(r, s), z, public key )
전자서명
2.3 script 실행 및 검증
From
회윤
To
철수
입력 카운터: 2
tx01
0
ffffffff
tx02
0
ffffffff
Transaction (철수 -> 영희)
출력 카운터: 1
1.25bit
영희의 주소(잠금 스크립트)
0
철수의 주소(잠금 스크립트)
SIGHASH_ALL
Verified!

More Related Content

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Bitcoin transaction

  • 1. Transaction • 철수가 영희에게 1.25 bitcoin를 전달한다고 가정할 때 Transaction 생성 및 검증 과정을 설명 기본 전제 • 원리에 집중하여 설명하기위해 transaction의 일부 field는 생략하였음(locktime 등) • 기본적으로 잠금, 해제 스크립트는 P2PK 를 전제로 함 • 서명 해시는 SIGHASH_ALL 을 전제로 함
  • 2. Transaction 생성 1. 철수의 UTXO 파악 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01
  • 3. From 회윤 To 철수 Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 2. input setting
  • 4. From 회윤 To 철수 입력 카운터: 2 이전 거래의 해시값(txid) 이전 거래의 인덱스 해제 스크립트 Sequence number 이전 거래의 해시값(txid) 이전 거래의 인덱스 해제 스크립트 Sequence number Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 2. input setting
  • 5. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 2. input setting
  • 6. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 3. output setting 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트)
  • 7. Z Private keySig = F ( , )sig 전자서명 4. signature setting Transaction 생성 Signature를 생성하려면, 트랜잭션의 해시 (i.e. Z) 가 필요하다. 하지만 트랜잭션 직렬화 시에 signature를 포함한다고 하면 트랜잭션의 해시를 만들기 위해서 Signature가 필요하여 무한 재귀에 빠지게 된다. 이 문제를 해결하기 위해서 signature를 포함하지 않고 Z 값을 생성한다.
  • 8. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 4. signature setting 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트)
  • 9. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 4. signature setting
  • 10. Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit TX Hash: tx01 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) 철수의 주소(잠금 스크립트) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 4. signature setting
  • 11. Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit TX Hash: tx01 4. signature setting From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) 철수의 주소(잠금 스크립트) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) SIGHASH_ALL
  • 12. Transaction 생성 4. signature setting Hash fuction Transaction hash (i.e. Z) From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) 철수의 주소(잠금 스크립트) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) SIGHASH_ALL
  • 13. Transaction 생성 Hash fuction Transaction hash (i.e. Z) Z Private keySig = F ( , )sig 전자서명 4. signature setting From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 0 ffffffff Transaction (철수 -> 영희) 철수의 주소(잠금 스크립트) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) SIGHASH_ALL
  • 14. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 4. signature setting
  • 15. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 4. signature setting
  • 16. Transaction 생성 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 0.25 bit 철수의 주소(잠금 스크립트) TX Hash: tx02 From 회윤 To 철수 입력 카운터: 1 출력 카운터: 1 이전 거래의 해시값(txid) 이전 거래의 인덱스 전자서명 Sequence number 1 bit 철수의 주소(잠금 스크립트) TX Hash: tx01 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL 4. signature setting
  • 17. Transaction 검증 1. 기본 검증 • 각 input이 가리키는 output은 UTXO가 맞는가? • Sum of Input >= Sum of output • ETC.. From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL
  • 18. Transaction 검증 2. Script 검증 • 각 input에 대한 script 검증 Verify( sig(r, s), z, public key ) 전자서명 True or False 각 Node는 Z를 직접 생성하여 검증
  • 19. Transaction 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL 2.1 SIGHASH 확인 각각 검증
  • 20. Transaction 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL 2.1 SIGHASH 확인
  • 21. Transaction 검증 2.1 SIGHASH 확인 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL
  • 22. Transaction 검증 2.2 Z 생성 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 해제 스크립트 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 전자서명 SIGHASH_ALL 전체를 직렬화!
  • 23. Transaction 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 해제 스크립트 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 전자서명 SIGHASH_ALL 0 2.2 Z 생성
  • 24. Transaction 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 0 철수의 주소(잠금 스크립트) 2.2 Z 생성
  • 25. Transaction 검증 2.2 Z 생성 From 회윤 To 철수 입력 카운터: 2 tx01 0 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 0 철수의 주소(잠금 스크립트) SIGHASH_ALL
  • 26. Transaction 검증 2.3 script 실행 및 검증 Hash fuction Transaction hash (i.e. Z) Verify( sig(r, s), z, public key ) 전자서명 From 회윤 To 철수 입력 카운터: 2 tx01 0 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 0 철수의 주소(잠금 스크립트) SIGHASH_ALL
  • 27. Transaction 검증 Hash fuction Transaction hash (i.e. Z) True Verify( sig(r, s), z, public key ) 전자서명 2.3 script 실행 및 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 0 철수의 주소(잠금 스크립트) SIGHASH_ALL
  • 28. Transaction 검증 Hash fuction Transaction hash (i.e. Z) True Verify( sig(r, s), z, public key ) 전자서명 2.3 script 실행 및 검증 From 회윤 To 철수 입력 카운터: 2 tx01 0 ffffffff tx02 0 ffffffff Transaction (철수 -> 영희) 출력 카운터: 1 1.25bit 영희의 주소(잠금 스크립트) 0 철수의 주소(잠금 스크립트) SIGHASH_ALL Verified!