블록체인이란
블록체인이란 정보를 블록이라는 단위로 저장하고 저장된 블록은 체인 형태로 묶은 기술을 말합니다. 블록체인은 네트워크 P2P 방식으로 모든 블록체인 노드와 데이터를 공유합니다. 블록체인 노드들은 같은 데이터를 가지고 있고 데이터를 주고 받을 수 있습니다. 블록체인 노드들은 모든 블록을 동일한 순서로 저장하여 모두 같은 블록체인을 유지하기 때문에 다른 블록체인 노드의 데이터가 올바른지 서로 검증할 수 있습니다. 이 때문에 블록체인은 '탈중앙화' 되어있다고 말합니다.
블록체인의 구조
블록체인에서 블록은 Header와 Body로 구성되어 있습니다. Header는 Body를 설명하는 정보와 앞의 블록에 대한 정보가 hash 값으로 기록되어 있습니다. 이것을 해시 포인터라고 합니다. Body는 data의 묶음입니다. 블록은 이전 블록의 해시 포인터를 가지기 때문에 블록의 순서를 결정할 수 있습니다.
블록 헤더의 데이터
- 넌스(nonce), 버전, 이전블록 해시, 타임스탬프 등
출처: groundX
블록 높이
블록이 생성된 순서를 높이로 표현합니다. 블록 높이는 제네시스 블록부터 생성된 블록의 총 수를 말합니다. 제네시스 블록은 블록체인 네트워크가 최초로 시작될 때 만들어진 블록을 말하며 제네시스 블록의 높이는 0입니다.
블록 생성 주기
블록 생성 주기란 트랜잭션이 발생했을 때, 모든 블록체인 노드들에게 전송, 검증, 승인 절차를 거친 후 블록을 체결하는 과정에 소요되는 시간을 말합니다. 비트코인의 경우 10분, 이더리움은 15초, 클레이튼은 1초의 블록 생성 주기가 있습니다. 엄밀히 말하면 블록생성 주기가 딱 맞지 않으며, 해당 시간에 수렴하도록 설계되어 있습니다.
블록 생성 주기는 블록체인 기술에서 아주 중요합니다.
- 사용자가 마트에서 카드 결제를 하는 경우
- 사용자가 카드를 발급 받는 경우
블록 생성 주기가 약 10분이라면 1번의 경우 카드 결제가 완료 될 때 까지 적어도 10분이 소요 될 것입니다. 하지만 2번의 경우 카드 발급을 위한 데이터가 10분 이상 소요되어도 큰 문제가 없습니다. 블록 생성 주기는 서비스 측면에 큰 영향을 줍니다.
블록체인 네트워크
블록체인 네트워크는 P2P 네트워크입니다. P2P는 Peer-to-Peer 의 약자로, 블록체인 노드가 같은 데이터를 가지고 있고, 데이터가 노드간 전송하면서 데이터를 주고 받는 구조입니다. P2P 네트워크의 대표적인 예시는 토렌트가 있습니다. 블록체인 네트워크에서는 모든 노드들이 같은 블록을 가지고 있어야 다음 블록을 받을 준비가 되는 것입니다.
합의(Consensus)
블록을 추가할 때, 추가된 블록의 데이터가 올바른 데이터인지 검증하는 것입니다. 예를들어 비트코인의 경우 은행이 금융 기록을 중앙에서 관리하는데 '중앙 관리자를 믿지 못한다' 라는 데서 시작되었습니다. 은행의 전산망이 해킹하거나 정부나 특정 기관이 은행을 통제한다면 원화는 신뢰를 잃을 것입니다. 따라서 비트코인은 거래 내역을 블록에 기록하고 P2P 네트워크를 통해 분산 저장 하여, 중앙관리자가 존재하지 않는 화폐를 개발 한 것입니다. 비트코인은 블록을 추가하면서 채굴을 통해 통화를 발행하는데, 블록을 추가할 때 다른 블록들이 새로운 블록을 추가하는데 동의하는 것을 합의라고 합니다.
- PoW(Proof Of Work) - 작업증명
- 특정 문제를 푼 사람이 블록을 제안할 권리를 갖는 것
- 다른 블록체인 노드가 문제를 풀었는지 확인할 수 있어야 한다.
- 누구나 참여할 수 있다
- Bitcoin, Litecoin, Ethereum, QTUM, Monero
- 위협: 전체 연산량의 51%를 하나의 참여자가 소유할 경우 중앙화 된다.
- PoS(Proof Of stake) - 지분증명
- 플랫폼 토큰을 보유한 양과 기간에 따라 제안할 권리르 가진다.
- 참여 제한이 없가나 낮다.
- Ethereum FFG & CFG, EOS
- 위협: 전체 토큰의 51%를 한 참여자가 소유한 경우 중앙화 된다.
- BFT(Byzantine Fault Tolerance) - 비잔틴 장애 허용
- 정해진 순번 또는 정해진 확률에 의해 랜덤하게 뽑힌다.
- 참여 제한이 높다
- 합의를 이루기 위해 통신을 많이 한다. 전체 블록이 동기화 되어야 함
- Klaytn, Tendermint, Ontology
- 위협: 전체 참여노드의 1/3이상 담합할 경우 합의 불가, 중앙화 된다
Private vs Public, Pemissionless vs Permissioned
Private과 Public을 나누는 기준.은 다음과 같다
- 누구든지 기록된 정보를 자유롭게 읽을 수 있는가?
- 명시적은 등록 또는 자격취득 없이 정보를 블록체인 네트워크에 기록할 수 있는가?
Permissionless와 Permissioned를 나누는 기준은 네트워크 참여 제한 여부입니다.
- (넓은 의미) 블록체인 P2P 네트워크에 참여
- (좁은 의미) 합의과정에 참여
블록체인에서 사용되는 암호화 기법
비트코인은 모든 노드가 같은 데이터를 공유합니다. 데이터는 주소와 balance로 이루어져 있는데, 주소가 누구의 소유인지 알 수 없습니다. 하지만 전자 서명을 사용하면 특정 balance가 누구에게 소유 되었는지 알 수 있습니다. 따라서 누구든지 해당 주소에 대한 전자서명을 가지고 있다면 해당 주소의 소유주 라고 생각하게 됩니다.
- UTXO(Unspent Transaction Output) 기반 블록체인
- 블록체인에 사용 가능한 토큰 - UTXO 들과 사용 자격검증방법을 기록
- 일반적인 자격검증방법은 UTXO의 정보와 일치하는 공개키로 검증가능한 전자서명을 제출하는 것
- Bitcoin (돈에 주소를 줌으로써 보안 강화 및 병렬화가 가능)
- 어카운트 기반 블록체인(Account-based Blockchain)
- 어카운트는 블록체인을 구성하는 주체를 표현하며 상태를 기록
- 사용자는 어카운트를 사용할 때마다 어카운트 공개키로 검증가능한 전자서명을 생성
- 상태를 기록할 수 있기 때문에 스마트 컨트랙트 구현하기에 용이
- Ethereum, Klaytn
Ethereum 어카운트, 주소, 상태
이더리움의 어카운트는 이더리움의 주체(entity)를 표현하고 상태를 기록하는데 사용 됩니다. 주소는 EOA(Externally Owned Account)와 스마트 컨트랙트로 구분됩니다. EOA는 일반 사용자를 말합니다. 사용자는 임의의 공개키와 비밀키 쌍을 생성한 뒤 공개키를 어카운트 주소로 변환하여 EOA를 생성합니다.
Confirmation과 Finality
Confirmation은 트랜잭션이 블록에 포함된 이후 생성된 블록의 숫자를 말합니다. 트랜잭션 T1이 포함된 블록의 높이가 100이고 현재 블록이 105라면 T1의 confirmation 숫자는 6이 됩니다. PoW를 사용하는 블록체인은 finality가 없기 때문에 confirmation 숫자가 중요합니다. finality가 없다는 것은 내 블록이 stable block이 되어 사라질 수 있다는 것입니다.
예를들어, 블록체인 노드 두 개가 PoW 문제를 비슷한 시간에 풀어 분기된 블록이 발생 했을 때, 경쟁이 발생합니다. 각 분기점에서 블록이 생성 될 때, 더 긴 노드가 선택 됩니다. 짧은 노드의 체인은 stable block이 됩니다.
비트코인에서 confirmation 숫자가 중요한 이유는 (네트워크 delay에 따라 한두개 정도 블록이 차이 날 수 있지만) 확률적으로 6개 이상 confirmation을 받으면 내 트랜잭션이 블록체인에 포함될 수 있다고 확신할 수 있습니다.
BFT 기반 블록체인
BFT기반의 블록체인은 완결성이 보장됩니다. 블록들이 동기화 되어 있기 때문에 PoW에 비해 블록 생성이 빠르고 경제적입니다. 하지만 네트워크 참여자 숫자가 제한되어 있어 참여자 구성이 고정되어야 합의가 가능하며, 구성이 변경 될 경우 모든 네트워크 참여자가 새로운 구성을 인지하기 까지 합의가 불가능 합니다.
합의 알고리즘이 네트워크 동기화를 가정하고 구성되어 있기 때문에 네트워크 사용량이 높고, 참여자가 많아질 경우 오버헤드로 합의가 느려집니다.
클레이튼 BFT
클레이튼은 확장 가능한 BFT를 사용합니다. N개의 노드 가운데 S개 부분 노드 집합을 확률적으로 선택하는데, 무작위로 선택되었는지 확인하기 위해 VRF 함수를 사용해서 확인합니다. 매 블록마다 새 커미티(부분 노드 집합)를 뽑아 실행해서 합의된 결과를 다른 블록에 전파 합니다. 기존 BFT에 비해 확장성을 크게 개선했다고 합니다. 4000개의 TPS를 1초에 처리할 수 있고, 매 초마다 새로운 블록을 생성 합니다.
'개발자 > BlockChain' 카테고리의 다른 글
02. 블록체인의 상태와 트랜잭션 (0) | 2021.12.05 |
---|