[블록체인 연구소] “있었는데요, 없었습니다” 블록체인의 골칫거리, 리오그(Reorg)

Block Odyssey Tech Blog
10 min readApr 12, 2023

--

어떤 액션을 일으키는 트랜잭션을 박스로 포장해놓은 단위, 블록이 연쇄적으로 이어져있는 형태를 블록체인이라 한다는 건 이제는 널리 알려져 있습니다.
그리고 그 연쇄의 끝에 어떻게 새 박스를 이어붙이는 것이 좋을지 정해놓은 규칙을 합의 알고리즘이라 부르는 것도 블록체인에 대해 공부할 때 여느 게임의 튜토리얼 보스같은 느낌으로는 금방 마주치게 되는 개념인 것 같습니다.

거래의 위변조가 어렵다는 것이 블록체인의 장점이자 때때로 단점이 되기도 하는 주요 특징이지만, 실제로는 블록이 뒤집히는 현상이 의외로 드물지 않게 발생하곤 합니다.

오늘은 블록체인 업계의 오랜 이슈 중 하나인 리오그(Reorg)에 대해 알아보고, 이와 관련한 몇 가지 흥미로운 이야기를 소개해 드리겠습니다.

컨센서스

다수의 참여자가 사전에 정해진 규칙에 따라 거래를 검증하고 블록을 생성하여 통일된 원장을 유지하면서 인센티브로 코인을 가져간다는 일련의 큰 흐름은 거의 모든 퍼블릭 블록체인에서 채택되고 있지만,
블록 생성 권한을 누구에게 줄 것인지 혹은 1개 블록에 얼마나 많은 거래를 담을 수 있게 할 것인지와 같은 세부 스펙은 각자 조금씩 차이를 두고 있습니다.

주요 스펙 중 하나인 합의방식(Consensus) 또한 다양하게 나뉩니다.

리오그

블록체인 재구성(Reorganization),
줄여서 흔히 리오그라고 불리는 이 용어는 어떤 이유로 인하여 메인체인이 뒤바뀌는 현상을 말합니다.
시작부터 합의 이야기를 늘어놓은 이유가 여기 있는데, 메인체인을 결정하는 규칙이 컨센서스, 즉 합의방식과 상통하는 개념이기 때문입니다.
메인체인이 뒤바뀐다는 것은 메인체인을 구성하는 블록이 바뀐다는 뜻이고, 이는 블록에 포함된 거래가 번복될 수 있다는 것을 의미하기 때문에 특히 서비스 제공자 입장에서 난감한 문제가 됩니다.

모든 리오그는 포크에서 시작됩니다.
전 세계에 넓게 분포한 모든 노드가 단일 원장을 유지하고 검증하기 위해 서로 끊임없이 데이터를 주고받아야 하는데, 노드 간의 물리적 거리와 데이터의 제한된 이동 속도로 인해 어쩔 수 없이 발생하게 되는 레이턴시(Latency)가 포크,
즉 분기를 일으키는 주요 원인으로 알려져 있으며, 다음과 같은 상황을 예로 들 수 있습니다.

“비트코인 노드 A가 논스를 발견하여 블록 전파를 시작한 시점과 거의 동시에 지구 반대편에 있는 노드 B도 논스를 발견해 블록 전파를 시작하여,
비트코인 네트워크가 ‘노드 A의 블록을 메인체인에 연결한 노드들’ 과 ‘노드 B의 블록을 메인체인에 연결한 노드들’ 로 분리”

실제로는 대부분의 포크가 일시적 현상에 그친 채 네트워크가 다시 단일 메인체인을 유지하는 상태로 돌아오는 편입니다.
그러나 만약 포크된 2개 이상의 체인들 중 어느 한 체인의 블록에만 포함된 트랜잭션이 있었다고 가정하면, 가령 그 체인이 메인체인 경쟁에서 패배하여 리오그되는 시점에 해당 트랜잭션은 ‘있었는데 없었던’ 것이 되기 때문에, 절대로 쉽게 생각하기 어려운 이슈라는 것을 알 수 있죠.

생각보다 포크 자체가 발생하는 빈도 또한 낮지 않아서, 과거 이더리움의 경우 2022년 9월 15일 진행되었던 머지(Merge) 업그레이드를 통해 작업증명 체제에서 지분증명(PoS) 체제로 전환되기 전까지는 포크 블록(Uncle Block) 채굴자에게도 유의미한 채굴보상을 지급하기도 했습니다.

리오그 해결책

리오그를 통해 메인체인이 변경되면 거래가 번복될 가능성이 있고, 포크가 발생하는 것이 리오그의 원인이기 때문에, 포크 발생 가능성을 낮추거나 없애기 위해 결국 합의 메커니즘을 건드리는 것이 리오그 이슈의 근본적인 완화책 또는 해결책이 되는데, 예를 들면 다음과 같습니다.

‘어.. 그러면 이더리움의 경우
아직 완결되지 않은 일부 최신 블록들은 여전히
리오그 발생 가능성이 남아있는거 아닌가..?’

라고 생각하셨다면 정답입니다.

완결된 체크포인트 블록을 포함하여 그 이전에 생성된 블록은 일부 예외상황이 발생하지 않는 한 번복되지 않는다는 것이 보장되기 때문에 사실상 안전하다고 볼 수 있지만,
그 이후에 생성된 블록은 아직 완결되지 않은 상태에 있기 때문에 여전히 리오그 가능성이 남게 되며,
실제로 2022년 5월에 이더리움 비콘(Beacon)체인에서 소프트포크 관련 이슈로 7개의 블록이 리오그되는 일이 발생하기도 했습니다.

코스모스의 경우 조금 다른 접근을 취하는데, 블록 생성자로 선출된 검증인이 블록을 제안하면, 해당 블록을 전파받는 다른 검증인이 유효성 검사 직후 블록을 메인체인에 연결하는 이더리움과 달리,
‘이 블록을 메인체인에 연결해도 괜찮을 것 같아!’ 라는 투표를 먼저 블록 생성자에게 전달하고, 그렇게 2/3 이상의 검증인의 OK사인이 확인된 이후에 해당 블록을 메인체인에 연결합니다.
확실하게 동의를 얻은 뒤 블록을 연결하기 때문에 즉시 완결성(Instant Finality)을 보장할 수 있게 되는 것이죠.

그러나 위와 같은 접근은 블록을 전파받고 끝이 아닌, OK사인과 같은 통신을 주고받는 별도의 절차가 포함되기 때문에 적지 않은 레이턴시가 추가 발생한다는 단점이 있습니다.
그럼에도 코스모스의 블록 생성 주기가 이더리움보다 짧은 이유는 블록 생성자로 선출될 수 있는 검증인 후보를 상위 175명으로 제한하였기 때문인 것으로 보입니다.
비탈릭 부테린이 제시한 블록체인 트릴레마의 개념처럼 탈중앙화, 확장성, 보안 사이의 트레이드오프인 셈입니다.

여담으로 코스모스와 비슷한 합의 방식을 채택한 클레이튼의 경우 즉시 완결성을 확보하면서도 1초의 매우 짧은 블록 생성 주기를 갖고 있는데,
이는 클레이튼의 검증인 수가 비교적 적고 각 검증인이 서울을 중심으로 일정 거리 이내에 있어 물리적 거리도 비교적 짧기 때문으로 알려져 있습니다.

추가로 도움이 될 만한 리오그 관련 이야기들도 몇 소개해 드리겠습니다.

리오그 관련 이야기 1 — 비트코인

2019년 5월, 바이낸스 거래소의 핫 월렛에서 약 7000개의 비트코인이 도난당하는 사건이 있었습니다.
해당 피해로 생긴 고객 자산의 구멍은 거래소의 자본으로 충당되었기 때문에 사용자 입장에서 피해를 체감하는 일은 없었지만,
창펑자오 바이낸스 대표는 당시 비트코인 채굴자를 포함한 일부 관계자들과 비트코인 원장의 리오그를 일으킬 것인지 논의했던 것으로 알려져 있습니다.

“After speaking with various parties, including @JeremyRubin, @_prestwich, @bcmakes, @hasufl, @JihanWu and others,
we decided NOT to pursue the re-org approach.”

2021년 5월 중국에서 암호화폐 채굴이 금지된 이후 많은 채굴업체가 미국 등 해외로 이동했지만, 그 이전에는 채굴, 거래소, 코인 등 블록체인 업계 전반에 걸쳐 중국계열이 강세인 경향이 있었기 때문에,
소위 ‘최상위 포식자’에 가까웠던 그들의 인적 네트워크를 통해 동원할 수 있는 비트코인 해시파워로 7000개의 비트코인이 이동하기 이전 시점부터 모든 블록을 다시 채굴하는 극단적 시나리오의 구상이 가능했었다는 것이 크게 놀랄 만한 일은 아닙니다.

다만, 그 때 그들이 비트코인 리오그에 대해 STOP이 아니라 GO를 선택했었다면 그 시점부터 암호화폐는 신뢰를 잃고 붕괴하기 시작했을지도 모릅니다.

‘할 수 있음에도 하지 않는 것은 그것을 하는 결과 잃을 것이 훨씬 많기 때문이다’ 라는 논리가 적용될 수 있는 적당한 예시라고 볼 수 있겠습니다.

리오그 관련 이야기 2 — 폴리곤

가장 대중적인 이더리움 레이어2로 자리매김한 폴리곤 또한 꾸준히 리오그 이슈가 발생하는 체인 중 하나입니다.
폴리곤은 레이어1인 이더리움에 폴리곤 네트워크의 일종의 스냅샷인 체크포인트를 제출하고 검증인 셋을 관리하는 등 폴리곤의 심장 역할을 하는 헤임달(Heimdall) 레이어와 EVM호환 사이드체인 역할을 하는 보어(Bor) 레이어로 구성되어 있으며,
일반적으로 ‘폴리곤을 사용한다’ 라는 것의 의미는 폴리곤의 보어 레이어를 사용한다는 것과 같습니다.

폴리곤은 약 30분마다 이더리움에 체크포인트를 제출하기 때문에 이더리움의 경우와 마찬가지로 ‘아직 완결되지 않은’ 블록이 항상 존재하며, 실제 리오그 빈도는 하루에 약 5회 이상으로 생각보다 많은 편입니다.
각 리오그로 영향을 받는 블록 수는 1~3개 블록 정도에 그치는 경우가 많지만 가끔 상당히 큰 규모의 리오그가 발생하는데,
예를 들면 지난 2월에는 무려 157개 블록이 뒤집히는 리오그가 발생하여 헤이든 아담스 유니스왑 대표가 공개적으로 해결을 촉구하는 메시지를 보내기도 했습니다.

폴리곤은 가장 많은 대중적 채택을 받는 퍼블릭 블록체인 중 하나이지만, 리오그 이슈를 포함하여 아직 해결해야 하는 메이저 이슈가 여전히 남아있기도 합니다.

리오그 관련 이야기 3 — 거래소

거래가 번복될 수 있다는 것이 리오그가 서비스 제공자 입장에서 난감한 문제가 되는 이유라고 앞서 설명했습니다.
이는 모든 서비스 제공자에게 해당되는 문제이지만 특히 거래소의 입장에서 깊은 고민거리가 되는데,
사용자가 거래소에 암호화폐를 입금하여 현금화 후 은행 계좌로 출금해서 나간 뒤 해당 암호화폐의 입금 기록이 번복되는 상황이 발생할 수 있기 때문입니다.

이로 인해 거래소에서는 암호화폐 입금 시 특정 횟수의 블록 컨펌이 발생하기 전까지 입금 처리를 지연시키는 조치를 취할 수밖에 없게 되는데,
예를 들어 업비트의 경우 이더리움 입금 시 48회의 블록 컨펌을 기다리게 되며,
사용자의 입금주소에 이더리움을 전송한 트랜잭션이 담긴 블록을 포함하여 48개 블록이 생성될 때까지 리오그가 발생하지 않을 경우에 비로소 입금 처리가 진행됩니다.

여담으로 거래소 입장에서 ‘이 정도면 리오그 가능성을 배제할 수 있겠다’ 싶은 정도까지 기다릴 필요가 있다는 것을 이해하면 보이는 것들 중 하나로 작업증명 체제를 채택한 비주류 암호화폐 이야기를 해볼 수 있는데,
예를 들어 비트코인의 하드포크로 생겨난 비트코인골드의 경우 네트워크 전체 해시파워가 높지 않아 51% 공격을 받는 일이 많기 때문에 거래소 입장에서 리오그 가능성을 배제하기 정말 쉽지 않습니다.
비트코인골드의 블록 생성 주기는 약 10분인데, 현재 비트코인골드의 입출금이 가능한 업비트의 경우 입금반영에 무려 300회의 컨펌을 요구하고, 이는 약 50시간을 기다려야 함을 의미합니다.

이보다는 덜하지만 비슷한 예시로 들 수 있는 이더리움클래식의 경우 블록 생성 주기 14초, 요구 컨펌 횟수 1000회로 약 4시간을 기다려야 하게 됩니다.
사용자 입장에서 상당히 긴 시간을 기다려야 하는 셈이지만 리오그에 대해 알고 있으면 충분히 이해할 수 있는 것들이죠.

글을 마치며

리오그를 주제로 글을 작성하면서 계속 드는 개인적인 의문점이 있었습니다.
몇년동안 매일같이 개인지갑을 쓰면서 거래소와 개인지갑 간 입출금을 하고 있는데 정작 저는 실제로 한 번도 리오그를 체감한 적이 없었거든요.
어느정도 커뮤니티 활동을 하는 편이지만 인터넷에서도 리오그 관련 피해를 봤다는 글을 본 기억이 없습니다.

리오그의 영향을 받는 블록 내 트랜잭션의 대부분이 이미 각 포크체인에 (몇 번째 블록에 포함되었는지는 각자 다를 수 있어도) 모두 포함되었기 때문에, 어느 체인이 메인 체인으로 선택된다고 하더라도,
실제로 ‘있었는데요 없었습니다’ 를 당하는 트랜잭션의 수는 정말 일부에 불과한 것이 아닐까? 같은 생각이 들기도 하는데요.
이런 의문점은 다음에 조금 더 리서치를 해봐야 할 것 같습니다.

이 글이 누군가에게 도움이 되었길 바라며, 리오그 이야기는 이쯤에서 마무리하겠습니다.

감사합니다.

--

--