Consensus Algorithm
합의 알고리즘
여러 참여자가 통일된 의사결정을 내리기 위해 사용하는 알고리즘
Blockchain
- 네트워크 내에 여러 컴퓨터에서 업데이트되고 공유되는 public database
Block
- 데이터와 상태가 순차적인 배치 또는 블록에 저장되는 사실을 나타냄
- 만약 ETH를 보내기 위해서는 transaction data를 블록에 추가해야 성공할 수 있음
Chain
- 각 블록이 부모를 암호화 방식으로 참조한다는 사실을 나타냄
- 블록 데이터는 모든 후속 블록의 데이터를 변경하지 않고는 변경할 수 없으며 전체 네트워크의 합의가 필요
Consensus Algorithm
- 네트워크 내에 모든 node는 동일한 데이터를 가지고 있음
- 새로운 블록과 전체 체인은 네트워크 내 모든 컴퓨터(node)에서 동의해야 함
- 분산 합의를 달성하기 위해 합의 알고리즘이 필요함
PoW
Proof of Work (작업증명)
대표적으로 Bitcoin 합의 알고리즘
- 문제를 주고 조건을 만족하는 답을 찾은 노드에게 보상
- 특정 조건을 만족하거나 특정 해시 값 길이 이하의 해시 값 찾기
- 노드들은 해시 값을 구하기 위해 컴퓨팅 파워를 동원해 값을 찾고 새로운 블록을 추가하여 브랜치를 형성
- 브랜치가 생겼을 때 가장 긴 블록체인이 남은 브랜치가 최종 브랜치로 결정하며 나머지 브랜치는 버림
- 과반수 이상의 노드가 합의한 거래가 원본으로 채택됨
ex) Bitcoin, Ethereum, IOTA, Litecoin, Bitcoin Cash, Bitcoin Gold
mining
- 임의의 nonce 값을 대입하여 블록 해시 값을 생성하고 조건으로 주어진 target 보다 작은 블록 해시 값을 찾는 것
- 올바른 결과 값을 찾기 위해 nonce 값을 0 부터 1씩 증가시키면서 연산 해야함
- 해시 파워(computing power) : 1초 동안 이런 수학 문제를 풀이하는 과정을 수행할 수 있는 수치
장점
단점
- 채굴 난이도가 올라가면서 연산에 고사양 장비가 많이 필요하게 되고 과도한 전력 낭비로 이어짐
- 지속적으로 해시 파워를 유지해야 함
- 채굴 업자끼리 단합
PoW의 블록 구하는 방법
1) version, timestamp, bits, nonce는 Little Endian 형태로 변형
convert_block_info['nonce'] = little_endian(block0info['nonce'])
2) previous hash, merkle root는 결과 값을 모두 반대 순서로 변경
convert_block_info['prev_block'] = reverse_order_pair(block_info['prev_block'])
3) 헤더 정보 합산 (문자열 값 이어 붙임, 순서가 변경 안 됨)
header_hex = convert_block_info['ver'] + convert_block_info['prev_block'] + convert_block_info['mrkl_root'] + convert_block_info['time'] + convert_block_info['bits'] + convert_block_info['nonce']
4) 합산한 헤더 정보를 바이너리 형태로 변경
header_bin = bytes.fromhex(header_hex)
5) SHA256 형태로 변경한 결과를 다시 SHA256으로 변형
hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
6) 결과 값을 뒤집은 다음 16진수로 변경
result_header_hex = hash[::-1].hex()
PoS
Proof of Stake (지분증명)
더 많은 지분(해당 코인)을 가지고 있을수록 그에 비레하여 블록에 기록할 권한이 더 많이 부여
-
validator(검증자)가 현재 보유하고 있는 자산(Stake) 양에 비례해서 데이터 업데이트 권한 획득
-
블록에는 검증자들 각자가 자산을 보유하는 자산증명리스트를 포함
-
코인을 가지고 있는 노드라면 합의를 통해 블록에 데이터 추가 가능
-
코인을 많이 가진 노드는 데이터를 업데이트할 권한이 더 많이 있음
-
PoW와 같이 블록이 생성될 때 보상이 지급되지만 지분에 대한 이자 개념으로 보상이 지급됨
장점
- 쉬운 방식으로 많은 노드 참여 가능
- 분산화된 합의 방식의 방향 제시
- 특정 블록체인에 해당하는 코인을 소유할 수록 데이터 업데이트의 권한이 주어지기 때문에 많은 사람들이 의사결정에 참여하도록 함
단점
- Nothing at Stake : 자산 증명에 있어서 marginal cost(한계비용)이 없음
DPoS
Delegated Proof of Stake (위임지분증명)
특정 인원에게만 PoS를 할 수 있도록 권한 위임
- 코인 보유자들이 자신의 작업을 제 3자에게 위임하는 투표시스템
- 자신을 대신하여 네트워크를 보호할 대표(증인)에게 투표 가능
- 대표(증인)는 새로운 블록의 생성 및 검증 과정에 합의를 도출할 책임이 있음
- 투표 영향력은 이용자가 보유한 코인 수에 비례
- 대표가 받는 보상은 투표자의 지분에 비례
- 소규모 참여자는 권한을 위임한 상위 노드로 부터 이자를 받거나 송금 수수료를 감면 받을 수 있음
장점
- 소규모 참여자도 이득을 볼 수 있음
- 송금 속도가 빠름
단점
- 상위 노드만 블록생성에 참여하기 때문에 탈중화가 맞는지 애매함
- 상위 노드만 블록생성에 참여하기 때문에 보안이 취약
- 코인 보유량이 적어도 상위 노드로 뽑힐 수 있음
참조
ethereum.org
블록체인의 합의 알고리즘
작업증명 (Proof-of-Work : PoW) 알고리즘이란?
쉽게 설명하는 블록체인:지분증명이란?
위임 지분 증명 설명(DPoS)
채굴방식(마이닝) POW, POS, DPOS 란?