PoA(Proof-of-Age), 단독 채굴을 유도하는 합의 알고리즘

Joonha Lee
CURG
Published in
13 min readMay 15, 2021

비트코인의 탈중앙성을 위협하는 채굴 풀(채굴 조합, Mining Pool)의 성능을 저하시켜 단독 채굴(Solo Mining)을 유도하는 합의 알고리즘을 소개합니다.

비트코인의 탈중앙성을 위협하는 채굴 풀(채굴 조합, Mining Pool)의 성능을 저하시켜 단독 채굴(Solo Mining)을 유도하는 합의 알고리즘을 소개합니다.
Dissolution

[목 차]

  1. 비트코인의 탈중앙성 유지 방법: 작업 증명(PoW)
  2. 채굴 풀(Mining Pool)의 등장과 탈중앙성 훼손 문제
  3. PoA(Proof-of-Age): 단독 채굴을 유도하는 합의 알고리즘

비트코인의 탈중앙성 유지 방법: 작업 증명(PoW)

블록체인에서 채굴(Mining)이란, 합의 알고리즘에 의해 블록의 소유를 정하는 일련의 과정을 뜻한다. 합의 알고리즘에는 여러 가지가 있는데, 비트코인, 이더리움 등은 PoW(작업 증명, Proof-of-Work)를 사용한다. PoW는 어떤 결과 값을 찾기 위해 ‘본인의 컴퓨터를 이용해 계산을 수행하는 노력’을 했음을 보이면 블록의 소유권을 주어 보상하는 알고리즘이다. 이때 누구나 ‘계산하는 노력’을 하여 답을 가장 먼저 찾기만 한다면 보상을 받아갈 수 있으며, 그 답이 유효한지를 네트워크의 참여자 모두 함께 검증하기에 블록체인은 탈중앙성을 유지할 수 있다.

비트코인의 PoW는 채굴 난이도(Difficulty)를 적절히 조절하여 약 10분마다 채굴이 이루어질 수 있게 한다. 난이도는 2016개의 블록이 생성될 때마다 블록 간 평균 채굴 시간 간격을 확인하여 그 간격이 10분보다 좁으면 난이도를 올리고 넓으면 난이도를 낮추는 식으로 조절된다.

채굴 난이도는 해시레이트(Hashrate)와 관련이 있다. 해시레이트는 채굴에 필요한 채굴기의 연산 처리 능력을 측정하는 단위이다. 보통 채굴기의 연산 처리 능력이 상승하면 채굴에 걸리는 시간이 단축되고 난이도가 상승하므로 ‘해시레이트 상승 ≈ 채굴 난이도 상승’으로 이해하면 된다.

Bitcoin’s hashrate from 2016 until now. (Source: Coin Metrics, 2021)

위 그래프는 비트코인의 해시레이트(Hashrate)를 보여준다. 비트코인의 해시레이트는 과거부터 꾸준히 우상향하고 있다. 채굴 성공에 요구되는 컴퓨터 성능이 계속 높아지고 있음을 뜻하며, 그만큼 개인들의 채굴이 어려워지고 있음을 알 수 있다.

채굴 풀(Mining Pool)의 등장과 탈중앙성 훼손 문제

개인들의 채굴이 어려워지는 이유는 결국 연산 처리 능력의 한계 때문이므로 힘을 합쳐 계산하는 집단이 나타났다. 이를 채굴 풀(채굴 조합, Mining Pool)이라 한다. 채굴 풀은 여러 대의 채굴기를 연결하여 하나의 슈퍼컴퓨터와 같이 연산을 수행하며, 채굴 보상을 각 채굴기의 해시파워(Hash Power)의 비율에 따라 분배한다. 이때 해시파워란, 각 채굴기의 연산 처리 능력을 뜻한다.

Distribution of the Bitcoin network’s hashrate (Source: Blockchain.com, 2019)

그런데 최근 채굴 풀은 그 규모가 커져 비트코인의 탈중앙성을 위협하고 있다. 위 도표는 비트코인 네트워크의 채굴 풀의 해시레이트 점유율을 나타낸다. 비트코인은 악의적인 참여자가 전체의 51%를 넘지 않으면 합의 과정에서 이를 견제할 수 있다. 그러나 현재 채굴 풀 2~3 개의 해시파워를 합치면 51%에 육박하기에 거래가 조작될 가능성이 있다. 이처럼 채굴 풀의 확대는 비트코인의 기본 철학인 탈중앙성을 훼손하기에 개선이 필요하다.

PoA(Proof-of-Age): 단독 채굴을 유도하는 합의 알고리즘

비트코인의 탈중앙성을 위해 채굴 풀은 좋지 않다. 따라서 단독 채굴(Solo Mining)을 유도할 필요가 있다.

Pooling is not Favorable: Decentralize Mining Power of PoW Blockchain Using Age-of-Work

위 사진의 Pooling is not Favorable: Decentralize Mining Power of PoW Blockchain Using Age-of-Work (by Long Shi, Taotao Wang, Jun Li, and Shengli Zhang) 논문은 단독 채굴을 유도하는 PoA(Proof-of-Age) 합의 알고리즘을 제안하였다.

PoA는 PoW(작업 증명, Proof-of-Work)를 기본 틀로 하여 만들어졌으며, PoW의 기본적인 성질들을 상속받는다. 그런데 1등으로 답을 찾아낸 우승자에게만 보상을 하는 PoW와 달리 PoA는 참여자가 채굴에 성공하지 못하였더라도 적극적으로 채굴을 시도한 기간인 ‘적극적 채굴 기간(Effective Mining Period)’에 따라 보상을 준다. (적극적으로 채굴을 시도한다는 말의 정확한 의미는 ‘D. 채굴 결과물’에서 설명하도록 하겠다.) 비트코인 네트워크의 유지를 위해선 채굴 경쟁이 필요하기 때문에 PoA는 1등뿐 아니라 블록체인 유지에 기여한 경쟁자들에게도 보상을 하고, 그 보상 정도를 채굴자별로 조절하여 결과적으로 단독 채굴의 유인을 만들어낸다.

PoA 의 디자인을 다섯 부분으로 나누어 설명해보겠다. 여기부터는 비트코인 블록 구조 및 블록 생성 과정에 대한 기본적인 지식을 전제로 설명하겠다.

A. 해시 퍼즐(Hash Puzzle)

B. 나이 고리(Age Ring)

C. AoW(Age-of-Work)

D. 채굴 결과물(Mining Outcomes)

E. 난이도 조절(Difficulty Adjustment)

A. 해시 퍼즐(Hash Puzzle)

해시 퍼즐(Hash Puzzle)이란, PoW에서 연산력을 이용해 해결해야 하는 문제를 말한다. 우선 PoW의 해시 퍼즐을 보자.

Hash Puzzle of PoW

k는 후보 블록의 높이(체인 상에서 몇 번째 블록인지)이다. H()는 암호화 해시 함수이다. h_{k}는 H()의 결과로 나오는 연속된 비트들이고 길이는 L이다. H()의 입력으로 들어가는 b_{k-1}은 이전 블록 헤더의 해시값이며, x_{k}는 nonce(정답 값)를, y_{k}는 후보 블록이 지닌 기타 데이터들(거래의 머클 루트 등)의 해시값이다. D는 해시 퍼즐의 난이도이고 T(D)는 목표값이다. 난이도는 정답의 조건으로 해시값의 D개의 최상위 비트가 0이어야 함을 뜻하기에 T(D)는 2^{L-D}로 표현된다.

따라서 위 식과 같이 난이도 D가 증가하면 T(D)보다 작거나 같은 블록해시값을 찾을 확률은 감소한다. 반대로 D가 감소하면 확률은 증가하게 된다.

이 해시 퍼즐을 PoA로 확장해보면 다음과 같다.

Hash Puzzle of PoA

PoW와 달리 r_{k}와 PK_{i}가 추가되었다. r_{k}는 높이 k의 블록에서 채굴자의 나이 고리(Age Ring)를 뜻하고, PK_{i}는 채굴자 i의 공개키를 의미한다.

B. 나이 고리(Age Ring)

그렇다면 나이 고리란 무엇일까.

채굴자 i는 높이 k의 블록을 채굴하고자 한다. 이때 채굴자 i는 k-n에서 채굴을 성공한 이력이 있다. 이때 채굴자 i의 l번째 블록에서의 나이 고리는 위 식과 같다. w_{l}은 r_{l}의 유효성을 증명하는 인자인데, w_{l}의 생성 방법은 ‘D. 채굴 결과물’에서 설명할 것이다. 우선 채굴에 성공한 직후 블록에서의 w_{l}은 NULL(비트 스트림 연산이므로 0이 아닌 NULL이다)으로 초기화됨을 알고 있자. b_{l-1}은 l-1번째 블록 헤더의 해시값이다. <.>은 인자를 순서대로 이어 붙이는(concatenating) 연산이다.

쉽게 말해, r_{l}은 이전 블록의 해시값(b_{l-1})과 이전 블록의 나이 고리(r_{l-1})로부터 도출되는 값이다. 즉 메인이 되는 블록 체인으로부터 독립된, 그러나 연관성을 가진 다른 체인이 생긴다는 것이다. 아래 그림처럼 말이다.

위 그림에서 네모 체인은 블록 체인을, 동그라미 체인은 나이 고리의 체인을 의미한다. 원문의 Ring이 어떤 것에 대한 비유일까를 고민했는데 열쇠에 달린 열쇠 고리를 표현하고자 한게 아닐까 싶다. 이제부터 얘기할 나이 고리는 메인 체인에 달려 있는 열쇠 고리같은 존재다. 나이 고리는 매 블록마다 존재하고 서로 의존성을 가지므로 체인의 형태로 존재하고, ‘각 채굴자마다’ 그 체인을 하나씩 가진다. (사이드 체인과는 전혀 다른 개념이다.)

C. AoW(Age-of-Work)

그렇다면 이제 나이 고리 체인을 활용해 참여자가 채굴에 적극적으로 참여한 정도를 표현해보자. 즉, ‘나이’를 표현해보자.

Δ_{i}(l)은 채굴자 i가 높이 l의 블록에서 갖는 AoW(Age-of-Work)를 뜻한다. AoW를 곧 ‘나이’로 해석해보자. 위 식과 같이 채굴자 i는 채굴에 ‘적극적으로’ 참여할 때마다 나이를 한 살 먹는다. 그리고 채굴에 성공하면 나이는 0살로 리셋된다.

D. 채굴 결과물(Mining Outcomes)

그렇다면 적극적으로 채굴을 시도했음은 어떻게 알 수 있을까. 또한 나이 고리의 유효성을 어떻게 검증할 수 있을까. 이 논문에서는 아주 획기적인 방법으로 이 두 가지 필요를 한번에 충족시킨다.

An illustration for three different mining outcomes.

우선 사용자의 적극성을 판단하기 위해 ‘A.해시퍼즐’에서 본 Hash Puzzle of PoA 식의 결과가 속하는 영역을 기준으로 삼는다. T_{M}은 블록 채굴의 목표값, T_{A}는 나이 고리의 목표값, 2^L은 가능한 모든 결과값의 영역을 뜻한다. 이때 T_{M} < T_{A} ≤ 2^L이다. T_{A}는 고정된 값이며 크지 않은 연산력으로도 충분히 도달할 수 있는 영역이다. T_{M}은 T_{A}와 달리 AoW에 의해 난이도가 조절된다. (T_{M}의 인자로 난이도 D가 들어가는 해시 퍼즐 식을 상기하면 된다.)

[ 결과 I ]

결과값이 0~T_{M}에 속하면 이는 블록 채굴의 정답을 발견한 것이다.

이 경우, 나이 고리의 w_{k}은 NULL로, AoW는 0으로 초기화되고 채굴자는 메인 체인 채굴 보상을 얻는다.

[ 결과 II ]

결과값이 T_{M}과 T_{A} 사이에 속하면 이는 블록 채굴의 정답을 발견한 것은 아니지만 충분히 적극적으로 채굴을 시도한 것이라고 판단한다.

이때의 x_{k}값이 나이 고리의 w_{k}값이 된다. 즉 실제 블록 체인의 nonce 값은 아니지만, 적극성을 보여주는 x_{k}값이 w_{k}가 되는 것이다. 이로써 나이 고리 체인의 정답을 발견함과 동시에 해당 나이 고리의 유효성이 검증된다.

[ 결과 III ]

결과값이 T_{A}보다 크면 이는 블록 채굴의 정답도, 나이 고리 채굴의 정답도 발견한 것이 아니다.

고로 값의 변화는 일어나지 않는다.

E. 난이도 조절(Difficulty Adjustment)

난이도는 ‘D. 채굴 결과물’의 T_{M}에 인자로 제공된다. 그리고 이 난이도 D는 AoW에 의해 결정된다. 이 논문에서 AoW가 임계점을 넘는지 여부를 기준으로 난이도를 부여한다. 예를 들어 임계점을 δ로 두고 두 영역으로 구분한다면 다음 식과 같다.

AoW가 δ보다 작으면 높은 난이도를 부여하고, δ보다 크거나 같으면 낮은 난이도를 부여한다. 쉽게 말해, 채굴에 적극적으로 참여하지만 채굴에 성공을 하지는 못한 채굴자에게는 낮은 난이도라는 보상을 주는 것이다.

종합해보자. 위에서 봤던 PoA 해시 퍼즐 식을 다시 보자.

Hash Puzzle of PoA

메인이 되는 블록 체인의 채굴을 위해선 기존 PoW 에서 구해야 했던 x_{k}와 더불어 r_{k}도 알아야 한다. 그런데 이 r_{k}는 채굴되는 w_{k}로 생성되는 값이다. 그리고 목표값의 범위 중 이 r_{k}가 속하는 영역이 T_{M}, T_{A}, 2^L 중 무엇인지에 따라 AoW가 갱신된다. 최종적으로 적극적으로 채굴을 시도했지만 한번도 성공한 적이 없어서 AoW 값만을 키워 온 채굴자는 블록 채굴 시 낮은 난이도(D2)라는 보상을 받아 채굴 성공 확률을 키울 수 있는 것이다.

지금까지 살펴 본 PoA(Proof-of-Age)에서 이끌어 낼 수 있는 효과로 논문은 다음 다섯 가지를 제시한다. 이 부분은 위 내용을 바탕으로 추론해보기를 추천한다.

Remark 1: 나이 고리 체인(Age-ring chain) — 나이 고리는 이전 나이 고리 값과 이전 블록의 해시값에 의존한다. 따라서 나이 고리 체인만을 따로 미리 계산하거나 체인을 분화시켜 분란을 만드는 것이 무의미하다는 장점이 있다.

Remark 2: 무시해도 될 만큼 작은 나이 고리의 오버헤드(Negligible overhead of age ring) — 나이 고리는 블록 해시 값 생성 시 하나의 인자로 포함되므로 그 오버헤드가 무시해도 될 정도로 작다.

Remark 3: 블록 검증(Block verification) — 블록 배포 시에 nonce 값과 나이 고리가 포함되므로 두 값이 적절한지를 쉽게 검증할 수 있다.

Remark 4: 시빌 공격 방지(Sybil attack resistance) — 채굴자 i는 공개키 PK_{i}로 식별된다. 시빌 공격을 위해 새 참여자가 여럿 들어온다고 가정하여도, 초기에 그들 모두의 AoW는 0으로 설정되므로 높은 채굴 난이도를 뚫어야 한다. 따라서 PoA는 시빌 공격을 방지할 수 있다.

Remark 5: 메모리를 사용하지 않는 채굴(Memoryless mining) — 메모리를 사용하지 않으므로 만약 유효한 나이 고리 채굴에 성공하면 PoA 해시 퍼즐에 인자로 나이 고리를 넣어두고 계속해서 블록 채굴을 수행할 수 있다. 이때 메모리를 사용하지 않기에, 채굴 확률에는 변화가 생기지 않는 이점이 있다.

여기서 다루지는 않았지만, 논문에서는 CTMC (Continuous Time Markov Chain)기법을 사용하여 PoA 합의 알고리즘의 효용성을 검증했다. PoA는 블록 생성률을 기존 PoW의 75%로 수준으로 줄이는 성능을 보였다. 즉, 채굴의 난이도가 그만큼 낮아지고 개인 채굴자에게도 기회가 돌아갔다는 것이다.

결과적으로 AoW(Age-of-Work)를 사용한 PoA(Proof-of-Age)는 채굴 풀 집중 현상을 완화시키고 비트코인 블록체인의 탈중앙화에 기여할 수 있다고 여겨진다.

논문 링크 : https://arxiv.org/pdf/2104.01918.pdf (Pooling is not Favorable: Decentralize Mining Power of PoW Blockchain Using Age-of-Work, Long Shi et al.)

글쓴이: 이준하

--

--