Consensus Algorithm

굥굥·2021년 9월 10일
0

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 란?

0개의 댓글