이 포스트는 [케블리] #44. 합의 알고리즘 마스터하기 - 1편 (PoW, PoS),
A Proof of Stake Design Philosophy,
이더리움 지분증명을 참조하여 요약한 글입니다.
컴퓨터 과학에서 사용하고 있는 프로세스로,
시스템이 분산화 되어 있을 때
시스템 간의 특정 데이터에 대한 동일한 값을 유지하기 위해 고안된 개념이다.
다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘이다.
합의 모델, 합의 방식, 합의 메커니즘, 합의 프로토콜이라고도 한다.
이중지불 문제
A의 계좌엔 1000원이 있고, B와 C에게 각각 1000원씩 이체하려고 한다.
- 현실 세계
: 은행이 A의 계좌를 추적/관리하고 있기 때문에 차단되어서 불가능하다.- 온라인 네트워크
: 물리적으로 멀리있는 두 개의 지점에서 동시에 접속해서 보낸다면 가능하다.
그래서 블록체인 네트워크에서는,
합의 알고리즘
에 의해 이중지불이 거부된다.
이중지불 되었다고 하더라도,
모든 노드들은 동일한 내용의 분산원장을 공유하고 있기 때문에 언젠가는 특정 시점에서 충돌이 발생할 것이고,
그 때 두 거래 중 하나는 거부된다.
블록체인은 분산화된 시스템으로 구성되어있다.
중앙 권위체에 의존하지 않기 때문에, 분산화된 노드는 트랜잭션 유효성에 합의가 필요하다.
모든 노드가 동일한 하나의 체인을 가질 수 있도록,
합의 알고리즘에 의하여 블록이 생성 및 연결 되게 하는 것.
Q. 🤷🏻♀️ : 하나의 노드한테만 "블록 생성" 권한을 주면?
그럼 이런 이중지불 문제같은 건 바로 해결되는 거 아니야?
블록체인에서 "블록 생성" 의 의미
: 거래내역을 입증 및 기록하다.
물론 그렇게 하면 분산 원장을 아주 쉽게 유지할 수 있을 것이다.
하지만 단일 실패 지점을 가지는 기존의 중앙 서버 방식과 별반 다르지 않은데다,
블록체인의 핵심은 특정 노드에 의존하지 않고 신뢰를 제공하는 것 이다.
그러니 개별 노드들은 반드시 자유롭게 블록을 생성할 수 있어야한다.
따라서 한개의 노드에게 권한을 주는 것은 좋은 방법이 아님!
단일 실패 지점(Single Point of Failure)
기존의 중앙 서버 방식에서는 송금 과정의 모든 것이 은행 하나에 집중되어 있다.
즉, 거래 은행의 서버가 정상적으로 동작하지 않거나, 은행의 기록이 사라지게 되면 우리는 재산을 잃게 된다.
결과적으로,
"어떻게 개별 노드들이 자율적으로 블록을 생성하면서도,
모든 노드들이 동일한 체인을 가질 수 있을까"가 합의 알고리즘 논의의 관건.
기존 이더리움의 합의 알고리즘 방식인 작업 증명(POW)
은,
블록체인상에서 블록을 생성하고 검증한 마이너에게 보상을 지급함으로써,
이더리움이 네트워크를 최신 상태로 안전하게 유지하는 방법이다.
매우 단순하고 직선적인 수학 문제를 풀어내서 답을 도출해낸다.
쉽게 말해 블록 생성 방식이 그냥 숫자를 하나하나 넣어보는 수준의 문제를 푸는 것이다.
초창기 비트코인이 이 방식을 쓰면서 초기 알트 코인인 이더리움이나 라이트코인 등도 마찬가지로 POW를 사용했다.
문제는 이 POW는 문제를 풀면 코인을 지급하는 방식이기 때문에, "많은 연산"을 하면 "많은 코인" 을 받을 수 있었고, 결국 대형 채굴장을 가진 일부 업자들에 의해 점점 중앙화
되는 단점이 있었다.
그리고 위에서 설명했듯, 작업 증명 방식은 블록체인 규모가 증가하면 더 많은 연산 자원을 필요로 하기 때문에 확장적이지 않다.
비트코인 컨센서스 매커니즘은 작업증명(Proof Of Work)
이고,
따라서 비트코인 네트워크는 작업증명(Proof Of Work)
으로 보호되고 있다.
DB에 포함되려면 컴퓨터끼리 경쟁하며 작업해야한다.
작업에 성공하면 보상을 받고, 블록체인에 추가한 거래내역은 전체 네트워크가 승인하면 블록체인에 영원히 남게 된다.
😈 : 그럼 겁나 좋은 컴퓨터로 다 이겨버리면 되겠네!
작업에 성공한 컴퓨터에 의해서 블록체인에 추가된 후에
나머지 컴퓨터들은 해당 정보가 참이라고 인정해 해당 거래를 승인해줘야한다.
거래가 거짓으로 드러나면 해당 블록 승인을 철회하고 거절한다.
이 과정이 바로 합의(Consensus)
!
: 다른 컴퓨터들이 해당 거래를 동의하는가, 동의하지 않는가.
😈 : 합의가 필요해? 전체 네트워크의 51%만 합의시키면 되겠군!
일반 집단보다 해킹 집단 세력이 더 많으면 블록체인은 해킹 집단의 세력의 판단을 따라가게끔 되어 있다.
다수가 선택하는 것을 따라가게끔 되어 있다.
블록체인은 체인이 긴 분기를 선택하게끔 프로그램되어 있기 때문.
작업증명 시스템에서 블록을 추가하려면 해당 컴퓨터가 네트워크에서 가장 빠른 컴퓨터여야 한다.
비트코인 네트워크 파워는 해시레이트(Hash Rate)
: 블록을 찾기 위해 컴퓨터가 작업하는 속도로 계산한다.
블록체인 특성상 과거는 바꿀 수 없음.
그렇기 때문에 51%를 유지하면서, 새로운 블록에서 새로운 비트코인을 발행한 뒤, 거래소로 보내 재빨리 출금하면 된다.
하지만, 51%의 장악력을 유지하면서 이 작업을 수행한다고 해도 다른 49%가 눈치 챈다면?
다른 컴퓨터들은 하드포크(HardForks)
를 진행한다
하드포크(HardForks)
란?
채굴자들 사이 합의가 되지 않을 때, 블록체인을 그냥 무시한다
하지만 51% 장악에 엄청난 에너지가 들어가지 않는 규모가 작은 코인은?
(이더리움 클래식-한달간 3번의 51% 공격을 당함)
그래서 등장한 것이 바로 지분증명
, 제 3세대 코인의 증명방식
지분증명의 자세한 설명은 용어정리-지분증명에서
지분 증명(POS)
의 주된 장점은 에너지 효율
과 보안
이다.
코인을 지속적으로 보유하는 사람에게 보상을 지급하는 방식이기 때문이다.
지분 증명이라는 말 그대로, 블록 형성과정 참여자들은 자신의 "지분"을 일정량의 해당 코인으로 증명해야한다.
이 증명이란, 네트워크 상에 일정량의 코인을 자신의 지분으로 스테이킹(Staking)
하는 것을 말한다.
스테이킹(Staking)
이란?
: 암호화폐를 일정기간동안 타겟 지갑에 묶어두는 과정
지분의 크기
는 다음 블록의 검증자 노드로 선택될 확률을 결정 한다.
그럼 형성자는, 마이닝 풀에서 더 이상 블록들을 마이닝(채굴)하지 않아도 되게 한다.
따라서 빠른 컴퓨터가 필요없고, 에너지 낭비도 없다.
그리고 노드를 운영하는 것은 쉽고 저렴하기 때문에 많은 유저들이 노드를 운영하려 할 것이다.
따라서 시스템 내 임의화된 과정들과 함께 네트워크를 보다 탈중앙화
시킬 것이다.
지분
은 형성자 노드가 잘못된 트랜잭션을 발생시키기 않게 하는 경제적 동기 가 될 것이다.
만약 네트워크가 잘못된 트랜잭션을 발견해낸다면,
형성자 노드는 지분의 일부를 잃게 되며, 향후 형성자로 참여할 수 없게 된다.
따라서 지분이 보상보다 크다면, 구축자는 부정 행위를 시도해 얻을 수 있는 것보다 많은 코인을 잃게 되는 것이다.
또한 보상을 위해 상대적으로 많은 코인을 유통시키지 않아도 되므로, 코인의 가격이 보다 안정적으로 유지될 수 있다.
주목할 키워드
에너지 99% 절약
, 중앙 집중화 위험 감소
, 51% 공격 위험 감소
, 새로운 코인발행 부담 감소
특정 노드에 의해 데이터 값이 조작되거나 이중 지불이 발생하는 등,
합의 알고리즘이 정상 작동하지 않는다면 해당 블록체인 시스템은신뢰성
을 잃는다.
따라서 효과적인 합의 알고리즘은 매우 중요하다.
최근 이더리움은 이더리움 2.0 을 발표하면서 작업증명(POW)
에서 지분증명(POS)
으로의 전환은 예고했다.
자세한 이더리움 2.0에 대한 내용은 이더리움 2.0 - 지분증명(POS)으로의 전환은 왜 논란인가? 에서