코다(Coda)를 향한 첫걸음

Blockchain at Yonsei
11 min readSep 8, 2020

--

이 글을 읽는 당신이 한 마케팅 회사의 직원이라고 생각해보자. 당신들 앞에 현재 드라마에 출연하여 인기 있는 배우를 자사 제품 모델로 섭외 하려하는 서류가 있고 이 서류가 옳게 된건지 검토를 하려 한다. 여기서 가정을 하나 해보자. 만약 당신과 서류 작성자 사이에 수 많은 사람들이 존재하고 일일히 그 사람들에게 검토를 받아야 하면 어떨까? 수 천, 수 만명의 사람들이 당신과 작성자 사이에 존재한다면 그 서류를 일일이 검토하는데 얼마나 많은 시간과 비용이 들지 않을까?

블록체인을 검증하는 것 또한 이와 비슷하다. 이름과 같이 블록이 쇠사슬 마냥 연결 되어 있는 블록체인의 특성상, 처음 몇 개의 블록이 연결 되어 있을 때는 최종 블록 생성자가 각 블록을 검증하는데 들어가는 시간과 경제적인 요소가 적다. 그러나블록이 수 천개, 수 만개, 혹은 그 이상이 연결 되어 있다면 이 블록들이 올바르게 연결 되어 있는지 검증 하기 위해서 여러분들은 계속 하여서 컴퓨터를 틀어놓고 앞에 앉아 있어야하며 이 검증이 끝나기까지 기다려야 한다. 여기까지 걸리는 시간과 비용은 그야말로 엄청난 손해일 것이다.

코다는 기존 블록체인의 이러한 문제를 해결하고자 등장하였다. 그리고 그 문제 해결의 열쇠는 바로 ZK-SNARKS (영지식 증명)이다. 이 기술을 활용한 블록체인 네트워크에서 최종 블록 생성자는 모든 블록을 일일이 거슬러 올라가며 검증할 필요 없이 검증이 올바르다고 증명하는 이의 인증만 있으면 그 검증을 신뢰할 수 있게 된다. 즉, 당신이 일일히 서류가 옳은지 검토 할 필요 없이 애초에 서류가 당신 앞에 그 서류가 옳다고 인증하는 인증서가 같이 도착하는 뜻이다.

ZK-SNARKS를 이용해 코다는 블록체인의 용량을 트윗 한 두개의 분량으로 줄이고 검증에 필요한 계산비용과 시간을 획기적으로 줄일 수 있었다. 그리고 이로써 블록 생성자가 늘어 날수록 신규 블록 생성자들의 진입장벽이 높아진다는, 즉, 블록체인이 대중화 될수록 신규 사용자가 블록체인에 접근하기 힘들다는 확장성의 문제를 해결하고 탈중앙화를 강화할 수 있다.

세상에서 가장 작고 가벼운 블록체인을 표방하는 코다지만 그 잠재력은 결코 작지 않다. 코다는 defi, 스마트 컨트랙트 등 기존 블록체인이 활용되던 분야에서 더 높은 확장성을 무기로 더 많은 사용자를 끌어들이고 산업을 확장할 수 있다. 코다 네트워크를 베이스로 만들어지는 어플리케이션 snapp(snark + application)역시 기존 이더리움의 dapp보다 사생활, 검증비용, 확장성이란 측면에서 메리트가 있는 만큼 앞으로 코다는 그 활용도가 클 것이라 장담한다.

그렇다면 이제부터 코다는 어떻게 구성되어 있고 어떻게 운영되는지 구체적으로 알아보도록 하자. 코다 네트워크는 검증인(verifier), 블록 생성자(block producer), 스나커(snarker)라는 3개의 참여자로 구성되어 있다. 검증인은 코다 네트워크를 검증하고 블록 생성자는 코다 네트워크의 블록을 생성 및 블록체인을 압축(zk-snark)하며 스나커는 블록체인에 오류가 없다는 인증서(snark)를 만들어서 블록 생성자에게 제공해준다.

검증인이란 자신이 원하는 정보(예를 들면 계좌 잔고)가 저장되어 있는 경로(머클트리, 일종의 파일 저장 경로라 보면 된다)와 블록체인(zk-snark)의 오류 여부를 검증하는 참여자들을 의미한다. 여기서 중요한 것은 코다는 다른 암호화폐인 비트코인이나 이더리움과는 달리 누구나 제3자의 도움 없이 핸드폰과 같은 기기만으로도 손쉽게 검증을 할 수 있다는 것이다. 따라서 코다 네트워크에 참가하는 대부분의 구성원들은 모두 검증인으로 참여할 수 있다.

블록 생성자는 블록을 생성하고 수수료를 받는 참여자들을 가리킨다. 블록을 생성하고 수수료를 받는다는 점에서 이들은 비트코인의 채굴자와 비슷한 역할을 수행한다고 볼 수 있다. 블록 생성자는 블록 생성을 자신이 직접 할 수도 있고 또는 이를 제 3자에게 위임하여 운영할 수도 있다. 그러나 만일 네트워크에 거부되는 불량 블록들을 자주 만들 경우 이에 따른 불이익을 받게 된다.

코다의 블록 생성자는 다른 암호화폐 프로토콜과는 달리 블록에 기록될 transaction에 대해 각각 인증(snark)해야 할 의무를 갖고 있다. 이 때 인증서(snark)는 본인이 직접 생산해도 되지만 스나커로부터 구매하여 사용할 수 있다. 비록 다른 암호화폐와 달리 추가적인 의무를 갖고 있지만 이를 통해 블록 생성에 필요한 비용을 줄여 블록 생성의 진입장벽을 낮춘다는 이점이 있다.

스나크(snark)는 오류가 없다는 것을 증명하는 일종의 인증서를 의미한다. 스나커는 트랜잭션을 인증(snark)하고 블록을 생성하려는 사람들에게 바로 이 인증서(snark)를 제공해주고 수수료를 받는 네크워크 참여자들을 의미한다. 블록 생성자는 인증서(snark)에 대한 수수료를 최소화하고 싶어하며 이로 인해 스나커들은 비용면에서 가장 효율적인 인증서(snark) 거래의 경쟁시장을 형성한다. 이 경쟁시장을 snarketplace(snark + marketplace)라 부른다. 그러나 만일 스나커가 불량 snark를 생성할 경우 해당 스나커는 일시적으로 네트워크 참여가 중지될 수 있다.

그렇다면 코다는 이 3개 참여자들의 활발한 참여를 어떻게 유도하는가? 그 답은 코다 네트워크로부터 각 참여자들이 얻을 수 있는 인센티브에 달려 있다. 참여자들이 얻을 수 있는 인센티브는 다음과 같다.

  • 검증인 : 제3자에 의존하지 않고 누구나 자신의 정보가 제대로 저장되어 있는지 손쉽게 스스로 확인할 수 있다.
  • 블록 생성자 : 블록 생성의 수수료를 인센티브로 받는다. 블록 생성자는 블록 생성을 위임하여 운영할 수 있고 다른 암호화폐 프로토콜보다 블록 생성의 비용이 적어 진입장벽이 낮기 때문에 비교적 쉽게 블록 생성자로 참여할 수 있다.
  • 스나커 : 블록 생성자가 필요로 하는 인증서(snark)를 제공하고 이에 대한 수수료를 받는다. 인증서(Snark)역시 생성비용이 낮아 누구나 스나커로 쉽게 참여할 수 있다.

코다 네트워크는 이렇게 검증인, 블록 생성자, 그리고 스나커에게 모두 참여의 인센티브를 제공한다는 점과 네트워크 참여의 진입장벽이 낮기 때문에 보다 참여자의 풀이 넓다는 점에서 참여자들의 활발한 참여를 유지할 수 있다.

코다 네트워크의 유지 방법은 코다의 통화정책을 통해서도 알아볼 수 있다. 코다는 코다 프로토콜이 발행하는 암호화폐로 블록 생성자는 전체 코다 통화량 대비 자신이 얼마나 보유하고 있는지에 따라 블록 생성의 수수료를 받게 되는데 이를 지분(stake)이라 한다. 코다의 통화 정책에서 중요한 점은 이 수수료가 블록과 인증서(snark)의 생성비용보다 충분히 높아야 하며 인플레이션은 안정적이되 적당한 변동을 허용하여 수수료의 가격이 일정수준으로 유지되어야 한다는 점이다. 즉, 수수료는 블록 생성의 메리트가 되면서 동시에 이로 인한 인플레이션이 지분을 보유하는(staking)데 대한 메리트를 꺾지 않는 수준 내에서 움직여야 한다. 이를 통해 궁극적으로 블록 생성을 위한 지분 보유(staking)참여율을 충분히 확보할 수 있고 이렇게 만들어진 수수료와 지분 보유(staking)참여율의 균형은 블록 생성을 원활히 하여 코다 네트워크의 지속적인 작동을 가능케 한다.

이제 코다 네트워크는 어떻게 조작의 위험을 방지하는지 알아보자. 이는 블록 생성자와 스나커를 둘러싼 네트워크의 구성원리를 통해 확인해 볼 수 있다.

  • 블록 생성자 : 블록 생성자는 지분 보유 비율(stake)에 따라 랜덤으로 블록을 생성할 수 있는 기회를 얻게 된다. 이를 통해 네트워크에서 블록 생성자들을 분산시켜 이들간의 단합을 방지한다.
  • 스나커 : 인증서(snark)의 생성비용은 굉장히 낮아 누구나 스나커로 참여하여 인증서(snark)를 거래할 수 있다. 이는 인증서(snark)제공을 일부 스나커가 독점하지 못하게 하고 모든 스나커가 공모하여 인증서(snark)를 조작하는 것을 막는다.

블록 생성자와 스나커에게 적용되는 이 원리들은 블록 생성자끼리, 스나커끼리 단합하는 것을 어렵게 할 뿐만 아니라 블록 생성자와 스나커간에 야합을 통한 악의적 조작이 일어나는 것을 방어할 수 있다. 이렇게 기록된 대상이 그 내용에 대한 조작을 허용하지 않는 특성을 갖게 되면 이를 검열 저항성(censorship resistance)을 실현했다고 부른다.

다음으로, 코다가 다른 사람에게 보내지는 과정과 어떻게 블록이 생성되는지에 대해서 알아보자. 블록체인에서 ‘지불’은 단순히 어떤 서비스나 물건을 사고 그것에 대한 값을 지불하는 것이 아니라, 일종의 거래라고 볼 수 있다. 이런 지불은 블록체인 내의 한 지갑에서 다른 지갑으로 가치를 전송하기를 요청하는 거래이고, 송신자가 지불되는 과정에서 얼마만큼 낼 수 있는지 (수수료) 연관된 비용도 포함되어 있다.

다음의 예를 통해서 Bob이 Alice에게 어떻게 코다를 보내는지 살펴보자.

첫번째 과정 : 지불 생성 — 밥이 ‘보내기’ 버튼을 클릭

코다 네트워크 내에서는 누구라도 코다를 보내고 그 내역을 공유하는 것이 가능하다(블록체인 분산원장의 특성). 이 지불 내역은 ‘Private Key’라는 암호화된 서명이 포함되는데 이것을 통해서 지불한 사람의 계좌를 특정할 수 있다. ‘Private Key’는 가게에서 5만원 이상 결제내역에는 자신이 결제했다는 것을 인증하기 위해 서명을 하듯이 개인만이 알고 있는 암호화된 서명이라고 생각하면 된다.

이 지불 내역은 그다음 과정을 거치기 위해서 코다 네트워크 내의 모든 Peer들에게 퍼지게 되고, 이는 local transaction pool에 존재하게 된다. 이는 거래가 증명되기 이전에 peer들이 들은 네트워크의 거래사실을 저장하는 장소이다.

두번째 과정 : 블록 생성 — Bob의 지불내역이 처리되어야할 내역에 포함된다.

다음으로 정해진 시간 내에 네트워크 내의 한 블록 생성자가 이 거래를 담당하기 위해서 선택된다. (은행 창구에서 담당자가 번호를 불러 주듯이) 블록 생성자는 지불내역에 포함되어 있는 수수료를 확인하고 처리해야 할 내역(transition block)에 이 내용을 포함시킨다. 블록 생성자들은 이 블록들을 생성함으로써 수수료(코다)를 얻는다. 블록 생성자는 영지식 증명(zk-snark)을 위한 블록에 대한 정보를 스나커에게 전달한다. 이를 받은 스나커는 이에 대한 snark를 생성하고 블록 생성자는 거래내역에 가장 비용 효율적인 snark를 선택함으로써 새로운 지불 내용에 대한 최종적인 증명을 완료한다.

세번째 과정 : 거래내역 SNARK 증명 — Bob의 지불내역이 SNARK로 인증된다.

네트워크의 스나커 노드는 새로운 처리해야할 거래내역(transition block)에 있는 각 단계마다 snark계산을 진행하게 된다. 이것들은 각각의 지불내역이 증명되었다는 인증서와 이전 지불내역 인증서의 까지 포함하는 증명이다. 결론적으로 모든 지불은 증명되었다는 인증서를 포함하게 된다. 스나커들은 이와 같은 인증서를 발행함으로 코다토큰을 블록생성자들로부터 수수료로 얻게 된다. 이 인증서들은 네트워크 전체로 퍼지게 된다.

네번째 과정 : 지불 증명과정 — Alice와 Bob의 계좌가 거래내역의 결과를 보여준다.

블록이 증명되고 난 후에는, 블록 생성자가 새로운 블록을 처리해야할 거래내역(transition block)에서 인증하여 생성을 완료한다. 그 다음에는 네트워크의 각 노드는 그들의 로컬 장부에 처리된 거래 내역을 반영하게 된다.

다섯번째 과정 : 지불 확인 레벨 — Alice는 거래가 완료되었음을 확신한다.

다음 블록이 추가되면서, 지불을 받은 수신자는 지불이 완료됐다는 것과 네트워크가 이 블록 생성에 대해서 합의하고 있다는 사실을 확인할 수 있고 향후 인증서가 계속 발행되며 신뢰성을 높일 수 있다. 이 모든 과정을 거치고 난 뒤 새로운 블록이 추가된 zk-snark 생성이 완료된다면 Alice와 Bob은 핸드폰과 같은 간단한 기기로도 손쉽게 거래 내역 및 잔고와 같은 정보의 저장 / 수정을 검증할 수 있다.

이렇게 해서 지금까지 코다에 대해 간략하지만 꼭 필요한 정보를 알아보았다. 혹시 코다에 대해 추가적인 관심이 있는 사람들은 yonseiblockchainlab@gmail.com로 연락하면 우리와 직접 소통하며 더 많은 정보를 얻을 수 있다.

Kihun Yun, Yangheon Sim, Jihwan Han

--

--