신뢰의 게임: 다중 서명과 위원회에 의해 조작되는 롤업들

극한 웹3
2023-07-25 17:43:33
수집
다중 서명과 위원회에 조종당하는 롤업은 당신이 생각하는 것만큼 "좋지" 않습니다.

作者:링크, 기크 Web3

솔라나가 점차 쇠퇴하고 OP가 토큰을 발행한 이후, Layer2와 Rollup은 수많은 Web3 종사자들에게 새로운 피난처가 된 것 같습니다. 여전히 지속되는 약세장과 FTX의 폭락, Multicoin의 막대한 손실로 인해 이더리움의 경쟁자들은 차례로 Web3라는 큰 무대에서 물러나고 있으며, ETH와 경쟁할 자신감을 잃어가고 있습니다. 점점 더 많은 사람들이 Rollup을 새로운 서사 중심으로 보고 있으며, 점점 더 많은 프로젝트가 L2에서 우후죽순처럼 나타나고 있습니다.

하지만 이것이 "허상의 번영"인지, "언제든지 터질 수 있는 거품"인지? Rollup과 L2는 정말로 대부분 사람들이 주장하는 것처럼 좋은 것일까요? 그것이 사람들이 인식하는 것처럼 안전할까요? 많은 OP Rollup이 사기 증명을 갖추지 못한 것 외에도, Rollup의 안전성 문제는 무엇이 있을까요?

이 글은 L2 BEAT가 최근 발표한 "Upgradeability of Ethereum L2s"에서 영감을 받아, Rollup 업그레이드 뒤에 있는 다중 서명 및 위원회의 신뢰 위험과 Rollup에 대한 이전의 고전적인 논의, 그리고 최근의 Multichain 사건을 연관 지어 L2가 많은 사람들이 생각하는 것처럼 "좋지 않은" 이유를 종합적으로 이야기합니다.

Rollup 원리 간략 설명

Rollup 작동 원리 간략 설명:

이더리움 Rollup = Layer1 위의 계약 집합 + Layer2 네트워크의 자체 노드.

Layer2 네트워크 노드 집단은 몇 가지 역할로 나눌 수 있으며, 그중 가장 중요한 것은 정렬기(Sequencer)입니다. 정렬기는 Layer2에서 발생하는 거래 요청을 수신하고, 그 실행 순서를 결정한 후 거래 시퀀스를 배치(Batch)로 묶어 Rollup 프로젝트의 Layer1 계약(이하 Rollup 계약으로 통칭)에 전달합니다.

Starknet의 상호작용 논리 도식

Layer2의 전체 노드는 정렬기로부터 거래 시퀀스를 직접 가져올 수 있으며, 정렬기가 Layer1에 전송한 거래 배치(Batch)를 읽을 수도 있지만, 후자는 전자보다 더 높은 최종 확정성(변경 불가능성)을 갖습니다. 일반적으로 거래 배치가 정렬기에 의해 Layer1에 전달되면, 그 거래의 순서는 변경할 수 없습니다(이더리움에서 블록 롤백이 발생하지 않는 한 Rollup의 거래 시퀀스는 변경되지 않습니다).

거래 실행은 블록체인 장부의 상태를 변경하기 때문에, 거래 순서 외에도 Layer2 전체 노드는 정렬기와 장부 상태를 동기화해야 일관성을 보장할 수 있습니다.

따라서 정렬기는 Layer1의 Rollup 계약에 거래 배치를 전달하는 것 외에도 거래 실행 후의 상태 업데이트 결과 (State root / State diff)를 Layer1에 전달해야 합니다.

L1(이더리움)은 실제로 L2 노드들의 게시판 역할을 하며, L2 자체 네트워크보다 더 분산화되고, 더 신뢰할 수 있으며, 더 안전합니다. L2의 전체 노드에게는 L1의 Rollup 거래 시퀀스 + 최초의 Stateroot를 확보하기만 하면 L2의 블록체인 장부를 복원하고 최신 Stateroot를 계산할 수 있습니다. 만약 L2 전체 노드가 스스로 계산한 Stateroot와 정렬기가 L1에 발표한 Stateroot가 일치하지 않는다면, 정렬기에 사기 행위가 있음을 의미합니다.

가장 직관적인 가상 사례는: L2의 정렬기가 사용자 자산을 훔칠 수 있는가입니다. 예를 들어, 정렬기가 발생하지 말아야 할 거래를 위조할 수 있는지(예: 특정 L2 사용자의 토큰을 정렬기 운영자의 주소로 전송한 후, 다시 이 토큰을 L1으로 전송)입니다. 이러한 문제는 정렬기가 잘못된 거래 데이터를 발표하거나 잘못된 Stateroot를 발표한 경우 어떻게 해야 하는가?로 귀결됩니다.

정렬기에 대한 사기 위험에 대해, 다양한 유형의 Rollup은 서로 다른 대응 조치를 취합니다. Optimistic Rollup(낙관적 Rollup)은 L2 전체 노드가 사기 증명(Fraud Proof)을 제공하여 정렬기가 L1에 발표한 데이터에 오류가 있음을 증명할 수 있도록 허용합니다. 예를 들어, Arbitrum은 노드 화이트리스트를 설정하여 화이트리스트에 있는 L2 노드가 사기 증명을 발표할 수 있도록 허용합니다.

그 외에도 대부분의 거래소와 민간 크로스체인 브리지 프로젝트가 L2 전체 노드를 운영하고 있어 오류를 즉시 발견할 수 있으므로, 대부분의 Rollup 정렬기가 자산을 훔칠 성공률은 기본적으로 0입니다(왜냐하면 결국 현금을 인출해야 하므로 거래소에서 완료해야 하거나 훔친 코인을 L1으로 전송한 후 다른 방법을 찾아야 합니다).

그림의 Aggregator는 실제로 정렬기입니다.

하지만 사기 증명이 없는 Optimism의 경우, 정렬기는 Rollup 자체의 크로스체인 브리지 계약을 통해 자산을 훔칠 수 있습니다. 예를 들어, 정렬기 운영자는 거래 지시를 위조하여 다른 사람의 L2 자산을 자신의 주소로 전송한 후, Rollup의 브리지 계약을 통해 훔친 코인을 L1으로 전송할 수 있습니다. 사기 증명이 없기 때문에 OP의 전체 노드는 잘못된 거래에 도전할 수 없으므로 이론적으로 OP의 정렬기는 사용자의 L2 자산을 훔칠 수 있습니다(정말 그렇게 하고 싶다면).

2023년 7월 24일 기준, Bedrock 업그레이드 이후 OP는 여전히 사기 증명 시스템을 발표하지 않았습니다.

이러한 문제를 해결하는 방법은 "사회적 합의"(커뮤니티 구성원 및 소셜 미디어 등의 여론 감시를 통한) 또는 OP 공식의 신용 보증에 의존하는 것입니다.

흥미롭게도 최근 어떤 거래소는 Arbitrum과 Optimism 사용자가 내부로 자산을 전송하는 지연 시간을 줄였습니다(100개의 L2 블록에서 1개의 L2 블록으로 감소). 이는 사실 ARB와 OP의 정렬기가 악의적이지 않을 것이라는 신뢰를 기반으로 합니다 (그들이 공식적으로 보증된 중앙화 서버라고 가정).

낙관적 Rollup과는 달리, ZK Rollup유효성 증명(Validity Proof, 종종 ZK Proof와 혼동됨)을 통해 정렬기의 사기 문제를 해결합니다. ZK Rollup 네트워크에는 Prover라는 노드가 있어 정렬기가 발표한 거래 배치 Batch에 대한 유효성 증명을 생성합니다. 동시에, L1에는 유효성 증명을 검증하는 전용 계약(일반적으로 Verifier라고 함)이 있어, 거래 배치 및 Stateroot/State diff에 해당하는 증명이 Verifier 계약의 검증을 통과하면 최종 확인(Finalized)됩니다. ZK Rollup의 공식 브리지는 유효성 증명 검증을 통과한 출금 거래만 허용하므로, 이는 Optimism보다 훨씬 더 신뢰할 수 있습니다.

Scroll이 정의한 거래 데이터의 3단계

이론적으로 OP Rollup의 안전성은 L2 전체 노드에 의해 보장됩니다 (최소 1개의 사기 증명을 발표할 수 있는 정직한 노드가 필요). ZK Rollup의 안전성은 L1의 Verifier 계약에 의해 보장됩니다 (L1 노드가 거래 최종 확인을 완료). 표면적으로는 둘 다 "L1의 안전성을 상속받는다"(L1을 통해 거래의 최종 확인/결제를 완료함으로써)고 할 수 있으며, 이더리움 최대주의자들은 이를 "L1의 안전성과 동등하다"고 부르기도 합니다(이더리움의 거래 결과 최종성과 일치), 하지만 실제 상황은 그렇지 않으며, 심지어는 그보다 훨씬 더 멀리 있습니다.

그런 "고전적인 논의"의 점들

첫째, ZK Rollup의 유효성 증명 생성 속도가 매우 느립니다. 정렬기는 1초 내에 수천 건의 거래를 실행할 수 있지만, 이 수천 건의 거래에 대한 증명을 생성하는 데는 최대 몇 시간이 걸릴 수 있습니다. 하지만 이 문제는 쉽게 해결될 수 있습니다. 주류 ZKR은 기본적으로 증명 생성 작업을 분할하고 서로 다른 Prover 노드에 병렬 처리하도록 하여 증명 생성 속도를 크게 향상시킵니다.

둘째, L2 노드가 L1에 데이터를 발표하는 지연을 고려해야 합니다. 정렬기나 Prover가 매번 L1에 데이터를 전송할 때마다 고정 비용이 발생합니다(마치 매번 화물을 운송할 때 컨테이너를 소모하는 것과 같습니다). L1에 자주 데이터를 발표하는 것은 비효율적이거나 손해가 될 수 있으므로, 정렬기와 Prover는 L1에 데이터를 발표하는 빈도를 최소화하고, 대량의 데이터를 한 번에 모아서 패키징하여 발표합니다.

다시 말해, 사용자 수가 부족하고 발생하는 거래 수가 충분하지 않을 때, 정렬기는 L1에 데이터를 발표하는 것을 지연시킵니다. 예를 들어, 작년 사용자 수가 적었을 때, Optimism은 30분마다 L1에 거래 배치를 전송했습니다. 지금은 사용자가 많아져 이 문제가 효과적으로 해결되었습니다. OP와는 달리 Starknet은 State diff 발표 빈도를 줄이는 방식을 통해 데이터 비용을 낮추었고, 이로 인해 Starknet의 거래 최종 확인 지연이 7~8시간으로 늘어났습니다.

그 외에도 대부분의 ZK Rollup은 비용을 더욱 줄이기 위해 "여러 개의 증명을 집합하여 한 번에 L1에 전송"하는 경향이 있습니다. 즉, Prover는 하나의 증명을 생성한 후 즉시 L1에 전송하는 것이 아니라, 여러 개의 증명이 모두 생성된 후 집합하여 L1의 Verifier 계약에 전송합니다. (사실 증명을 집합하는 과정은 하나의 증명으로 여러 증명의 계산 단계를 포함하는 것입니다.)

Scroll의 집합 증명 도식

이렇게 하면 증명의 발표 빈도가 더욱 낮아지고, 거래가 시작되어 최종 확인될 때까지의 지연이 더욱 길어집니다.

블록 탐색기 표시 기준으로, Polygon ZKEVM의 거래 확인 지연은 대략 30~50분, Starknet과 Zksync Era는 7시간 이상입니다. 분명히 이는 "부분적으로 L1의 안전성을 상속받는 것"일 뿐이며, 이더리움 지지자들이 말하는 "L1의 안전성과 동등하다"는 것과는 거리가 멉니다.

물론, 이상의 문제들은 기술 발전을 통해 해결될 수 있습니다, 가까운 미래에 실현될 것입니다. 예를 들어, 많은 프로젝트가 고성능 하드웨어를 개발하여 유효성 증명의 생성 시간을 줄이고 있으며, Optimism은 곧 사기 증명 시스템을 발표할 것이라고 약속했습니다. 이더리움의 Danksharding 계획은 Rollup의 데이터 비용을 수십 배, 심지어 더 높게 줄일 수 있어 위에 나열된 문제를 효과적으로 해결할 수 있습니다.

해결하기 어려운 "인간 지배" 문제

DeFi와 같은 응용 프로그램 프로젝트와 마찬가지로, Rollup 네트워크의 운영은 L1의 관련 계약에 의존해야 하며, 이 계약은 "업그레이드 가능"합니다. 즉, 일부 코드를 교체할 수 있으며(대부분의 Rollup은 프록시 계약을 사용함), 다중 서명이나 안전 위원회의 권한 아래 즉시 진행될 수 있습니다. 결론부터 말하자면: Rollup은 소수의 사람들에 의해 통제되는 다중 서명이나 안전 위원회를 통해 L1의 계약 코드를 빠르게 변경하고 사용자 자산을 훔칠 수 있습니다.

출처: L2 BEAT 연구 보고서

먼저 "Rollup 계약은 왜 업그레이드가 필요한가""어떻게 업그레이드되는가"에 대해 이야기해 보겠습니다. 이더리움의 계약 코드는 배포 후 변경할 수 없지만, Rollup 개발 과정에서 다양한 버그가 발생할 수 있으며, 이는 잘못된 결과를 초래할 수 있습니다. 동시에 Rollup은 빈번한 제품 반복을 진행하며 새로운 기능을 자주 추가해야 합니다. 더 극단적인 경우에는 해커가 Rollup 계약을 공격할 수 있으므로 Rollup 계약은 업그레이드 가능해야 하며, 이는 종종 프록시 계약을 통해 실현됩니다.

출처: wtf academy

프록시 계약은 이더리움 계약 개발에서 일반적으로 사용되는 방법으로, 계약의 데이터와 비즈니스 논리를 분리하여 서로 다른 계약에 저장하는 방식입니다. 데이터(상태 변수)는 프록시 계약에 저장되고, 비즈니스 논리(함수)는 논리 계약에 저장됩니다. 프록시 계약(Proxy)은 delegatecall을 통해 함수의 실행 과정을 전적으로 논리 계약(Implementation)에 위임하고, 최종 결과를 호출자(Caller)에게 반환합니다.

프록시 패턴의 계약 업그레이드는 단순히 프록시 계약이 새로운 논리 계약을 가리키도록 변경하는 것으로 이루어집니다(프록시 계약에 저장된 논리 계약의 주소를 수정). 대부분의 Rollup 프로젝트는 이러한 방식으로 계약을 업그레이드하고 있으며, 간단하고 효과적입니다.

출처: wtf academy

쉽게 생각할 수 있는 것은 Rollup 계약의 업그레이드는 사실상 큰 위험입니다: 만약 업그레이드된 계약에 악의적인 코드가 포함되어 있다면, 예를 들어 Rollup 자체의 브리지 계약의 출금 조건을 수정하거나 Verifier 계약의 유효성 증명 정확성 판단 조건을 변경하면, 정렬기가 자산을 훔칠 수 있습니다(원리는 앞서 설명했습니다).

하지만 문제는 Rollup 계약의 업그레이드를 허용하지 않을 수는 없다는 것입니다. 그 이유는 앞서 설명한 바와 같이 명확합니다. 균형을 고려할 때, 대부분의 Rollup은 DAO 거버넌스, 안전 위원회 또는 다중 서명 권한을 통해 인위적인 방식으로 Rollup 계약의 업그레이드를 결정합니다. 그 외에도 시간 잠금(Timelock)을 통해 계약 업그레이드에 지연 창을 설정합니다.

출처: L2 BEAT 연구 보고서

대부분의 DAO 제안은 자동화된 실행 프로세스를 가지고 있기 때문에(체인 상 계약을 통해 구현됨), 계약을 업그레이드하려면 먼저 충분한 투표를 확보한 후, 시간 잠금(Timelock)에서 규정한 지연(보통 며칠이 걸림)을 거쳐야 업그레이드 계약 작업이 실행됩니다. 누군가 악의적인 계약 업그레이드를 시도하려면 거버넌스 공격을 통해 DAO 거버넌스를 통과해야 합니다(예: Tornado Cash에서 발생한 거버넌스 공격). 하지만 이렇게 하려면 비용이 많이 들며, 충분한 토큰을 확보해야 하므로 정상적인 경우에는 성공하지 못합니다. 설사 거버넌스 공격이 성공하더라도, 시간 잠금의 제한으로 인해 사용자는 L2에서 자산을 철회할 충분한 시간이 있으며, Rollup 공식도 긴급 조치를 취할 충분한 시간이 있습니다.

시간 잠금은 일정 기간의 지연 후 특정 작업을 수행할 수 있도록 허용합니다.

시간 잠금은 악의적인 계약 업그레이드를 해결하는 마법 같은 방법처럼 보입니다. 하지만 문제는 "Rollup 공식이 취할 수 있는 긴급 조치"가 사실상 DAO 거버넌스와 시간 잠금을 우회하여 즉시 Rollup 계약을 업그레이드하는 것이라는 점입니다. 현재 주류 Rollup이 수십억 달러에 달하는 사용자 자산을 관리하고 있다는 점을 고려할 때, 다중 서명과 안전 위원회에 의해 승인된 "계약 즉시 업그레이드"는 궁극적인 비상 조치이지만, 모든 사용자에게는 다마클레스의 검이기도 합니다.

분명히 이것은 신뢰 최대화 문제입니다: Rollup 공식이 당신의 자산을 훔칠 생각이 없다는 것을 신뢰해야 합니다. 신뢰할 수 없는 관점에서 고려할 경우(닉사보의 관점), 모든 다중 서명 및 안전 위원회가 통제하는 Rollup은 안전하지 않습니다. 아발란치 창립자 에민 건 시레르와 솔라나 창립자 아나톨리, 유명 비평가 저스틴 본스는 이러한 문제를 강조한 바 있습니다.

어떤 Rollup이 다중 서명/위원회에 의해 조작되는가?

유명 L2 연구 기관 L2 BEAT가 발표한 보고서 "Upgradeability of Ethereum L2s"와 L2BEAT 데이터 시각화 웹사이트에 따르면, Arbitrum, Optimism, Loopring(루프링), ZKSync Lite, ZkSync Era, Starknet, Polygon ZKEVM 등 주요 Rollup은 다중 서명 또는 위원회 승인으로 업그레이드 가능한 계약이 존재하며, 시간 잠금 제한을 우회할 수 있습니다.

dYdX는 DAO 거버넌스를 우회하여 계약을 업그레이드할 수 있는 EOA 주소가 있지만, 시간 잠금의 제한을 받습니다(최소 2일의 지연). Immutable X는 14일의 계약 업그레이드 지연이 있으므로, L2BEAT의 말에 따르면 dYdX와 Immutable X는 다른 주요 Rollup보다 더 신뢰할 수 있습니다.

출처: L2 BEAT 연구 보고서

그렇다면 다중 서명과 안전 위원회가 초래하는 신뢰 위험을 어떻게 줄일 수 있을까요? 답은 사실 Multichain 사건과 유사합니다: 반여마 문제로 귀결됩니다. 반드시 보장해야 할 것은 다중 서명/위원회가 여러 다른, 높은 이해관계가 겹치지 않는, 공모 위험이 낮은 실체에 의해 통제되어야 한다는 것입니다. 현재로서는 DAO의 분산 거버넌스 성숙도를 높이고, 명망 있고 신뢰할 수 있는 인물이나 기관을 초대하여 다중 서명/위원회에 참여시키는 것 외에는 별다른 방법이 없어 보입니다. 이러한 상황은 현실 세계의 민주 정치에서도 흔히 볼 수 있습니다.

물론, 시간 잠금을 통해 다중 서명/위원회가 관리하는 계약의 업그레이드 행동을 제한할 수도 있지만, 이는 여러 요소를 고려해야 하며, 다중 서명/위원회의 존재 목적이 긴급 상황을 신속하게 처리하기 위한 것이기 때문입니다. 동시에 Rollup 프로젝트 측이 신뢰 문제에 대해 확고한 결단이 없다면 이 문제는 해결될 수 없습니다.

따라서, 비록 다양한 Rollup 프로젝트가 정교한 메커니즘 설계를 통해 대부분의 경우 사용자 자산의 안전을 보장할 수 있지만, 다중 서명과 위원회가 존재하기 때문에 Rollup에서 블랙스완 사건이 발생할 확률은 0이 아닙니다. 다중 서명과 위원회 구성원이 공모할 확률이 만분의 일에 불과하더라도, L2가 관리하는 자산 가치(가정: 100억 달러)를 고려할 때, L2 사용자 자산의 일일 위험은 여전히 100만 달러에 달합니다. Multichain 사건을 떠올리면 정말로 소름이 끼칩니다.

그래서 개인적으로는, 폴리냐가 이전에 말한 것처럼 이더리움 생태계 내의 대부분 자금은 여전히 L1에서 유통되고 잠금되는 경향이 있으며, L2는 Rollup 생태계가 장기적으로 이더리움 생태계 내의 대부분 가치를 포착할 수 없을 것이라고 생각합니다. 대규모 투자자와 고래에게 이더리움 메인넷은 분명히 L2보다 더 적합하고 신뢰할 수 있는 자금 출처입니다. 따라서 많은 사람들이 이전에 고려했던 "L2의 부상이 L1의 침체를 초래할 것인가"라는 질문에 대한 답은 이미 나와 있습니다.

동야 케이구가 그의 저서에서 말했듯이, 인간의 마음은 수학 공식을 이해하는 것보다 훨씬 더 어렵고, 복잡하며, 변화하기도 어렵습니다. 많은 일들은 단순한 기술적 수단으로 해결할 수 없으며, "인간성"과 관련된 요소가 포함될 때는 항상 세상에서 가장 통제할 수 없고 예측하기 어려우며, 가장 진지하게 다루어야 할 문제입니다. 이 점을 잊지 말고 칸트의 묘비에 새겨진 고전적인 문구를 기억합시다:

"두 가지 사물이 항상 내 마음을 감싸고 있으며, 그들에 대한 나의 생각이 깊어질수록, 마음속에서 불러일으키는 경이로움과 경외감은 날로 깊어져 간다: 그것은 바로 내면의 도덕 법칙과 머리 위의 찬란한 별들이다."

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
banner
체인캐처 혁신가들과 함께하는 Web3 세상 구축