프로젝트가 끝나고 나니까 할일이 갑자기 사라져버려서 심심하다.
그래서 오랫동안(?) 방치한 티스토리에 블록체인 관련 내용을 가득가득! 채우려고 한다.
합의 알고리즘
합의 알고리즘은 블록체인의 무결성을 확보하는 방법 중 하나이다.
중앙집중체계에서는 데이터의 무결성을 중앙에서 확보한다. 중앙이 없는 블록체인에서는 합의 알고리즘을 통해 데이터의 무결성을 확보한다.
어떤 악의적인 노드가 자신에게 유리한 데이터를 담은 블록을 메인체인에 포함시키려고 할 수 있다. 누가 블록을 이어붙일 권한을 가지도록 해야 할까?
또는, 아래와 같이 Stale block[1]들이 존재하는 경우가 있을 수 있다.
이 경우 어느 브랜치가 메인체인인지 알 수 없다.
이러한 문제를 해결하기 위한 것이 합의 알고리즘이다.
합의 알고리즘에는 PoW와 PoS 외에도 여러 가지가 있는데 이번 포스팅에서는 이 두가지만 다뤄 보고자 한다.
PoW Proof-of-Work
작업증명 알고리즘에서 노드는 작업에 참여한 사실을 증명함으로써 블록을 추가할 권한을 얻는다. 작업에 참여한 사실은 (block의) Nonce[2] 값으로 증명된다. 노드들은 mempool에 있는 몇 개의 TX들을 뽑아서 블록을 형성하고, Nonce을 바꿔 가면서 해당 블록의 해시값이 특정한 조건을 만족하도록 한다. 0부터 시작해서 1씩 증가시키면서 조건에 부합하는 Nonce값을 가장 먼저 찾아낸 노드가 블록을 추가할 수 있게 된다. Nonce값을 찾은 블록이 있으면 모든 노드들이 해당 Nonce가 조건을 만족하는지 확인하고 이 확인 과정을 마치면 블록이 (Mother block에) 추가되게 된다. 따라서 PoW에서는 해시 파워가 높은 노드가 권한을 가져가게 된다고 할 수 있다.
이 때 두 노드가 동시에 valid한 블록을 생성할 수 있다. 그 결과 branch가 만들어지는데, 이 중 가장 긴 것(hash power가 가장 많이 소모된 브랜치)을 메인체인으로 선택한다. 따라서 악의적인 채굴자가 오염된 블록을 추가하려고 하는 경우, 전체 채굴자 hash power의 51%를 확보해야 한다. 이는 현실적으로 어렵기 때문에, PoW는 51% 공격을 쉽게 방어할 수 있다는 장점을 가지게 된다.
그러나 작업의 난이도가 올라갈수록 낭비되는 전력이 크다는 점이 단점이다. 비트코인에서는 약 10분에 하나의 블록이 생성될 수 있는 정도로 작업의 난이도를 조절한다. 작업자(채굴자)가 많아진 현재에는 작업에 필요한 hash power가 기하급수적으로 늘어났고, 이는 기업형 채굴자들이 블록 생성을 독점하는 구조로 이어질 수 있다.
PoS Proof-of-Stake
지분증명 알고리즘은 암호화폐 지분을 많이 가진 노드에게 블록을 추가할 권한을 준다. 이 떄는 채굴이 필요하지 않으므로, 노드는 채굴자 대신 '검증자'라고 불리게 된다. 단순히 지분이 많은 노드가 항상 검증자가 된다면 탈 중앙성에 문제가 생기므로, 검증자를 뽑는 여러 방식들이 고안되어 왔다. 예를 들어 확률적 지분증명(Stochastic PoS)에서는 랜덤으로 검증자를 선택하되, 검증자가 될 확률을 지분에 비례하게 설정한다.
PoS에서는 채굴이 필요하지 않기 때문에(혹은 중요성이 덜함) 상대적으로 전력 낭비가 심하지 않다는 장점이 있다. 또한, 지금까지 발행한 화폐의 양이 많은 체인의 경우에는 51% 공격이 PoW를 사용할 때보다 훨씬 많으므로, 이에 대한 보안성도 강하다. 그러나 검증자가 악의적인 블록을 이어붙일 수 있다는 문제가 있다. 이를 처벌하고 방지하는 여러 방법들이 제안되고 있다.
[1] Stale Block : (비트코인에서) 부모가 있고 Validate 되지만 메인체인에 속하지 않는 Block을 말한다. 이더리움에서는 Uncle Block이라고 부른다. (Stale block은 reward를 요청할 수 없는 반면, Uncle block은 reward를 받을 수 있다. 수수료는 받지 못한다.(출처: 이더리움 백서))
[2] Nonce : Nonce에는 Account nonce, PoW nonce가 있다. Account nonce는 Account가 만든 TX 개수이고, PoW nonce는 작업증명을 하기 위한 아무 의미 없는 값이다.
참고자료
https://tokens-economy.gitbook.io/consensus/chain-based-proof-of-stake
'블록체인' 카테고리의 다른 글
[행사 후기] 2023 Xangle Blockchain Foundation Week 참가 후기! (0) | 2023.01.30 |
---|---|
[Rust][The Book] 05. Using Structs to Structure Related Data (0) | 2023.01.28 |
[Rust][The Book] 4. Understanding ownership (0) | 2023.01.27 |
[블록체인] Delegate Call의 위험성 - Parity Wallet Bug (0) | 2023.01.07 |
댓글