2. 해결하고자
하는 문제
● 내가 주고 받은
파일/데이타가 중간에 단
한번도 위조없이 온 것인가?
● 내가 받은 파일/데이타의
기록들이 다른 사람들과
모두 같은 것인가?
3. Blockchain의 정의
“A block chain, or blockchain, is a distributed
database that maintains a continuously-growing
list of data records hardened against tampering
and revision.”
4. Blockchain의 정의
● Distributed database
○ 분산된 Database
● That maintains a continuously-growing list of data
records hardened against tampering and revision
○ 위변조되지 않게 계속 늘어나는 데이타들의
목록을 담고 있다.
5. 주의할 점
● Blockchain != Bitcoin
○ Blockchain은 검증을 위해 기록을 변경불가하게 만들어
놓은 것.
○ Bitcoin은 Blockchain을 ‘전자화폐'에 활용한 경우다.
○ 응용되는 곳마다 조금씩 다른 형태를 가지고 있다.
● 핵심은
○ 분산되어서
○ 위변조가 되지 않는 것
6. 분산형 database의 중요한 의미는?
● 내가 가진 정보의 흐름을 모두 알고 있다.
● 이 정보는 누구나 다 알고 있다.
● 이를 조작하는 것이 사실상 불가능하다.
● 모든 사람들이 검증에 참여함으로 검증/보증을 위한
중계자가 필요없다.
9. Transaction / Block / Blockchain
Transaction
● A에서 B로 ‘무언가’
보낸다는 정보.
● 만들어지는 순간
네트워크에 뿌려진다.
Block
● 일정시간동안
네트워크상에 있는
Transaction들의 집합.
● 검증이 되었을 수도
있고 안되었을 수도
있다.
Blockchain
● 검증된 Block들의 집합
● 검증된 것들은 다시
네트워크에 뿌려짐
Block
Transaction
Transaction
Transaction
Block
10. Blockchain - Bitcoin에 구현된 예
Genesis block:
처음 만들어진
Block
● 각 Block은 아래 정보로 구성되어 있다.
○ 앞선 Block의 hash
■ Genesis block에서부터 현재
Block까지 영향을 미친다.
■ 각 Block들이 만들어지는
순서에 따라 새롭게 hash가
만들어지므로 중간에 위변조가
일어나면 달라질 수 밖에 없다.
○ Timestamp: 거래 시점
○ Nonce: Hash함수를 이용하여
결과값을 만들 때 특정한 수를 더
첨가해서 결과를 만드는 값.
(검증되야 나옴)
■ Mining 이란 이 값을 찾는
것이다.
○ Merkle tree라는 트리 구조의 root값 .
11. Blockchain은 과거 정보를 어떻게 다 가지고 다닐까?
● 모든 Transaction데이타를 Block안에 ‘정말’ 가지고 있다.
○ Merkle tree 등의 방법으로 필요한 데이타만 담음.
○ 실제 Transaction data도 크기가 얼마 안됨. 참고
BlockBlock
tt-1
12. Blockchain은 과거 정보를 어떻게 다 가지고 다닐까?
● 앞선 Block의 Hash값을 현재 Block이 가지고 있다.
● 해당 Block내의 Transaction을 가지고 계산한 Merkle tree root hash를 각
Block마다 담고 있다.
● 전체 거래 정보가 의외로 작다.
BlockBlock
Block[t-1]의 Hash
tt-1
Merckle tree root Hash
13. Merkle tree
● 모든 Block에 대한 Hash를 ‘요약'해주는 Binary
tree 구조
● 모든 Block은 Merkle tree의 root에 해당하는
Hash를 가지고 다닌다.
● 모든 Block안의 Hash는 leaf에 있는 node들의
hash를 hash한 값이다.
● Block chain이 길수록 root에서 아래로
내려온다.
● 이 Hash값이 이상한지는 바로 위의 node가
가진 Hash를 현재 같은 level에 있는 다른
node와의 hash계산과 같은지 아닌지를
비교함으로 확인한다.
● 매번 Tx가 증가할 때마다 Block내의 Merkle
tree root를 다시 계산해서 해당 Block에 써야
한다.
14. Blockchain은 검증은 어떻게 하나?
● Proof-of-work
○ 블록을 증명하는 이른바 ‘채굴자'가 일을 함으로 증명
■ Ex) Bitcoin의 Mining.
● Proof-of-stake:
○ 소유자가 자신이 가진 자산(Stake)를 스스로 증명해야 한다.
○ 공격에 방어하기 위해 블록체인 전체 컨트롤하는 Master public key를
두고 있다.
● Consensus-by-bet:
○ 네트워크에 참여하는 사람들의 동의를 통해서 승인
○ 참여하는 노드들은 보증금을 걸고 승인에 참여.
○ 이를 위한 인센티브/처벌 시스템을 가동
15. Blockchain은 검증은 어떻게 하나? -2
● Trust
○ 네트워크에 참여하는 노드들의 투표와 동의를 통해서 승인
○ 기본적으로 ‘믿을 수 있는’ node들만 있다고 가정
○ Byzantine agreement protocol을 기반으로 이용
● Membership
○ 소유자가 자신이 가진 자산(Stake)를 스스로 증명해야 한다.
○ 공격에 방어하기 위해 블록체인 전체 컨트롤하는 Master public key를
두고 있다.
16. Mining(채굴) - Bitcoin이나 Ethereum의 경우
PoW에서 검증작업을 해주고 그 댓가로 보상을
받는 것
보상 자체가 핵심이 아니다… -.-;;
17. Blockchain은 정보를 어떻게 담아다니나?
● 각 Block안의 ‘거래'정보는
코드로 작성되어 있다.
● 이 코드들을 실행함으로
거래를 유효화한다. Block
Script
18. Blockchain은 정보를 어떻게 담아다니나? -
Bitcoin● 각 Block안의 ‘거래'정보는
코드로 작성되어 있다.
● 이 코드들을 실행함으로
거래를 유효화한다.
● 아주 아주 간단한 Stack기반 언어로 구성
● 대부분의 경우 ‘A가 B에게 지불하는 형식
○ Loop가 없다.
● OpCode처럼 표현되어 있다
● 잠금 스크립트, 해제 스크립트로 구성.
○ 잠금 스크립트:
■ 예상 지출, 향후 출력값을 소비하기
위해 충족되어야 하는 조건명시
○ 해제 스크립트
■ 잠금 스크립트가 출력값에 놓아 둔
조건을 해결하거나 충족시켜서
출력값이 소비될 수 있게 하는
스크립트
● 자세한 것은 여기
19. Blockchain은 정보를 어떻게 담아다니나?
-Ethereum● 각 Block안의 ‘거래'정보는
코드로 작성되어 있다.
● 이 코드들을 실행함으로
거래를 유효화한다.
● Solidity라는 언어로 구성.
● Loop도 있고 일반적인 Computer
language스럽다.
○ Compile되서 OpCode로 돌아다닌다.
● 돈거래 외에도 여러가지를 코딩하기가
쉽다.
● Gas라는 개념이 있어서 무한정 반복할 수
없다.
○ Code가 돌아가려고 하면 gas를
소비해야 한다.
○ Gas price를 transaction을 만든
사람이 지정
■ 이 사람이 gas_price * gas값을
지불.
○ 실행하다가 Gas가 떨어지면
동작하는 것을 중지.
20. 화폐 개념없이 ‘원장'개념만 있는 Blockchain -
Hyperledger
● PoW방식이 아니라 Consneus
방식으로 거래의 신뢰 보증
● Chaincode라는 방식으로
Contract구현
● 자세한 사항은 여기 참조
● https://www.hyperledger.org/
21. Blockchain으로 뭔가 만들어 보려 한다면 고려할 것
● 뭘 담아서 Block을 구성할 것인가?
● 화폐 개념 넣을 것인가 말것인가?
● 검증과정을 어떻게 구성할 것인가? PoW? PoS?
22. Reference
● Deloitte, Blockchain Enigma. Paradox. Opportunity
● Korbit, 블록체인의 기술적 이해 및 도입을 위한 첫걸음
● Ethereum white paper
● Solidity official document
● Blockchain size
● Hyperledger white paper
● https://www.hyperledger.org/