롤업 탈중앙화: 아즈텍의 탈중앙화 시퀀서 솔루션 분석
저자: 0xhhh, EthStorage
편집: Faust, 《극객web3》
롤업이 주류가 된 이후로, 시퀀서의 탈중앙화는 이더리움/Celestia 커뮤니티의 관심사였으며, Layer2 개발 작업에서 극복하기 어려운 큰 산이었습니다. 이에 대해 다양한 롤업 솔루션들이 노드의 탈중앙화에 대한 구상을 제시하며 이 주제에 대한 무한한 상상 공간을 제공했습니다.
본 문서의 저자는 유명한 ZK롤업 프로젝트인 Aztec를 예로 들어, 최근 Aztec Labs에서 제안한 B52와 Fernet이라는 두 가지 제안을 출발점으로 삼아 독자들에게 ZKR이 어떻게 시퀀서 노드의 탈중앙화를 실현하는지를 분석합니다.
제안 B52: Permissionless 시퀀서 솔루션
제안 B52는 다음과 같은 목표를 달성할 계획입니다(이상적인 경우):
- L2 노드가 매 라운드의 제안자를 직접 선출하는 탈중앙화된 시퀀서 네트워크
- 하드웨어 요구 사항이 낮은 탈중앙화된 프로버 네트워크
- 롤업 전체가 우수한 검열 저항성을 갖춤
- L2에서 발생하는 MEV 가치는 L2 노드가 획득
- L2 블록이 DA 레이어에 제출될 때 비교적 효율적인 최종성(Finality)을 얻을 수 있으며, 불가역적인 최종성은 유효성 증명(Validity Proof)이 제출된 후에야 가능
- L2 토큰은 괜찮은 경제 모델을 가질 수 있음
- L2 블록과 거래 데이터는 L2의 P2P 네트워크에서 전파됨
- L2는 L1의 보안성을 상속함 (B52 제안은 롤업 구조에 대한 가정으로, 제안자는 본질적으로 시퀀서임) 이 솔루션은 전체 L2 블록 생성 프로세스를 세 가지 시간 단계로 나눕니다:
블록 제안 창(Block Proposal Window, BPW)
블록 수용 창(Block Acceptance Window, BAW)
상태 진행(State advances)
그중, BPW(블록 제안) 단계는 여러 시퀀서가 서로 다른 블록을 제안하고 경쟁하며, 프로버가 특정 대체 블록에 대해 투표하는 과정입니다.
BAW(블록 수용)는 프로버가 블록의 유효성 증명(Validity Proof)을 구성하고 이를 제출하는 과정입니다.
블록 제안 창(블록 제안 단계):
BPW는 블록 제안, 블록 투표, 집계의 세 단계로 세분화될 수 있습니다.
(블록 제안 창 프로세스 개요도)
블록 제안(BP) 단계에서는 누구나 거래를 수집하고 자신의 BP 내용을 방송할 수 있습니다. BP 내용은 세 부분으로 구성됩니다: txs order hash, prover reward percentage, burn token amount txs order hash: 제안자는 L2의 거래 풀(mempool)에서 가장 가치 있는 거래를 선택하고 정렬한 후, 이 거래들의 해시 값을 자신이 구성한 블록에 포함시킵니다.
prover reward percentage: 시퀀서가 프로버에게 공유하는 블록 보상 비율
burn token amount: 제안자가 제안한 L2 네이티브 토큰의 소각 수량, 이후 이를 L2 P2P 네트워크에 전송합니다.
블록 투표 단계:
프로버는 P2P 네트워크에서 서로 다른 프로포저가 제안한 BP를 수신한 후, 자신이 가장 많은 보상을 받을 수 있는 BP에 투표합니다. 그러나 투표 구성은 매우 특별합니다:
Vote = { BlockHash, Index of Pro of Tree }
BlockHash는 프로버가 투표할 제안의 해시이며, Index of Pro of Tree는 프로버가 구성할 Pro of Tree의 리프 인덱스 값입니다(후에 설명됩니다).
집계: 제안자는 L2 P2P 네트워크에서 프로버들이 BP에 대한 투표를 수집하고 이를 집계하여 BP에 포함시켜 L1에 제출합니다(각 BP는 일반적으로 자신과 관련된 투표 기록만 포함합니다).
여기서 강조해야 할 점은 BP가 선택되어 롤업 원장에 포함되기 위한 전제 조건입니다:
가장 높은 점수를 가져야 합니다:
SCORE (y) = NUMPROVERS (x)^3 * BURNBID (z)^2
NUMPROVERS (x)는 해당 BP가 획득한 프로버 투표 수이며, BURNBID는 해당 BP가 제안한 L2 토큰의 소각 수량입니다. BURN_BID가 높을수록 BP 제안자가 최종적으로 받는 보상이 줄어들기 때문에 이 값은 적절히 설정되어야 합니다.
또한, 해당 BP는 블록 제안 창이 끝나기 전에 L1에 제출되어야 하며, 해당 유효성 증명은 블록 수용 창이 끝나기 전에 L1에 업로드되어야 합니다.
주의할 점: BP의 점수 계산에서, 투표 수의 비중이 가장 크며, 그 다음이 소각 토큰의 수량입니다. 또한, B52 솔루션은 여러 제안자(사실상 시퀀서)가 하나의 유효한 BP에 대해 경쟁할 수 있도록 허용합니다.
B52 솔루션은 제안자(시퀀서)가 자신의 BP에서 소각할 토큰의 수량을 지정하기만 하면 되며(이것은 EIP1559 방식과 유사함), 사전 스테이크 토큰이 필요하지 않습니다. 이는 네트워크를 더욱 permissionless(무허가)하게 만들고, L2의 네이티브 토큰이 디플레이션을 생성하는 데 유리합니다.
또한, BP에는 전체 거래 데이터가 포함되지 않고 거래 순서의 해시만 포함됩니다. 이는 이더리움 PBS 솔루션과 유사한 원리로, MEV가 다른 제안자에게 탐지되고 선점되는 것을 방지하기 위한 것입니다.
블록 수용 창(블록 수용 단계) 상세 설명:
(블록 수용 창 개요도, 그림에는 Proof Acceptance로 작성됨) 블록 제안 창이 끝난 후, 프로버는 자신의 BP에 해당하는 전체 거래 데이터를 공개해야 합니다. 프로버가 투표한 BP가 선택되면(가장 높은 점수, L1 계약을 통해 확인 가능), 그들은 투표 시 제공한 Index of Pro of Tree에 해당하는 Sub Proof Tree를 구성해야 합니다.
Aztec의 블록에 2^13=16384개의 거래가 포함되어 있고, 2048개의 프로버가 있다면, 각 프로버는 2^3=8개의 거래로 구성된 서브 증명 트리를 구성합니다. 그런 다음 프로버는 자신이 구성한 서브 증명 트리를 L2 P2P 네트워크에 방송합니다. 제안자는 이를 수신한 후, 모든 서브 증명 트리를 집계하여 하나의 블록 증명으로 만듭니다.
이후 제안자는 집계된 증명을 L1의 롤업 계약에 제출하며, 계약은 이 증명과 해당 상태 전환 결과의 정확성을 검증합니다. 여기서 주의할 점은, 프로버가 의도적으로 증명을 제출하지 않으면, 제안자가 약속한 블록 보상 분배를 받을 수 없을 뿐만 아니라 슬래시 당할 수 있습니다. 프로버가 되기 위해서는 미리 토큰을 스테이크해야 하기 때문입니다. 따라서, 제안자(시퀀서)와는 달리, 프로버는 Permissionless가 아닙니다.
상태 진행 단계 상세 설명:
블록 수용 창이 끝난 후, 롤업 계약은 가장 높은 점수를 가진 블록을 롤업 원장에 포함시키고, 블록 보상(Reward)을 제안자(시퀀서)가 사전에 선언한 비율에 따라 제안자와 프로버에게 각각 전송합니다.
이상으로 Aztec의 B52 솔루션을 설명했습니다. 그러나 본 문서의 저자는 B52 제안에 몇 가지 잠재적인 문제가 있다고 생각합니다:
문제 1: 가장 높은 점수를 가진 블록의 유효성 증명이 불완전한 경우. 제안에서 제시된 해결 방법은, 만약 제안자가 50%의 증명만 제공했다면, 그는 블록 보상의 50%만 받을 수 있도록 하여 제안자가 의도적으로 완전한 증명을 제출하지 않을 동기가 없도록 하는 것입니다. 동시에 프로버는 직접 계약에 증명을 제출할 수 있습니다.
제안의 설명에 따르면, 거래가 없는 블록의 유효성 증명을 수용할 수 있습니다. 이는 사실 불합리합니다: zk롤업은 유효성 증명을 제공할 때만 해당 블록의 새로운 상태가 유효하다고 선언합니다.
만약 제안자가 L1에 제출한 집계 증명에서 특정 거래의 증명이 누락되었다면, 그 거래 이후 발생하는 모든 거래의 상태 전환 증명은 성립되지 않습니다(거래는 순차적으로 실행되며 상태 의존성이 있기 때문입니다). 우리는 이 블록의 새로운 상태가 유효한지 확인할 수 없습니다.
따라서 이 경우 합리적인 방법은 모든 거래의 증명이 제출될 때까지 무한 대기 상태의 블록 수용 창에 들어가는 것입니다.
문제 2: 가장 높은 점수를 가진 블록이 불법 블록인 경우(B52 솔루션에서도 이 점을 설명하지 않았습니다). BP는 단지 거래 순서의 해시만 포함하므로, 악의적인 제안자는 실제로 문제 있는 거래를 의도적으로 구성할 수 있습니다. 예를 들어, 이중 지불 거래와 같은 경우입니다. 이 경우, L1 계약에 누구나 불법 증명을 제출할 수 있는 함수를 추가해야 하며, 이 불법 증명은 가장 높은 점수를 가진 BP가 불법 블록임을 증명하는 데 사용됩니다.
그리고 이러한 신고는 보상이 있어야 하며, 제안자가 계약에 전송한 소각 토큰을 불법 증명을 제출한 신고자 노드에게 보상할 수 있습니다.
흥미로운 생각: 고아 블록과 여분의 프로버 작업에 대해: B52 솔루션은 실제로 매 라운드에서 가장 높은 점수의 유효한 BP가 나타난 후, 이 라운드에 나타난 다른 BP(이미 완전한 증명을 제출한)를 고아 블록으로 간주하여 일정한 고아 블록 보상을 분배합니다.
이는 실제로 ETH POW 합의 메커니즘의 방식을 따릅니다. 과도한 해시 파워 집중을 피하기 위해, 채굴자(소규모 채굴 풀/개별 채굴자)의 이익을 보장하고 대형 채굴 풀이 해시 파워를 독점하는 것을 방지하기 위해, 채택되지 않은 블록 제안자에게 일부 블록 보상을 분배해야 합니다. 따라서 이더리움에서 좋은 성과를 보인 고아 블록 메커니즘을 채택하는 것도 매우 현명한 선택입니다.
B52 제안이 롤업 탈중앙화에 미치는 의미: 제안자는 탈중앙화되어 있으며 스테이크가 필요 없고, 진입 장벽이 낮습니다; 그러나 가장 가치 있는 블록을 스스로 구축해야 하며, 다른 프로버의 투표를 수집하고 모든 증명을 집계해야 하므로, 실제로 제안자의 하드웨어 장벽은 제안에서 설명한 것만큼 낮지 않습니다(예를 들어, 대역폭은 그렇게 낮지 않을 수 있습니다).
따라서 결국에는 MEV를 포착하는 데 가장 능숙한 블록 빌더가 블록을 생성할 수 있는 제안자가 되는 비교적 중앙집중화된 네트워크가 될 것입니다.
동시에, B52 솔루션의 프로버는 자산을 스테이크해야 하지만, 단지 서브 트리 증명만 생성하면 되므로, 전체 블록 증명을 완전히 생성해야 하는 솔루션에 비해 프로버의 탈중앙화 정도는 더 좋습니다(하드웨어 요구 사항을 낮출 수 있습니다).
활성 Liveness: 전체 네트워크의 Liveness는 양호합니다. L2는 거래와 투표/BP를 방송하기 위한 자체 P2P 네트워크를 가지고 있으며, 시퀀서와 프로버 모두 비교적 탈중앙화되어 있습니다. 그러나 우리가 위에서 언급한 두 가지 문제를 해결해야 합니다. 하나는 가장 높은 점수를 가진 블록이 반드시 합법적인 블록이어야 하며, 두 번째는 전체 블록 증명이 L1에 제출될 때까지 기다려야 새로운 상태로 들어갈 수 있다는 것입니다. 따라서 전체 롤업 네트워크가 특정 거래 증명이 누락되어 정상적으로 작동하지 않도록(정지) 하기 위해 더 효율적인 인센티브 메커니즘이 필요합니다.
검열 저항성 Censorship Resistance: 만약 우리가 누구나 블록 제안 BP를 발표할 수 있도록 보장하고, 제안자만 블록 증명을 제출할 수 없도록 보장한다면, 네트워크는 매우 좋은 검열 저항성을 가질 것입니다.
최종성 Finality: L2의 최종성은 네트워크의 Liveness와 밀접한 관련이 있습니다. 최종적으로 검증된 최종성은 블록 증명의 제출을 기다려야 하지만, 실제로는 가장 높은 점수를 가진 BP에 해당하는 블록 내용을 신뢰할 수 있습니다(그 안에 악의적인 거래가 포함되지 않는 한).
이 블록은 블록 수용 창이 시작될 때 공개되며, 이는 사용자로서 단지 블록 제안 창의 시간을 기다리면, 제출한 거래가 포함된 블록이 채택될 수 있음을 의미합니다.
L1 보안성 상속: 유효성 증명을 제출하여 상태를 업데이트하는 L2는 L1의 보안성을 상속할 수 있습니다.
제안 Fernet: VDF를 통한 합법적인 제안자 선발
Fernet 솔루션 개요: VDF를 통해 매 라운드 블록 생성 주기 내에서 위원회(즉, 시퀀서 노드 집합) 내의 서로 다른 노드에 예상 점수를 설정하고, 최종 점수가 가장 높은 시퀀서가 제안한 블록이 유효 블록이 됩니다.
우선, 위원회에 어떻게 가입하나요? 실제로 L1에 16개의 ETH를 스테이크해야 하며, 스테이크 작업이 완료된 후 4개의 L1 블록을 기다려야 시퀀서 위원회에 가입할 수 있습니다. 시퀀서 위원회에서 탈퇴하려면 L1 계약의 Unstake 함수를 호출해야 하며, 이후 3일이 지나야 스테이크한 잔액을 회수할 수 있습니다.
그런데 VDF란 무엇인가요? Verifiable Delay Function은 검증 가능한 지연 함수로, 이 수학 함수는 엄격한 순차 실행 특성을 만족하며, 몇 가지 계산 단계를 수행하고 최소한 예측 가능한 시간을 소모합니다. 우리는 VDF로 계산된 값을 Score로 기록하며, 이는 균일한 정규 분포를 만족합니다. 따라서 시퀀서가 VDF 점수를 계산한 후, 자신이 합법적인 제안자로 선택될 확률이 얼마나 되는지를 판단할 수 있습니다.
시퀀서의 VDF 계산은 다음과 같습니다:
Score = VDF(privatekey, public inputs)
public inputs = {현재 블록 번호, randao}
randao는 시퀀서가 미래의 모든 블록 높이에 대한 자신의 VDF 점수를 미리 계산하지 못하도록 방지하는 랜덤 수입니다.
Fernet의 전체 프로세스는 주로 3단계로 나뉩니다:
- 제안 단계
- 증명 단계
- 최종화
제안 단계: PROPOSALPHASEL1_BLOCKS = 2 이더리움 블록 (이 단계는 2개의 L1 블록의 시간을 유지합니다)
이 단계가 시작되면, 각 시퀀서는 VDF를 사용하여 현재 블록 높이에 해당하는 VDF 점수를 계산합니다. 시퀀서가 자신의 VDF 점수가 이번 블록 생성 권한을 얻을 가능성이 높다고 판단하면(점수가 정규 분포를 만족한다고 가정), 그는 L1의 롤업 계약에 제안을 제출합니다. 제안은 거래 순서의 해시, 이전 L2 블록을 가리킵니다.
unproven block: 롤업 계약에 제안만 제출한 블록의 블록 내용입니다. 이후, 시퀀서는 unproven block에 해당하는 블록 내용과 VDF의 증명 을 함께 L2의 P2P 네트워크에 전송해야 합니다.
증명 단계: PROVINGPHASEL1_BLOCKS = 50 L1 블록(이 단계는 50개의 L1 블록을 유지하며, 약 10분 소요)
프로버는 L2의 P2P 네트워크에서 모든 블록 내용에 해당하는 거래를 수신하고, VDF 점수가 더 높은 블록에 대한 증명을 구성합니다. 증명 구성은 여러 프로버가 병렬로 협력하는 방식으로 진행됩니다( B52 솔루션과 유사).
따라서 시퀀서는 마지막에 여러 다른 거래에 대한 증명을 집계하여 하나의 블록 증명( VDF 증명 포함)으로 만들어 L1의 롤업 계약에 제출해야 합니다. 누구나 이미 제출된 블록 증명의 블록 내용을 롤업 계약에 제출할 수 있습니다.
최종화: 블록을 최종화하기 위해 L1 거래를 제출해야 하며, 최종화할 수 있는 블록은 다음을 만족해야 합니다: 블록 내용과 블록 증명을 제출하고, 가리키는 이전 블록은 최종화되어야 합니다. 위의 조건을 만족하는 것 외에도, 가장 높은 점수를 가져야 합니다.
(파이프라인 방식의 블록 생성 프로세스, 이전 블록의 제안 단계가 끝나자마자 다음 블록의 제안 단계가 시작되며, 이전 블록의 증명 단계가 끝날 때까지 기다릴 필요가 없습니다)
파이프라인 블록 생성 메커니즘: 주의할 점은, Fernet는 파이프라인 블록 생성 메커니즘을 채택하고 있습니다. N번째 블록의 제안 단계가 끝나면 N+1번째 블록의 제안이 시작됩니다(Aptos 등 공공 블록체인도 유사한 방식을 사용합니다). 그러나 N+1번째 블록은 N번째 블록이 최종화된 후에야 L1의 최종 블록 거래를 제출할 수 있으며, 검증을 통과해야 최종 블록이 됩니다.
잠재적인 공격 차원: 만약 VDF 점수가 가장 높은 시퀀서가 의도적으로 L2 P2P에서 블록 내용을 방송하지 않으면, 블록 재조합(reorg)이 발생할 수 있습니다.
재조합의 L2 블록 수 계산: 1 + PROVINGPHASEL1BLOCKS / PROPOSALPHASEL1BLOCKS = 1 + 50 / 2 = 26 블록
해결 방법: 고아 블록 메커니즘을 추가하여 각 L2 슬롯(블록 생성 시점)에 단 하나의 완전한 후보 블록만 존재하지 않도록 합니다.
Fernet의 탈중앙화에 대한 의미는 시퀀서가 16개의 ETH를 스테이크하여 시퀀서 위원회에 가입하며, 진입 장벽이 높지 않습니다(하지만 낮지도 않습니다). 프로버는 어떤 스테이크도 필요하지 않지만, 프로버가 증명을 생성하지 않으면 처벌이 없습니다. 이는 B52 솔루션과 기본적으로 반대입니다.
활성 Liveness: 전체 네트워크의 Liveness는 보장될 수 있습니다. VDF + 고아 블록 메커니즘은 매 라운드에 단 하나의 블록 생성자가 존재하지 않도록 보장합니다.
MEV: MEV의 고려는 가장 특별하며, 이 솔루션은 PBS를 도입할 계획입니다. 따라서 시퀀서가 높은 점수의 VDF 점수를 계산한 후, 블록 빌더에게 더 가치 있는 블록을 구성하도록 직접 요청할 수 있습니다.
검열 저항성 Censorship Resistance: Fernet는 이더리움과 동일한 PBS 메커니즘을 채택할 것이므로, 본질적으로 Fernet의 검열 문제는 이더리움 PBS의 검열 문제와 동등합니다.