데이터 가용성과 댕크샤딩에 대하여

Clara Ex Machina
Holy Crypto
Published in
29 min readJul 11, 2023

🖇️ 원문 바로가기:

Robert: 안녕하세요, a16z와 함께하는 web3 에피소드로 다시 돌아온 로버트 하켓입니다. 최근 데이터 가용성 샘플링과 댕크샤딩에 관련하여 저희 리서처들과 대화를 나눴는데요, 이 개념들은 모두 블록체인 확장성과 더 발전된 블록체인 네트워크, 그리고 유저 어플리케이션과 관련되어 있습니다. 대부분의 내용이 특히 이더리움과 밀접한 관련이 있지만 오늘 등장할 몇몇 개념들은 전반적으로 컴퓨팅과 네트워크가 앞으로 나아갈 방향에도 적용될 수 있을 것입니다.

이 개념들을 다루려면 수학이 좀 필요한데, 이번 에피소드에서도 가볍게 다뤄보도록 하겠습니다.

청취자 여러분들을 위해 간략히 맥락을 설명해보자면, 오늘 자주 등장할 “다항식 커밋먼트(polynomial commitments)”는 복잡한 연산을 증명할 때 필요한 데이터의 양을 줄이는 기술입니다. 또, “interpolation(보간법)”은 제한된 데이터 포인트 세트 내에서 데이터를 재구성하는 방법이라고 이해하시면 됩니다.

더 자세한 설명은 저희의 데이터 가용성 샘플링에 대한 자료를 모아둔 a16zcrypto.com/das 에서 제공하는 이 글을 참조하시길 바랍니다.

자, 이제 데이터 가용성 샘플링과 댕크샤딩에 대한 에피소드를 시작해보겠습니다. 아직 이 개념들에 익숙하지 않으셔도 괜찮습니다. 오늘 저와 함께 이 개념들을 차근차근 함께 다뤄볼 전문가들을 모셨으니까요. 스탠포드의 교수이자 저명한 암호학자, 그리고 a16z의 크립토 리서치 어드바이저로 함께하고 있는 Dan Boneh님, 그리고 a16z 크립토의 리서치 파트너로 임하고 있는 Lera Nikolaenko님을 만나보겠습니다.

Lera: 함께 할 수 있어서 영광입니다.

Dan: 초대해주셔서 감사합니다, 로버트.

Robert: 이 자리에 함께 해주셔서 감사합니다. 앞서 언급한 글에서 댄과 레라는 프로토댕크샤딩을 개선할 수 있는 방법들에 대한 프로포절을 작성한 바 있는데요. 프로토댕크샤딩은 올해 후반부에 계획되어 있는 이더리움 업그레이드 안건 중 하나입니다. 해당 글에 정말 다양한 내용이 있는데, 여기서도 조금 다뤄볼까 합니다.

하지만 나무들을 들여다보기 전에 먼저 숲을 다뤄보고 싶군요. Dan님, 오늘의 주제인 데이터 가용성 샘플링에 대해 청취자 분들이 좀더 이해할 수 있게 도와주시면 감사하겠습니다. 다들 너무 당황하지 않으실 수 있도록 말이에요. 대중이 이해할 수 있도록 간결하고 쉬운 말로 설명해주실 수 있을까요?

Dan: 당연하죠. 데이터 가용성 샘플링에 대해 파고들기 전에 먼저 좀더 넓은 관점에서 한번 얘기를 나눠보도록 하겠습니다. 자, 앞서 이러한 기술들이 이더리움의 확장성 문제를 해결하기 위한 방법들이라고 말했었죠?

이더리움의 확장성을 위한 대표적인 기술로 롤업이 있습니다. 롤업은 사실 많은 양의 데이터를 온체인에 푸쉬해야만 합니다. 예를 들면 수백, 수천의 트랜잭션을 갖고 이를 이더리움 위에서 하나의 트랜잭션으로 처리해야 하는 방식입니다. 그리고 그 트랜잭션들과 관련 있는 데이터는 기본적으로 온체인에 푸쉬됩니다.

그러한 방식은 사실 상당량의 데이터를 온체인에 저장해야 한다는 것을 의미합니다. 문제는 그것을 ‘어떻게’ 해낼 것이냐입니다. 여기에서 바로 댕크샤딩이 등장합니다. 이더리움 재단에서 만든 개념이고요, Dankrad Feist 라는 사람이 제안한 것입니다. 구조적으로 아주 우아한 개념이고, Lera님과 저는 저희의 글에서 이 개념이 어떻게 작동할 수 있는지에 대한 간략한 설명과 이를 어떻게 잠재적으로 개선할 수 있을지 몇가지 사항들을 다뤄보고 싶었습니다.

Lera: 그렇습니다. 롤업은 본질적으로 이더리움에서 ‘실행’이 확장될 수 있게 하는 개념인데, 여기서 “데이터를 어떻게 확장할 수 있는가”라는 질문이 생겨나게 됩니다. 댕크샤딩/데이터 가용성 샘플링은 이더리움이 완전한 확장성에 도달할 수 있도록 도와주는 퍼즐 한조각이라고 볼 수 있습니다. 그래서 저희의 글도 상당히 기술적일 수밖에 없었는데요. ‘네트워킹’과 같이 연구하고 글 써볼만한 아주 흥미로운 주제들 중에 저희가 다루지 않은 부분들도 있긴 합니다만, 저희는 좀더 댕스샤딩의 암호학적 측면에 집중해보고 싶었습니다.

Dan: 만약 여러분이 이 분야에 관심을 갖고 계신 연구자라면, 여전히 연구가 필요한 아주 아름다운 문제들이 남아있는 것도 말씀드리고 싶습니다. 특히 코딩과 다항식 압축에 관해서요. 이러한 문제들이 해결될 수 있다면 좀더 효율적인 시스템을 만들 수 있게 될 것입니다.

Robert: 훌륭한 설명 감사합니다. 여전히 탐구가 필요한 영역들에서도 좀더 대화를 나눠보고 싶군요. 하지만 그 주제로 넘어가기 전에 먼저 이더리움의 블록체인 공간을 확보하는 이 프로포절에 대해서 좀더 얘기를 해보는 것이 좋을 것 같습니다. 그러니까, 블록체인은 쉽게 말하자면 이 시스템이 출시된 제네시스 블록부터 지금까지의 트랜잭션이 기록된 거대한 장부라고 볼 수 있습니다. 개발자들은 공간을 확보하고 데이터 처리량과 확장성을 개선하고, 거래에 필요한 비용을 줄이는 이러한 방식들에 대해 어떻게 생각하고 있나요? 다 듣기엔 좋아보이고 시스템의 사용성을 개선할 수 있는 방법들로 들리는데요. 실제로 그러한 방식들이 도입이 되려면 어떻게 해야 하나요? 그리고 이렇게 효율성을 개선하기 위한 방법들에 필요한 절차나 연구, 비용은 무엇일까요?

Lera: 가장 큰 챌린지는 단순히 밸리데이터들한테 더 많은 데이터를 저장하라고 강요하는 방식으로는 확장성에 한계가 있다는 점이라고 생각합니다. 블록 사이즈를 몇배로 늘리기 위해서 블록체인을 확장하고 싶다면, 각 밸리데이터가 블록의 작은 부분만 저장할 수 있도록 블록을 나눠야 합니다. 오류 수정(error correcting)이나 삭제 코딩(erasure coding) 등의 개념들이 등장하는 지점이 바로 여기입니다.

그러니까, 밸리데이터들에게 큰 부담을 지우지 않으면서도 블록 사이즈를 증가하는 것이 가장 기술적으로 어려운 부분이라고 할 수 있습니다. 그리고 댕크샤딩이 바로 그러한 문제를 해결하려고 하는 것입니다.

Robert: 삭제 코딩을 언급하셨는데요. 댕크샤딩이라는 기술이 작동할 수 있도록 하는 주요한 역할을 하는 것처럼 들립니다. 좀더 자세히 설명해주실 수 있을까요? 삭제 코딩은 어떤 기술이며, 어떻게 작동하고, 또 어떻게 적용될 수 있는 건가요?

Lera: 네, 물론이죠. 유저의 데이터를 담고 있는 블록을 갖고 이를 확장해본다고 생각해봅시다. 그 블록을 삭제코딩한다는 것은, 좀더 작은 블록을 큰 블록, 어느 정도 누락을 허용하는 블록으로 만드는 것입니다. 즉, 그렇게 만들어진 큰 블록의 어떤 부분은 유실되어도 된다는 뜻입니다.

댕크샤딩의 경우, 블록의 25%까지는 잃어버려도 되며 나머지 부분으로 유실된 부분까지 재구성할 수 있습니다. 이렇게 확장된 블록을 밸리데이터들에게 나눠주게 되면, 이 밸리데이터들 중 일부가 비잔틴 문제나 내부적 결함으로 인해 다운되어 블록의 일부 데이터를 잃게 되더라도 이를 복구할 수 있게 됩니다. 여전히 온라인이고 정직한 밸리데이터들이 그 부분을 복구할 수 있기 때문입니다. 삭제 코딩 기술이 제 역할을 하는 부분이 바로 이 지점입니다. 비잔틴 문제나 결함으로 인한 이슈를 겪고 있는 밸리데이터들을 대체할 수 있게 되는 것이죠.

Dan: 좀더 비유적인 표현들로 설명할 수도 있을 것 같습니다. 넷플릭스에서 영화를 보고 있다고 가정해봅시다. 이는 사실 넷플릭스 서버들이 당신의 컴퓨터로 데이터 패킷을 보내고 있음을 의미하는데요. 그 중 10%의 패킷이 당신의 컴퓨터에 도달하지 못하고, 당신의 컴퓨터는 나머지 90%만 볼 수 있게 된다고 쳐봅시다.

이 경우 일반적으로 비디오 손실과 성능 저하 문제를 겪게 될텐데요. 삭제 코딩 기술을 여기 적용해봅시다. 그러면 처음에 영상을 코딩할 때 삭제 코딩 기술을 이용해서 코딩을 하게 되고, 90%만이 당신의 컴퓨터에 도달하게 된다해도, 컴퓨터는 이미 전체 영화를 복구할 수 있는 충분한 정보를 모두 갖고 있게 되는 셈입니다.

흥미로운 사실은 삭제 코딩 기술은 사실 이미 모든 곳에 사용되고 있다는 점입니다. 삭제 코딩 기술이 없으면 커뮤니케이션 네트워크 자체가 제대로 동작할 수가 없습니다. 또다른 예시로는 심우주 탐사선이 있는데, 탐사선이 메시지들을 지구로 회신할 때 수많은 노이즈와 누락, 그리고 왜곡을 겪게 되지만 지구에 있는 우리는 그 신호를 완벽히 복구해서 화성으로부터 선명한 이미지들을 얻을 수 있습니다.

여기엔 오류 수정 코드라는 좀더 강력한 기술 또한 사용되는데요. 소실된 데이터 뿐만 아니라 왜곡되거나 값이 변경된 데이터 패킷 또한 복구할 수 있는 기술입니다. 블록체인의 맥락에서 흥미로운 부분은 모든 데이터가 서명된다는 점입니다. 서명 레이어에서 데이터 손상을 감지하기 때문에 데이터 손상에 대해서는 많이 신경쓰지 않아도 된다는 것이죠.

그러므로 사실 신경써야 할 부분은 악의적인 노드, 즉 데이터가 복구되는 것을 막으려고 드는 노드가 할 수 있는 유일한 행위, 데이터를 복구하는 데에 필요한 조각들을 제거해버리는 행위를 어떻게 방지하거나 해결할 수 있을 것인가, 하는 부분입니다. 데이터 왜곡/손상으로부터 복구하는 문제는 사실 서명 단에서 이미 방지되기 때문에 신경을 많이 쓰지 않아도 됩니다.

그러나 데이터가 유실되는 부분에 대해서는 고려하지 않을 수 없는데요. 데이터가 아예 유실되어버리면 데이터를 복구할 길이 없을지 모르기 때문입니다. 그러므로 데이터 왜곡이 아닌 누락만을 가정하는 상황에서 이 삭제 코딩이라는 기술이 매우 중요해지는 것입니다. 우리가 데이터를 갖고 있다면 그 데이터가 옳다는 사실만큼은 서명 덕분에 알 수 있습니다. 그러나 데이터가 유실되었다면, 그것을 어떻게든 복구해야만 하는데요. 이것이 바로 Lera가 설명한 삭제 코딩의 개념입니다.

방법은 간단합니다. 이더리움의 경우, 오리지널 데이터, 즉 블록을 가져다가 이를 확장하는 것입니다.

블록에 있는 데이터를 중복시켜 4배까지 확장하고 이를 여러 조각으로 분할한다고 생각해봅시다. 이 경우 모든 밸리데이터에게, “전체 블록을 저장할 필요 없어요, 그냥 이 작은 조각 하나만 저장해두시면 됩니다.” 라고 요청합니다.

블록을 복구할 때 우리는 이 밸리데이터들에게 갖고 있는 조각을 보내달라고 요청하게 될텐데요, 충분히 많은 밸리데이터가 작은 조각들을 저장해두는 역할을 수행하고 있다면, 전체 블록을 다 복구할 수 있을만큼 충분히 많은 조각들을 받을 수 있게 될 것입니다. 특히 댕크샤딩의 경우 복구율이 75% 입니다. 즉, 75%의 밸리데이터가 응답하여 75%의 데이터를 얻을 수 있게 된다면, 이것으로 전체 블록을 복구할 수 있음을 의미합니다. 이것이 바로 댕크샤딩의 코어 메커니즘입니다.

Robert: 정말 도움이 되는 설명이었습니다. 그러니까, 삭제 코딩이라는 것은 일부러 중복성과 백업의 개념을 가미해서 다시 그것을 재조립하고, 접근성을 높이고, 데이터를 확인할 수 있게 해주는 기술인 거네요.

Dan님께서는 이렇게 데이터 가용성 샘플링을 하는 이유가 나쁜 행위자들이 데이터를 제거해버리는 등의 행위들을 하는 것을 방지하기 위한 것이라고 하셨습니다. 좀더 정확히 어떤 것으로부터 방어하는 것일까요?

Dan: 네. 다음 대화의 토픽으로 좋은 안건일 것 같네요. 사실, 이더리움의 데이터 문제를 해결하기 위한 이런 프로포절들과 함께 아마 새로운 유형의 트랜잭션이 등장하게 될 것입니다.

일명 “블롭-운반 트랜잭션(blob-carrying transaction)”이라 불리는 유형인데요, 말 그대로 블롭을 블록에 임베드할 수 있게 되는 것입니다. 각 블롭은 128 킬로바이트고요, 이 블롭들을 블록들에 임베드할 수 있게 됩니다. 보통 블록은 이더리움의 상태를 변경하는 많은 트랜잭션들이 담겨있게 되는데, 기존의 트랜잭션 유형들과 더불어 하나의 블롭(앞서 말했듯 128킬로바이트), 혹은 여러 개의 블롭을 운반하는 트랜잭션들이 블록에 담기게 될 것입니다.

장기적인 계획으론 몇몇 데이터 운반 블롭들이 각 블록마다 담기게 될 예정인데 (그 계획을 실현하기 위해 어떤 과정이 필요할지는 아마 Lera 님께서 다뤄주실 수 있을 것 같습니다.) 이렇게 되면 블록의 사이즈가 아주 커지겠죠?

결과론적으로 예를 들면 30메가바이트 이상의 블록들이 생겨날 수도 있을텐데, 그런 대형 블록들을 밸리데이터들에게 저장하라고 요구할 수는 없을 겁니다. 현재의 블록 사이즈가 한 100 킬로바이트 정도 될텐데, 30 메가바이트라면 어마무시하게 사이즈가 증가하게 되는 것이죠. 그러므로 이 블록들을 작은 조각들로 쪼갤 필요가 생기는 것입니다.

각 밸리데이터, 각 노드가 이 작은 조각만을 저장하게 될 것입니다. 그렇다면 이제 문제는 밸리데이터가 ‘조각을 저장했습니다.’라고 말했지만 사실은 저장하지 않았다면 어떻게 할 것인가로 나아가게 될 것입니다. 우리는 이러한 문제에 어떻게 대처할 수 있을까요? 여기에 바로 데이터 가용성 샘플링이 필요한 것입니다. 데이터 가용성 샘플링은 블록 생성시 모든 사람들이 자신의 조각을 잘 받았고, 그것을 보유하고 있으며, 여러 조각이 난 블록을 실제로 복구할 수 있을 것이라는 사실을 테스트할 수 있는 아주 효율적인 방법입니다. 그리고 이 조각들은 전 네트워크에 잘 분산되어 저장되어 있게 되는 것이죠.

Robert: Lera님의 차례로 넘어가기 전에, 제가 이해한 것이 맞는지 한번만 체크하겠습니다. 현재의 블록 사이즈가 약 100 킬로바이트 정도 되며, 몇몇 업그레이드 이후에 블록 사이즈가 30 메가바이트까지 증가할 수 있게 된다고 하셨는데요. 블록 사이즈가 이렇게 증가하게 되는 이유는 새로운 유형의 ‘블롭’이라는 데이터를 수용하기 위해서고, 이는 우리가 기존에 블록에 담던 트랜잭션 데이터와는 다른 목적을 가진 데이터 유형임을 의미합니다. 그리고 이 블롭 데이터는 오프체인 레이어2 네트워크들이 좀더 일시적으로 데이터를 저장할 수 있게 하기 위한 것이고요. 맞습니까?

Dan: 네. 명확하게 중요한 부분을 되짚어주셔서 감사합니다. 이 블롭들은 롤업들에 의해 사용되게 될텐데요, 롤업들은 롤업 데이터를 저장해야만 합니다.

롤업들이 현재는 그 대신 “콜데이터”라고 부르는 것을 저장하고 있는데, 이것은 비용적인 면에서도 비싸고 콜데이터의 원래 목적과도 다릅니다. 그리하여 대신 이 데이터를 블록에 ‘블롭’ 형태로 저장하는 방향으로 가려는 것입니다. 흥미로운 점은 이 블롭들은 이더리움의 실행 레이어에서는 사용할 수 없을 것이라는 점입니다.

이들은 그저 블록에 블롭으로 담기게 됩니다. 실행 레이어들은 이 거대한 블롭들의 해시만을 볼 수 있게 됩니다. 이들은 블롭들에 담긴 각 바이트나 요소들에는 접근할 수 없습니다. 현재처럼 콜데이터 형태로 저장되고 그 콜데이터가 이더리움의 실행 레이어서도 모두 접근 가능한 상황과는 완전히 달라지는 것이죠.

이러한 단순화 때문에 블롭 데이터를 저장하는 것은 콜데이터를 저장하는 것보다 훨씬 비용 면에서 유리하게 됩니다. 본질적으로 레이어2 체제의 비용을 절감하는 것이 이 ‘블롭’의 목적인 것이죠. 현재 우리는 데이터를 콜데이터로 저장하는 데에 상당히 많은 비용을 지불하고 있습니다. 댕크샤딩 혹은 프로토댕크샤딩이 배포되고 나면 이 비용이 확실히 감소할 것입니다.

이는 레이어2 시스템의 비용을 줄이고 사용성을 높이는 효과를 낳을 것입니다.

Robert: Lera님, 이제 앞으로 우리가 이 ‘증가한 블록 사이즈의 미래’로 나아가기 위해 어떤 과정을 거쳐야할지 말씀해주시겠어요?

Lera: 네, 물론이죠. 들어가기 전에 앞서, Dan님께서 말씀하신 내용에 두 가지 첨언을 하고 싶습니다. 첫째로는 블록에는 ‘만료(expire)’라는 개념이 존재하며 밸리데이터들은 이 블롭들을 영원히 저장해둘 것이라고 보장하지 않는다는 점입니다. 현재는 이더리움 재단에 따르면 만료 기간이 약 30~60일 정도로 러프하게 설정되어 있습니다.

그러므로 이 기간동안에 이 블롭들을 다운로드 받고 로컬에 저장해둘 기회가 주어집니다. 네트워크는 이 블롭들을 삭제하지만 이 블롭에 대한 커밋먼트는 지속됩니다. 필요시 당신이 블롭을 갖고 있다면 콜데이터와 함께 실행 레이어에 이를 언제든지 재공급할 수 있습니다.

앞서 말했든 체인은 계속해서 블롭들의 해시를 저장해두고 있기 때문에 당신이 그 블롭들을 갖고 있는 한 언제든 이 블롭들을 재공급하여 맞는 블롭들을 보유하고 있음을 증명할 수 있습니다. 또, 이러한 블롭들에 대한 수수료 시장 또한 매우 다른 모습을 띠게 될 것이라는 점도 언급하고 싶네요.

블롭들의 수수료는 아주 다르게 책정될 것입니다. 이더리움에는 이제 두 개의 파이프가 생기게 됩니다. 하나는 만약 네트워크가 혼잡할 경우 더 많은 수수료를 내어 이를 실행시키는 파이프며, 다른 하나는 데이터 파이프로 파이프가 혼잡할 경우 데이터를 저장하기 위해 더 많은 수수료를 내야 하는 양상을 띠게 됩니다. 이 ‘저장’ 비용이 얼마나 비싸질지는 아직 알 수 없습니다. 현재의 콜데이터보다는 저렴해질 것이라고 직관적으로 이해할 순 있지만 얼마나 저렴해질지는 직접 부딪혀봐야 알 것입니다. 프로토댕크샤딩은 완전한 댕크샤딩으로 가는 과도기적 절차라고도 볼 수 있지만 동시에 이 부가적인 부하를 밸리데이터들이 어떻게 처리할 것인지, 그리고 이런 데이터 블롭들을 저장하는 데에 수수료가 얼마나 비싸게 책정될 것인지 등을 확인해보기 위한 실험적 절차라고도 볼 수 있습니다.

그러므로 프로토댕크샤딩을 통해 우리는 많은 실험을 해볼 수 있을 겁니다. 기본적으로, 삭제 코딩이나 오류 수정 등은 적용하지 않은 상태로, 데이터 블롭을 운반하는 특별한 트랜잭션 유형을 추가해보는 것입니다. 그리고 이 블롭들은 앞서 말했던 ‘만료’ 시한을 갖게 됩니다.

이더리움의 블록 사이즈가 결과적으로 조금 증가하게 되겠죠. 현재는 Dan님께서 말씀하신 것처럼 약 100 킬로바이트입니다. 프로토댕크샤딩이 도입되면 500 킬로바이트 정도로 증가될 예정입니다. 아주 큰 변화는 아니지만 그래도 우리의 가설들을 모두 테스트해보게 될 것이며 이더리움은 점차 온전한 댕크샤딩으로 나아가게 될 것입니다.

상상해봤을 때 블롭 데이터의 수수료가 현재보다 더 비싸질 것 같진 않습니다. 실행 레이어에서의 접근성을 신경쓰지 않는다면 이 블롭에 데이터를 담는게 항상 더 저렴할 것이라는 가설을 갖고 있습니다. 고속도로에 새로운 차선을 추가해서 통행량을 증가시키는 거랑 비슷한데, 특정 유형의 트랜잭션의 경우만 이 차선을 사용할 수 있으며, 무거운 데이터를 담고 있는 트랜잭션이나 실행하기에 ‘무거운’ 트랜잭션의 경우 기존 메인 차선들을 계속 사용하는 거랑 비슷하죠. 말이 되는지 모르겠네요, 하하.

Robert: 네, 잘 이해가 되었습니다. 그리고 ‘만료’ 기한이 존재하기 때문에 더 저렴해질 수 있는 것 같습니다. 30~60일 이후에는 블롭 데이터가 사라지고, 일종의 ‘흔적’이 남게 되는 셈이죠. 맞나요?

Lera: 네, 정확합니다.

Dan: 거기에 좀더 첨언하자면, 트랜잭션을 제출할 때, 많은 트랜잭션이 한번에 제출되게 되면 (예를 들어서 큰 NFT 컬렌션이 런칭해서 모두가 이를 민팅하려고 한다고 생각해봅시다.) 당연히 트랜잭션당 가격이 올라가고 수수료 시장이 활성화되게 되는데요.

블롭 데이터는 말하자면 일종의 병렬적 수수료 시장이 될 것입니다. 아마 트랜잭션을 제출하는 사람보다 블롭을 제출하는 사람이 적겠죠? 그러므로 당연히 ‘혼잡’ 현상이 더 적을 거고요. 하지만 사실 이 또한 얼마든지 혼잡해질 수 있습니다. 그러지 않길 바라지만 당연히 어떤 이유로 인해 데이터 파이프라인이 혼잡한 상황이 발생할 수 있고, 그러면 그 수수료 시장 또한 활성화될 수밖에 없겠죠. 하지만 말했다시피 블롭 제출의 수요가 트랜잭션 제출 수요보다 더 적으므로 트랜잭션보단 훨씬 적은 비용을 요하게 될 것입니다.

Robert: 지금까지 여러 업데이트들의 타임라인을 대략 논해본 것 같은데요. 많은 분들께서 작년 가을의 “The Merge”를 들어보셨을텐데요. 기본적으로 에너지 소비량 면에서 이더리움이 환경에 끼치는 영향을 없앤 큰 업그레이드였습니다. 그리고 지금 우리는 이더리움의 창시자 비탈릭 부테린이 “The Surge”라고 명명한 새로운 업그레이드 시기에 돌입하고 있습니다. 이전보다 훨씬 더 강력하게 블록체인의 확장력을 높일 수 있는 업데이트들이죠. 그리고 여기에 포함된 업데이트 중 하나가 바로 프로토댕크샤딩입니다. 올해 후반부로 예정되어 있죠.

그렇다면 프로토샤딩과 완전한 댕크샤딩 사이에는 어떤 일들이 일어날까요? 둘 사이의 차이는 무엇이며 완전한 댕크샤딩의 비전을 실현할 시점은 언제쯤일까요?

Lera: 정말 좋은 질문이네요. 그 길목에서 사실 더 연구되어야 할 문제들이 남아있어요. 특히 네트워킹에 관해서요. 밸리데이터들이 블롭의 조각들만을 저장한다면 밸리데이터들이 그 조각들을 복원하기 위해 서로 도와야 한다는 것을 의미하거든요. 만약 어느 밸리데이터가 얼마동안 잠들었다가 다시 돌아온다 해도 다른 밸리데이터들이 조각들을 복원할 수 있도록 도와줘야 할 것이라는 거죠.

그러므로 댕크샤딩을 위해 만들어지고 있는 네트워킹 프로토콜은 상당한 수준의 참여를 요해요. 이것을 개선하기 위해 흥미로운 리서치 영역들이 존재하고요. 그래도 현재까지는 프로토댕크샤딩에서 댕크샤딩으로 가는 길이 꽤나 명백한 것으로 보입니다. 남은 질문들은 아마 그것을 어떻게 더 나은 방식으로 개선할 수 있을지, 어떻게 더 효율적으로 만들 수 있을지 등일 겁니다.

Dan: 댕크샤딩이 온전히 시행되려면 여전히 많은 작업들이 남아있습니다. 사실 최근 댕크샤딩을 위해 매개변수를 공동으로 생성하는 큰 이벤트도 있었고요.

Lera: 네. 제가 알기론 아직도 “신뢰할 수 있는 셋업(trusted setup)” 의식에 참여할 사람들을 받고 있는 걸로 알고 있어요. 많은 이들이, 커뮤니티 차원에서 창의적인 방식으로 여기에 기여하고 있고요. 꼭 한번 확인해보세요.

Robert: Dan님, 프로토댕크샤딩에서는 각 블록당 4개의 블롭이 포함될 것이라고 들었는데요. 댕크샤딩은 어떤가요? 몇 개의 블롭을 담을 수 있게 될까요?

Dan: 좀더 정확히 말하자면 4개의 블롭이 아니라 최대 4개의 블롭입니다. 현실적인 목표는 2개고, 최대치는 4개에요. 댕크샤딩의 경우는 블록당 최대 30 메가바이트까지 목표로 합니다. 30 메가바이트 나누기 128 킬로바이트로 계산해보면 블록당 약 100개의 블롭인 셈이죠.

Lera: 현재 계획으로는 128 개의 블롭을 목표로 하고 있으며 최대치는 256개가 될 예정입니다.

Dan: 그러니까, 블록이 정말 거대해진다는 걸 알 수 있죠? 이렇게 블록이 커지면 밸리데이터들이 전체 블록을 저장해두긴 어려울 수밖에 없습니다. 그래서 조각을 내야 할 필요성이 생기게 되고요. 한 조각만 밸리데이터들이 저장할 수 있게 말입니다.

Robert: 이해했습니다. 포스팅에서 좀더 깊게 다루셨던 기술적인 수학 파트는 여기서 다 전달하기에 좀 어려운 감이 없지 않지만, 충분히 이해되네요. 그럼 이제 최근 포스팅에서 언급하셨던 몇몇 프로포절들을 좀더 다뤄볼까요? 연구해보신 바 몇몇 부분을 수정하면 프로토댕크샤딩, 좀더 기술적인 명칭으로는 EIP-4844 를 더 효율적으로 개선할 수 있다는 것을 밝히셨죠.

Lera: 네, 사실 연구의 대부분은 댕크샤딩 프로포절을 온전히 이해하기 위한 것이었습니다. 다만 그 과정에서 새로운 툴킷들을 발견할 수 있도록 수학, 즉 암호학적인 부분들을 좀 다른 방식으로 보려고 했던 것뿐이고요. 러프하게만 설명드리자면 블록을 통해 다항식을 맞추는 개념이었습니다.

블록은 직사각형이기 때문에 이변량(bivariate) 다항식입니다. 그 다음 이 다항식을 일종의 블록 확장, 즉 다양한 점에서 평가해보게 됩니다. 이러한 이변량 다항식들을 사용했다면 (댕크샤딩의 경우 다변량 다항식들의 목록을 사용하고 있습니다.) 이변량 평가, 이변량 보간법, 심지어는 이변량 오류 수정(bivariate error-correcting) 코드 등을 적용할 수 있게 됩니다. 하지만 물론 여기에는 아직 더 심도 있는 연구가 필요합니다. 그래서 어떤 부분들이 더 연구되면 이 안건을 보완, 개선할 수 있을지에 대해서도 포스팅에서 다뤘습니다.

Dan: 저도 좀더 설명을 드려보겠습니다. 댕크샤딩은 정말 아름다운 아이디어입니다. 진심으로요. 이더리움 재단의 공로를 모두가 인정할 필요가 있습니다. 특히 Dankrad [Feist]도요. 정말 정교한 구조에요.

처음에 저희는 댕크샤딩의 디테일들만 이해하고자 노력했었고, 실제로 모든 것들이 어떻게 작동하는지 이해하는 데에 꽤 오랜 시간이 걸렸습니다. 그러다가 어쩌면 이 메커니즘의 작동방식을 설명하는 글이 이 세상에 하나 정도 더 필요할 수도 있겠구나, 생각이 들었습니다. 원래의 댕크샤딩은 모두 단변량 다항식 커밋먼트(univariate polynomial commitments)를 사용하고 있었고, 우리는 여기서 각 행을 다항식으로 보았습니다. 삭제 코딩은 다항식을 이용합니다.

여기서 삭제 코딩에 대해서 좀더 설명해볼 수 있을 것 같은데요. 예를 들어 평면에 두 개의 점이 있고, 이 점들에 삭제 코딩을 하고 싶다고 쳐봅시다. 이 두 점을 지나는 선 위에 또다른 두 개의 점을 퍼블리싱해봅시다.

그럼 이제 총 네 개의 점이 있는 거겠죠? 만약 이 네 개의 점 중 두 개만 수신자에게 전달 되더라도, 수신자는 그 두 점을 이용하여 선을 복구하고 원래의 두 점을 복구할 수 있게 됩니다. 물론 저희는 선이 아니라 더 높은 차수의 다항식을 이용해서 임계값을 달성하지만, 전반적인 삭제 코딩의 개념은 이렇습니다.

기본적으로, 우리에겐 두 개의 점이 주어지고, 선을 긋습니다. 그리고 그 선 위에 더 많은 점들을 찍습니다. 그 많은 점들 중 두 개의 점만 수신자에게 도달해도 그 수신자는 선을 복원할 수 있으며 맨 처음 주어진 두 개의 점도 복원이 가능합니다. 댕크샤딩은 그러므로 블록을 행렬 매트릭스로, 데이터의 직사각형 집합으로 보고 이 삭제 코딩 과정을 정교하게 해내는 기술입니다.

이 ‘선’에 대한 비유를 수직적 그리고 수평적으로 확장시켜봅시다. 그러면 그게 바로 코딩된 블록이나 다름 없는데요, 이 직사각형, 즉 블록의 조각들이 서로 다른 밸리데이터들에게 전송되는 겁니다. 이 직사각형을 어찌보면 2차원의 물체로 접근해볼 수도 있겠죠. 그러면 아주 자연스럽게 Lera님께서 말씀하신 것처럼 이를 이변량 다항식으로 볼 수 있게 됩니다.

댕크샤딩이 하는 일은 바로 이러한 이변량 다항식에 커밋하는 아주 흥미로운 방식을 제공한다는 것입니다. 단변량 다항식 커밋먼트를 활용하여 이변량 다항식에 커밋하는 방법을 구축하는 셈이죠. 댕크샤딩에서 수행되는 복원 메커니즘 또한 선과 열을 기반으로 하는 구성 방식입니다. 이것에 대해서 파고 들수록 저희는 “여기 있는 거 결국 다 직사각형과 이변량 다항식에 대한 거잖아?”라고 깨닫게 되었습니다. 어쩌면 이변량 다변식의 보간법으로 데이터 복구를 행할 수 있는 방법도 있을지 모릅니다.

Lera: 그러니까 결국 블록 하나를 가져다가 그걸 양 방향으로 2배로 확장시키는 것과 같습니다. 결과적으로 4x 더 많은 점들을 얻게 되는 거죠. 그러나 4x배의 점들은 작은 사분면만을 암호화합니다.

보간법을 통해 암호화된 블록 전체를 복구하기 위해선 결국 하나의 사분면만이 필요한 셈이고, 이는 25%의 점들만으로 충분할지 모릅니다. 그러나 댕크샤딩은 단변량 보간법을 통해 작동하므로, 행과 열의 복구를 위해 블록의 75%를 필요로 하게 됩니다.

하지만 이변량 보간법을 수행하면 75%가 아니라 25%로 충분할 것입니다. 그러면 블록을 복구하는 데에 필요한 요소의 숫자를 줄일 수 있게 되겠죠. 이 경우 커뮤니케이션 측면과 데이터 가용성 샘플링 또한 개선될 것입니다.

여기서부터 문제는, 어떻게 효율적인 이변량 보간법을 수행할 수 있는지에 대한 수학적 과제입니다. 분명 더 나은 알고리즘이 필요합니다. 저희는 여기에 대해서 조금 리서치를 하고 있는 중이었고, 아직 연구가 많이 진행되지 않은 분야라고 느꼈습니다. 이런 식으로 이변량 보간법이 응용된 사례가 없어보이는데, 그게 그만큼 해결하기 어려운 문제일 수도 있겠죠. 하지만 이선(二線)의 보간법 알고리즘을 개선해보는 시도를 해보는 것이 분명 아주 흥미로운 방향성이라곤 생각합니다.

Dan: 알고리즘에 관심 많은 청취자 분들도 계실텐데, Lera님께서 말씀해주신 내용이 흥미로운 이유는 그간 단변량 보간법을 위한 작업들은 많이 이루어졌다는 점입니다. 단변량 다항식 위의 점들이 주어졌을 때 그 다항식을 복원해볼 수 있는 훌륭한 단변량 다항식 보간법 알고리즘은 이미 많이 존재합니다.

하지만 이변량 보간법 문제의 경우 상대적으로 관심을 받지 못해왔습니다. 그런 의미에서 블록체인, 이더리움, 댕크샤딩 등이 이변량 다항식 보간법 알고리즘 문제의 적용방식을 만들어내고 있다는 점이 아주 멋지다고 생각합니다.

우리에게는 이 연구가 꼭 필요합니다. 이변량 다항식 보간법을 위한 좋은 알고리즘이 있다면, Lera님께서 언급하신 것처럼 복원에 필요한 블록이 75%에서 25%로 감소하기 때문에 댕크샤딩을 크게 개선할 수 있게 됩니다. 그러므로 제게는 블록체인, 이더리움, 댕크샤딩 등이 새로운 연구 분야를 개척했다는 것, 혹은 적어도 이 분야를 우선시하고 있다는 점이 참 아름답게 느껴집니다. 이변량 다항식 보간법을 위한 효율적인 알고리즘, 새로운 알고리즘, 더 나은 알고리즘이 정말 필요합니다.

이러한 유형의 알고리즘에 대한 연구가 활성화되어 이 문제를 해결하는데에 도움이 될 수 있으면 좋겠습니다.

Robert: 수학 문제를 우회하지 않고 열심히 설명해주셔서 감사합니다. 단변량 다항식, 이변량 다항식 같은 용어들 때문에 어떤 부분은 좀 복잡하게 들릴 수도 있을 것 같습니다만, 지리학적이고 형태적인 관점에서 설명해주셔서 참 좋네요. 청취자 분들 또한 점들 위에 선도 그려보고, 직사각형도 상상해보면서 들으셨을 것 같습니다. 아마 하고 계신 연구에 대해 이해하는 데에 큰 도움이 되었을 겁니다.

말씀하신 내용 중에 현재의 프로포절은 복원을 위해 샘플의 75%을 필요로 하지만 여러분께선 이를 25%까지 낮출 수 있다고 하신 부분을 한번 다시 건드려보고 싶은데요. 75%와 25%는 상당한 격차입니다. 하지만 일반적인 상식으로 생각해보자면 25%는 절반도 되지 않는 수치인데 이 데이터가 실제로 가용하다, 혹은 가용했다는 것을 증명하기에 충분할 수 있는 건가요?

25% 의 데이터 샘플만으로도 시스템이 잘 작동하기에 충분하다는 것을 어떻게 보장할 수 있습니까?

Lera: 사실 그거 자체가 데이터 가용성 샘플링의 주제라고도 볼 수 있을 것 같습니다. 그것이 무엇을 달성하려고 하는지 말이에요. 왜냐하면 75%든 25%든, 이 복원 기준점이 그 데이터가 실제로 거기에 존재한다는 것을 증명하기 위해 얼마나 많은 샘플을 필요로 하는가를 결정하는 기준이니까요.

샘플링 방식은 다음과 같습니다. 네트워크의 밸리데이터들에게 이 암호화된 블록의 랜덤 요소 하나를 달라고 하는 겁니다. 이 조각에 대한 증거값을 받았을 때 그것을 증명해볼 수도, 체인이 저장해두고 있는 커밋먼트와 비교해볼 수도 있습니다. 여하튼 이 과정을 성공적으로 끝낼 수 있다면 알고리즘이 25%와 75% 중 얼마를 요구하느냐에 따라 최소한 1 마이너스 1/4 혹은 3/4의 확률로 데이터가 가용하다는 것을 확인할 수 있게 됩니다.

랜덤 샘플링을 계속해서 진행됨에 따라 “데이터가 실제로는 가용하지 않지만 가용하고 있다고 믿는 당신의 거짓 긍정률”이 기하급수적으로 감소하게 됩니다. 그 복원 과정에서 요구되는 데이터 양에 따라 그 감소율도 달라지겠죠. 복원이 25%의 데이터를 요구한다면 75%일 때에 비해 더 적은 샘플링만으로도 더 빠른 긍정률 감소율을 볼 수 있게 됩니다.

그러므로 복구 과정의 효율성에 따라 더 적은 샘플링만으로도 데이터 가용성 보장을 할 수 있게 됩니다. 그러므로 단순히 복구 과정만을 개선하는 것이 아니라 실제로 데이터 가용성 샘플링에 필요한 샘플의 수가 적어지는 것이죠.

데이터 가용성 샘플링이 흥미로운 것은 바로 ‘확률’에 기반하고 있기 때문입니다. 샘플링을 더 많이 할수록 데이터 가용성에 대한 보장률도 높아집니다. 확률을 높이고 싶으면 샘플링을 더 많이 진행하는 방식이죠.

Dan: 방금 Lera님께서 아주 중요한 말씀을 하신 것 같습니다.

댕크샤딩과 데이터 샘플링의 핵심에 대해 아주 잘 설명해준 내용이었습니다. 그러므로 청취자 분들이 한번 더 듣고 이해하실 수 있도록 다시 기술해보도록 하겠습니다. 아까 블록이 직사각형으로 암호화될 거라고 말했었죠?

이게 작동하는 방식은 삭제 코딩을 통해서인데요. 블록 데이터를 직사각형으로 보았을 때, 이 직사각형이 사실은 수많은 점들로 이루어져 있다고 상상해봅시다. 모든 점은 하나의 데이터에 해당하고, 이 점은 각기 하나의 밸리데이터에게 나누어집니다. 여기서 데이터 가용성 샘플링을 수행하기 위해 실제로 충분한 점들이 가용하다는 것을 증명하고 싶다고 쳐봅시다.

만약 75% 혹은 25% 이상의 점들이 가용한 상태라면, 삭제 코딩 방식을 사용해서 블록을 복구할 수 있게 됩니다. 하지만 그 점들이 가용하다는 것을 어떻게 알 수 있을까요?

이것이 바로 데이터 가용성 샘플링의 매커니즘입니다. 이 직사각형에 계속 다트를 던지는 것을 상상해보면, 다트를 던질 때마다 직사각형의 랜덤 포인트(점)에 적중하게 되고, 그 때마다 해당 점을 갖고 있는 밸리데이터가 “제가 이 점을 갖고 있습니다.”를 증명해야 하는 것입니다.

당신이 75%의 점이 가용하다는 것을 증명하고 싶다고 쳐보겠습니다. 당신에게는 직사각형 하나가 주어져있습니다. 그리고 거기엔 75%의 점만이 존재하죠. 이유는 알 수 없지만 나머지 점들은 사라진 상태입니다. 당신은 75%의 점이 여기 존재한다는 것을 증명하고 그 75%의 점만으로 전체 직사각형을 복구하고 싶습니다. 그것을 증명하기 위해 어떻게 하면 좋을까요?

당신은 아마도 직사각형에 다트 한 묶음을 던져볼 것입니다. 다트가 점을 맞출 때마다 밸리데이터는 그 점이 실제로 거기에 존재한다는 것을 증명해야 합니다. 100개의 다트를 던졌는데 100번 모두 밸리데이터가 “예, 여기 데이터가 있습니다.”라고 답변을 했다면, 거기에는 아마 75% 이상의 점이 존재하고 있던 것일 겁니다.

75%보다 적은 수의 점이 있었다면 확률상 네 개의 다트를 던지면 그 중 하나는 데이터 가용 증명에 실패한다는 것을 의미합니다. 100개를 던졌는데 100개 모두가 데이터 가용 증명에 성공한다면 아마 75%를 초과하는 점이 존재했던 것일 겁니다.

그러니까, 데이터 가용성 샘플링의 핵심은 랜덤 샘플링을 여러번, 뭐 100번까지도 진행하면서 그 결과에 따라 75%가 가용한 상태인지를 증명하고 데이터를 복구할 수 있게 되는 것입니다. 보다시피 75% 가용성을 보장하려면 100개의 다트를 던져야 한다쳤을 때, 25%를 증명하기 위해선 더 적은 수의 다트만으로도 충분하겠죠.

이는 샘플링 메커니즘을 위해 필요한 데이터 양의 감소를 의미합니다. 자, 여기서 데이터 가용성 샘플링 체크가 성공하면 밸리데이터들은 그것을 확인하고 블록에 ‘이 블록은 데이터 가용성 샘플링을 통과했습니다.’라는 서명을 하게 됩니다. 그러니까 데이터 가용성 샘플링은 실제로 블록을 완전히 복구해보지 않아도 복구를 할 수 있는 충분한 데이터가 가용한 상태임을 효과적으로 테스트해볼 수 있는 기술입니다.

아무리 강조해도 부족하지 않은 내용이라 세번이고 네번이고 반복하고 싶습니다. 이 모든 게 작동하는 방식이거든요.

Robert: 감사합니다. 다트보드나 다트 등을 통해 쉽게 설명해주시는 것이 참 인상깊었습니다. 많은 사람들에게 도움이 되었을 것 같습니다. 아쉽게도 지금 벌써 한시간이 다 되어서 마무리해야 할 것 같은데요. 마지막으로 하나만 더 묻겠습니다. 이 모든 논의의 요지가 무엇인가요? 효율성을 꼭 얻어야만 하는 이유가 무엇인가요?

Lera: 궁극적인 목표는 물론 블록체인을 확장하는 것이고, 이러한 새로운 기술들은 특히 이더리움이 온전한 확장성에 도달할 수 있도록 도와줄 수 있습니다.

꽤 흥미로운 접근법이라고 생각이 되는데, 왜냐하면 처음에 이더리움은 분명 샤딩이나 풀 샤딩 등에 대해서 고민하면서 꽤나 복잡한 디자인들을 생각했었습니다. 하지만 롤업이 이더리움의 실행 레이어를 확장하게 되면서 이더리움이 데이터 가용성 레이어 확장에 집중할 수 있게 했습니다. 롤업이 실행 용적/능력을 증가시키는동안 이더리움은 데이터 공간을 증가시킬 것이고, 이 두가지가 함께 성공하면 우리는 더 빠르고, 비용이 저렴한 블록체인을 만들 수 있게 되는 것입니다.

Dan: 네, Lera님께서 완벽하게 잘 설명한 것 같습니다. 이더리움의 확장성 여정은 롤업에 달려있고, 롤업이 더 효율적이면서 사용 비용 또한 저렴해지려면 데이터 문제를 해결해야 하지 않을 수 없습니다. 댕크샤딩은 그것을 위한 아주 우아하고 효율적인 기술이라고 생각되고요. 그러므로 궁극적인 목표는 롤업이 지금보다 더 저렴해짐으로써 이더리움이 확장할 수 있게 되는 것입니다.

Robert: 감사합니다. 트랜잭션이 더 저렴해지고 더 많은 트랜잭션을 처리할 수 있게 된다면 이더리움의 높은 가스비와 수수료 때문에 탄생할 수 없었던 수많은 새로운 어플리케이션들이 등장할 수 있게 될 것입니다. 오늘 저희 에피소드에 함께 해주셔서 감사하고, 청취자 여러분들께서도 데이터 가용성 샘플링과 댕크샤딩에 대해서 더 쉽게 알 수 있게 된 시간이었길 바랍니다.

더 자세한 정보는 Lera님과 Dan님께서 작성하신 이 글을 참조하시길 바랍니다. 정말 훌륭한 글이니까요, 꼭 읽고 거기에 있는 자료들도 한번 확인해보시길 바랍니다.

--

--