안녕하세요 연세대학교 블록체인 학회의 팀원으로 활동하고 있는 @kyeong72 입니다.
블록체인에 관심이 많으신 스팀잇 가족분들이라면 Finality 라는 단어를 종종 보셨을 거라고 생각하는데요! 마침 이더리움 리포트에서 finality에 관한 좋은 기사가 있어 여러분들께 소개해드리고자 두 번째 포스팅을 적게 되었습니다.
저의 이더리움 리포트 시리즈 첫번째 포스팅에서는 암호화폐의 통화공급이 고정되어야만 하는가?입니다. 흥미로운 내용이니 관심이 있다면 이 글도 읽어주시면 감사하겠습니다.
이 시리즈는 이더리움 리포트에서 좋은 글을 가져온 것입니다. 그리고 좀더 이해하기 쉽게 의역과 추가설명을 많이 넣어서 적었습니다.
그렇다면 본격적으로 과연 finality가 무엇인지에 대해 알아보도록 하겠습니다.
UI가 참 이쁜 다음사전에 finality를 쳐보니 1. 최종적인 상태 2. 결정적인 3. 종국 이라는 결과를 얻을 수 있었습니다. 결정적? 최종적 상태? 음... 블록체인의 특징이라고는 들었는데 이게 구체적으로 뭐를 뜻하는지는 잘 모르시겠다구요? 그렇다면 저와 함께 이더리움 리포트를 읽으면서 이 개념을 파헤쳐 보겠습니다!!
Blockchain "Finality" Explained
블록체인 기술을 설명해주는 특징들 중의 하나는 거래들이 불역적이고 절대로 수정될수 없다고 간주된다는 점입니다. 하지만, 조금 더 자세히 들여다보면 이러한 특징은 100% 맞다고 할수가 없습니다(!!). 왜 불역성이 100% 보장될수 없는지를 이해하기 위해서, 우리는 블록체인의 "가장 긴 체인의 법칙"이라는 특징을 알아볼 필요가 있습니다.
채굴자들이 블록체인에 블록을 생성할 때, 그들은 가장 긴 체인에 그들이 막 만들어낸 블록을 붙여넣으려고 합니다. 하지만, 어떠한 순간에라도, 한 개 이상의 체인이 존재하는 것도 가능합니다(이게 분기라고 불리는 현상이죠!). 이런 분기 현상이 언제 발생하느냐? 바로 복수의 채굴자가 정확히 똑같은 시간에 블록을 동시에 생성했을 때입니다. 이 때 체인은 두 가지 갈래로 갈라지게 되는 것이죠. 이 시점에서, 메인 체인이 두 개로 나누어졌기 때문에 어떤 체인이 유효한 체인인지 알 수가 없습니다. 두 체인 모두가 새로운 블록을 추가할 것입니다. 그리고 두 체인 중의 하나가 다른 체인보다 먼저 블록을 검증하고 자신의 체인에 붙이게 된다면 가장 긴 체인이 될 것이고 공식적으로 가장 긴 체인으로 인정받게 될 겁니다. 여기서 탈락한 블록에 저장된 거래내역들은 공식적인 기록으로 간주받지 못하게 됩니다.
가장 긴 체인의 법칙은 POW 알고리즘에서 과거 거래들이 절대로 바뀔 수 없도록 보장한다는 불역성을 해치는 문제를 일으키게 됩니다. 눈치가 빠르신 분들은 이미 생각하셨겠지만 체인을 가장 길게만 만들면 타당한 체인으로 인정받기 때문에** '이론적으로는' 자기 입맛대로 거래내역을 조작해** 가장 긴 체인을 만드는 방법이 가능한 것이지요!
POW 알고리즘의 부작용 중의 하나는 채굴 중앙화를 부추긴다는 점입니다. 이는 블록체인에서 내주는 수수께끼의 난이도가 올라가기 때문입니다(비트코인의 경우, 채굴자가 거래 내역들을 다 모아서 블록에 저장한 다음 이를 체인에 붙이기 위해서는 랜덤으로 정해진 특정 목표값보다 작은 Nonce라는 값을 순수히 컴퓨팅 파워로 때려박아 찾아내여 합니다. 여기서 특정 목표값이 점점 작아진다면 그것보다 작은 Nonce값을 찾는 것은 더욱 어려운 일이 되겠지요).
채굴 중앙화는 과거 기록들이 절대로 수정될 수 없다는 블록체인의 Finality에 대해 의문을 제기합니다. 이론적으로는 특정 시기에 중앙화된 채굴 풀이 새로운 가장 긴 체인을 만들만큼 충분한 컴퓨팅 파워를 가지고 과거 기록을 바꿔버릴 수 있기 때문입니다. 제가 위에서 말씀드린 바로 그 방법으로요!
혹시 "아니.. 어차피 원래 검증되었던 블록들 뒤에 새로운 블록들을 추가하는 건 똑같은데 뭐가 잘못되었다는 거야?"라고 생각하시는 분들이 있을 겁니다. 왜나면 저도 잘 이해가 안됬거든요... 새로 추가된 블록들도 모두 검증을 거쳐서 들어온 블록들인데 왜 이게 문제가 되는 건지요. 하지만 문제는 이렇게 해석해야 할 듯 싶습니다. 이더리움 리포트에서는 다음과 같이 말하고 있습니다.
새롭게 등장한 가장 긴 체인은 블록체인의 시작점부터 시작해야 할 필요는 없습니다. 최근에 분기가 되고 나서 버려진 체인을 주워담아 거기서부터 블록생성을 시작해서 가장 긴 체인을 만들면 됩니다. 이렇게 생긴 가장 긴 체인에 있는 모든 거래들이 여전히 유효한 거래들이지만, 가장 긴 체인을 이리 저리 바꾸는 것은 거래의 finality에 불확실성을 가져다주게 됩니다. 마치 합법적인 정부이기는 하지만 하루에 한번씩 정부가 바뀌어버리는 꼴이 되는 것이지요. 오늘은 더불어민주당, 내일은 자유한국당, 그 다음날은 바른미래당 뭐 이런 식으로요.
이러한 POW의 단점을 극복하기 위해서, POS 합의 알고리즘은 거래의 finality를 확실하게 담보하기 위한 방법을 가지고 있습니다. 아까도 말씀드렸다시피, finality는 과거의 거래들이 절대로 바뀔 수 없다는 보장입니다. 이는 "채굴자"에 더불어, "검증인"이라는 개념을 도입함으로써 달성할 수 있습니다.
검증인들은 key checkpoints라는 특정 시점(대략 매 100블록마다)에 블록체인을 점검하는 데에 그 역할과 책임이 있습니다. 이러한 체크 포인트에서 검증인들의 3분의 2이상이 특정 블록을 승인하면 그 블록은 finalized, 즉 과거에 조작되지 않았다는 것을 인정받게 됩니다. 한번 이렇게 검증을 받게 되면 그 체크 포인트 전의 어떠한 블록을 바꾸는 것은 불가능하게 됩니다. 추가로 설명하자면 엄청난 리소스를 가진 채굴 풀에서 새롭게 가장 긴 체인을 만들려고 해도 체크포인트 전부터 새로 만들기 시작했다면 그 체인은 아무리 길게 만들어도 인정을 받을 수 없다는 논리입니다.
오늘은 finality 개념에 대해서 알아보았는데요! 블록체인에 한번 기록된 거래는 추후에 절대로 바뀌면 안된다는 것을 의미하는 것이었습니다. 하지만 POW에서는 채굴 중앙화로 인해 이러한 가치가
훼손될 위험이 있고 이를 해결하기 위해 검증인이라는 새로운 역할이 생겨난 것까지 살펴보았습니다. 사실 저는 아직 Immutability와 finality의 개념과 확실히 구분되지 않는데요, 기회가 된다면 두 개념을 비교하는 글을 작성해보도록 하겠습니다!
아..어렵습니다.ㅎ
그래도 차근히 읽어보고 가네요.ㅎ
감사합니다! 팔로우했습니다. 앞으로의 글도 관심있게 봐주세요 :)