Chapter 4. Introduction
What is a Blockchain?
A Distributed Ledger(분산 원장)
블록체인 네트워크의 핵심은 분산 원장이다.
분산 원장은 블록체인 네트워크상에서 이루어지는 모든 트랜잭션(Transaction)들을 기록해 놓은 것이다.
- Decentralized: 다수의 네트워크 참여자(Participant)들은 원장을 복사하여 가지고있음
- Collaborate: 네트워크 참여자들은 블록체인 네트워크의 유지를 위해 서로 협력
- Append-only: 트랜잭션이 한 번 원장에 기록되면 수정 불가능
Smart Contracts(스마트 계약)
스마트 계약은 원장에 대한 접근제어를 뜻한다.
- 업데이트되는 정보의 일관성 유지
- 원장에 대한 모든 기능(Transacting, Querying 등) 제공
스마트 계약으로 참여자간의 트랜잭션이 자동으로 실행되도록 할 수 있다.
Consensus(합의)
합의는 네트워크 상에서 원장 트랜잭션들을 동기화 시키는 절차이다.
- 적법한 참여자(Appropriate Participant)가 승인한 트랜잭션만 원장에 추가됨
- 참여자들의 원장은 모두 같은 트랜잭션에 대하여 동일 순서로 업데이트됨
Why is a Blockchain useful?
Today's Systems of Record
- Expensive: 중앙집중화된 데이터베이스 필요 -> 비싼 비용을 들여 보안 강화 필요
- Inefficient: 각 참여자들이 원장을 각각 저장 -> 매 거래가 일어날 때마다 트랜잭션 생성자부터 일련의 과정을 모두 검증해야 함 -> 비효율
- Vulnerable: 원장은 언제나 해킹과 조작 위협을 가지고 있음
The Blockchain Difference
- Consensus: 모든 참여자들이 원장을 복사하여 공유 -> 중앙집중화 데이터베이스 불필요 -> 비용 절감
- Provenance: 트랜잭션은 최초 생성자가 명확 -> 트랜잭션 검증 비용 감소
- Immutability: 원장 내용은 수정/삭제 불가능 -> 해킹 위협으로부터 안전
이전까지는 Private 프로그램으로 Private 원장을 관리했다면,
블록체인 시스템에서는 shared 프로그램으로 shared 원장을 관리한다.
What is Hyperledger Fabric?
- 리눅스 재단(Linux Foundation)이 2015년 Hyperledger를 설립
- 커뮤니티 프로세스를 통하여 공동/공개 개발 후 시간이 지나면 주요 표준을 채택하는 방식
- Hyperledger Fabric은 Hyperledger 프로젝트 중 하나임
- 기존 블록체인 시스템과는 다르게 private, permissioned 블록체인을 표방하기 때문에 네트워크 보호와 트랜잭션 검증을 위해 PoW 같은 작업을 할 필요가 없음
- Membership Service Provider(MSP)에서 등록한 사용자만 네트워크에 참가 가능함
- 채널(Channel)을 통하여 민감한 원장 정보를 공개하지 않고 이해 당사자끼리만 공유 가능함
Shared Ledger
Hyperledger Fabric에서 원장은 world state와 transaction log 로 구분됨
- World state: 특정 시점에서 원장의 상태. 즉, 원장 데이터베이스. 기본으로 LevelDB 사용(key-value 모델 NoSQL DB)
- Transaction Log: 현재 world state 값을 만들어 낸 모든 트랜잭션의 기록. 즉, world state의 히스토리 로그
Smart Contracts
- Hyperledger Fabric에서는 체인코드(Chaincode)로 스마트 계약을 작성
- 블록체인 외부 어플리케이션이 원장과 상호작용해야 할 때 수행됨
- 현재 체인코드는 Go와 Java 언어로 개발 가능
Privacy
- 채널을 이용하여 민감 정보들은 이해 당사자끼리만 공유 가능
Consensus
- 서로 다른 참여 그룹에서 각각 트랜잭션을 생성했을 때, 원장에는 트랜잭션 순서대로 기록되어야 함
- 따라서 거래 순서 설정 기능과 불량 거래(실수 또는 악의적 의도로 생성)를 거부하는 기능 필요
- Hyperledger Fabric에서는 관리자(네트워크 시작자)가 사용할 합의 알고리즘을 선택할 수 있음
- SOLO, Kafka 등 사용 가능(SBFT는 곧 추가됨)