
솔라나 공동창립자의 신규 기사: 솔라나의 동시성 리더십 메커니즘, MEV 해결 및 글로벌 가격 발견 엔진 구축
번역: TechFlow

개요
MEV은 퍼미션리스 블록체인에서 근본적인 문제다. 대부분의 퍼미션리스 블록체인과 마찬가지로 솔라나(Solana)는 체인 운영자가 사용자로부터 추출하는 MEV를 최소화하는 것을 목표로 한다.
솔라나의 접근 방식은 리더들(즉, 블록 생성자) 간의 경쟁을 극대화함으로써 MEV를 줄이는 것이다. 이를 위해 슬롯 시간을 단축하고, 개별 리더에게 연속적으로 배정되는 슬롯 수를 줄이며, 각 슬롯에 할당된 동시 리더 수를 늘린다.
일반적으로 초당 더 많은 리더가 존재할수록, 사용자는 T초 동안 대기한 후 임박한 리더들 중 가장 유리한 조건을 제시하는 리더를 선택할 수 있는 기회가 많아진다. 더 많은 리더들은 우수한 리더들이 블록 공간을 낮은 비용으로 제공할 가능성을 높이고, 사용자가 우수한 리더와만 거래하며 부실한 리더의 거래를 배제하기 쉽게 만든다. 시장이 무엇이 좋은지 나쁜지를 결정해야 한다.
솔라나의 장기적 비전은 어떤 중심화 거래소(CEX)의 최고 성능과도 경쟁할 수 있는 글로벌 퍼미션리스 가격 발견 엔진을 구축하는 것이다.
싱가포르에서 시장에 영향을 주는 사건이 발생하면, 그 정보는 여전히 광섬유를 통해 빛의 속도로 뉴욕의 CEX까지 전달되어야 한다. 이 메시지가 뉴욕에 도달하기 전에, 솔라나 네트워크 내 리더들은 이미 해당 메시지를 블록에 포함해 방송했어야 한다. 동시에 물리적인 인터넷 분할이 발생하지 않는 한, 메시지가 뉴욕에 도착할 때쯤에는 솔라나의 상태는 이미 그 내용을 반영하고 있어야 한다. 따라서 뉴욕의 CEX와 솔라나 사이에 Arbitrage 기회가 존재해서는 안 된다.
이 목표를 완전히 달성하기 위해 솔라나는 다수의 동시 리더와 매우 낙관적인 확정성 보장을 필요로 한다.
다중 리더 구성
현재의 리더 스케줄과 마찬가지로, 시스템은 각 슬롯을 1명의 리더가 아닌 2명의 리더로 구성한다. 두 리더를 구분하기 위해 하나의 채널은 A로, 다른 하나는 B로 표시한다. A와 B는 독립적으로 회전할 수 있다. 이 계획을 실현하려면 다음 질문에 답해야 한다.
-
블록 A와 B가 서로 다른 시간에 도착하거나 실패하면 어떻게 되는가?
-
블록 A와 B에 포함된 트랜잭션 순서를 어떻게 병합하는가?
-
A와 B 사이에 블록 용량을 어떻게 분배하는가?
동시 블록 전송
구체적인 과정을 이해하기 위해 Turbine에 대해 간단히 살펴볼 필요가 있다.
리더는 블록을 구성할 때 이를 조각(fragments)으로 나눈다. 32개의 조각 묶음은 32개의 코드 조각(code fragments)으로 구성된 소거코드(erasure code)이다. 64개의 조각 묶음은 머클화되고 루트에 서명되며, 이는 이전 묶음과 연결된다.
각 조각은 독립적인 결정론적 무작위 경로를 통해 전송된다. 마지막 묶음의 각 재전송자(retransmitter)는 루트에 서명한다.
수신자의 관점에서 보면, 각 수신자는 검증된 재전송자로부터 32개의 조각을 수신해야 한다. 누락된 조각은 무작위로 복구된다.
이 숫자는 증가 또는 감소될 수 있으며, 지연에 미치는 영향은 거의 없다.
재전송자의 조각 경로 샘플링이 충분히 무작위적이며 지분(stake)에 따라 가중된다면, 협력하여 네트워크를 분할하기 위해 필요한 지분은 ε 지분보다 훨씬 커야 하며, 도착 시간이나 데이터 양 모두에서 그러하다. 수신자가 T시간 내에 각 묶음의 32/64(설정 가능) 조각이 도착했다고 판단하면, 다른 모든 노드에서도 마찬가지일 가능성이 높다. 왜냐하면 32개의 무작위 노드는 너무 많아서 우연히 모두 같은 분할에 속할 가능성은 낮기 때문이다.
분할이 발생하면, 합의는 이를 해결해야 한다. 이는 보안에는 영향을 주지 않지만 상대적으로 느리다.
다중 블록 생성
단일 블록을 전송하는 경우, 각 수신자(다음 리더 포함)는 각 블록의 조각 묶음이 도착하는 것을 관찰하게 된다. 만약 블록이 T밀리초 내에 완전하지 않다면, 현재 리더는 해당 블록을 건너뛰고 그것을 포함하지 않은 포크를 구성한다. 리더가 잘못된 경우, 모든 다른 노드가 블록에 투표하며, 리더의 블록은 건너뛴다. 정상적인 리더는 투표로 지시된 가장 무거운 포크로 즉시 전환한다.
다중 블록 전송의 경우, 각 노드는 최대 T밀리초 동안 기다린 후 관찰된 블록 파티셔닝에 대해 투표해야 한다. 두 개의 동시 리더가 있을 경우 가능한 결과는 A, B, 또는 A와 B 모두이다. 블록 지연이 있을 경우에만 추가 지연이 발생한다. 정상 작동에서는 모든 블록이 동시에 도착해야 하며, 각 검증자는 두 블록이 모두 도착하자마자 즉시 투표할 수 있다. 따라서 실제로 T는 거의 0에 가깝게 될 수 있다.
이 공격을 특히 방어해야 하는 부분은, 아주 적은 지분만 보유한 리더가 슬롯 경계에서 약간 늦게 블록을 전송하여 신뢰성 있게 네트워크를 분할시키고, 네트워크가 합의 메커니즘을 통해 문제를 해결하는 데 많은 시간을 소비하도록 강요할 수 있는가 하는 점이다. 네트워크 일부는 A에 투표하고, 일부는 B에 투표하며, 또 일부는 A와 B 모두에 투표한다. 이 세 가지 분할 상황은 모두 합의 메커니즘을 통해 해결되어야 한다.
구체적으로, 제로 이웃(zero neighborhood)의 목표는 모든 노드가 블록을 동시에 복구하도록 보장하는 것이다. 공격자가 제로 이웃에 협력 노드를 가지고 있다면, 정상적으로 31/64 조각을 전송하고, 공격자가 마지막 조각을 선택적으로 전송하여 분할을 유도하려 할 수 있다. 정직한 노드는 어떤 재전송자가 지연되는지 감지할 수 있으며, 단일 정직한 노드가 블록을 복구하자마자 누락된 조각을 즉시 해당 재전송자에게 푸시할 수 있다. 재전송자는 어디선가 조각을 수신하거나 복구하면 계속 진행할 수 있다. 따라서 한 정직한 노드가 블록을 복구한 직후 모든 노드가 곧바로 블록을 복구해야 한다. 테스트를 통해 기다려야 하는 시간을 결정해야 하며, 이 시간은 절대적인 값인지, 각 조각 도착 시간에 따라 가중된 값인지, 그리고 지분 노드 평판을 사용해야 하는지 여부도 판단해야 한다.
각 블록 내에서 협력 리더 및 재전송자의 확률은 약 P_리더지분 × (64P_재전송자지분) 정도다. 1%의 지분은 공격자가 리더로 배정된 ½ 조각 묶음에서 공격을 시도할 수 있다. 따라서 탐지 및 완화 기능이 충분히 강력해야 한다.
이러한 공격은 다음 리더에게 미치는 영향이 적은데, 비동기 실행(async execution)이 미사용 용량의 이월을 허용하기 때문이다. 따라서 현재 리더가 다음 리더가 슬롯을 건너뛰도록 강요하더라도, 다음 리더가 4개의 연속 슬롯을 갖고 있다면, 건너뛴 슬롯의 미사용 용량을 이월할 수 있어 리더가 건너뛴 슬롯의 트랜잭션을 다시 포함시킬 수 있다.
동시 블록 병합
사용자가 포함 확률을 높이거나 블록 내에서 앞순위를 차지하기 위해 동일한 트랜잭션을 리더 A와 B 모두에게 동시에 보내는 경우, 자원 낭비가 발생한다. 이런 일이 벌어지면 동시 리더 수를 늘리는 것은 성능 향상 효과가 거의 없으며, 단지 똑같은 쓰레기 트랜잭션을 두 배로 처리하는 것에 불과하다.
중복 트랜잭션을 방지하기 위해, 수수료 지불자의 상위 N비트는 해당 트랜잭션이 어느 리더 채널에서 유효한지를 결정한다. 예를 들어, 최상위 비트가 A 또는 B를 선택한다. 수수료 지불자는 독점 채널에 할당되어야 하며, 이를 통해 리더는 수수료 지불자가 유효하고 다른 리더에서 lamports(솔라나 블록체인의 최소 통화 단위)를 모두 소모하지 않았음을 확인할 수 있다.
이 방법은 스팸 발송자가 논리적으로 동일한 트랜잭션에 대해 최소한 두 번의 수수료를 지불하도록 강제하지만, 첫 번째 트랜잭션 확률을 높이기 위해 스팸 발송자는 여전히 논리적으로 동일한 트랜잭션을 보낼 수 있다.
이러한 행동을 막기 위해, 사용자는 리더에게 지불하는 우선순위 수수료 외에도 100% 소각되는 오더 수수료(order fee)를 추가로 포함할 수 있다. 가장 높은 오더 수수료를 지불한 트랜잭션이 먼저 실행된다. 그렇지 않으면 선입선출(FIFO) 정렬을 사용한다. 동률이 발생하면 결정론적 무작위 순열로 순서를 결정한다. 따라서 스팸 발송자에게는 두 번의 포함 수수료를 지불하는 것보다 오더 수수료를 높여 먼저 실행되는 것이 더 비용 효율적이다.
묶음(bundling) 및 재정렬된 트랜잭션 시퀀스를 처리하기 위해, 시스템은 전체 트랜잭션 시퀀스의 정렬 비용을 커버하는 오더 수수료를 추가할 수 있는 트랜잭션 번들을 지원해야 한다. 수수료 지불자는 예약된 채널 내에서만 유효하므로, 번들은 자신의 채널 내에서만 시퀀스를 조작할 수 있다.
또는 오더 수수료가 반드시 필요하지 않을 수도 있다. FIFO 정렬을 사용하고 스팸 발송자가 모든 채널에서 항상 우선순위 수수료를 지불한다면, 단순히 시장이 N명의 리더에게 포함 기회를 높이기 위한 비용과 가장 가능성이 높은 최근 리더에게 트랜잭션을 포함시키기 위한 비용을 결정하도록 허용하는 것으로 충분할 수 있다.
블록 자원 관리
블록체인 네트워크에서 두 명의 동시 리더가 있을 때, 각 시스템 전체 블록 용량 제한은 평균적으로 분배되어야 한다. 구체적으로, 총 용량뿐만 아니라 각각의 구체적인 제한 사항, 예를 들어 쓰기 잠금 제한—어떤 계정도 600만 컴퓨팅 유닛(CUs) 이상을 작성할 수 없으며, 각 리더는 최대 2400만 CUs의 트랜잭션만 예약할 수 있음—도 분배되어야 한다. 이렇게 함으로써 최악의 경우에도 병합된 블록이 시스템의 총 용량 제한을 초과하지 않는다.
이 메커니즘은 일정한 리더의 용량에 따라 예약 우선순위 수수료가 결정되지만, 각 리더는 다른 동시 리더들의 예약 상태를 거의 알 수 없기 때문에, 수수료 변동과 자원 미활용이 발생할 수 있다.
자원 이용 부족과 이로 인한 급격한 수수료 상승을 완화하기 위해, 미사용된 블록 용량은 미래의 블록으로 이월되어야 한다. 즉, 현재 병합 블록이 쓰기 잠금, 총 바이트 수 또는 총 컴퓨팅 유닛(CUs)에서 X만큼 미사용되면, K*X를 다음 블록에 추가해야 하며, 여기서 0 < K < 1이며, 일정한 최대값까지 가능하다. 비동기 실행은 체인 최상단에서 최대 한 에포크(epoch)까지 뒤처질 수 있으므로, 용량 이월은 상당히 공격적으로 설정될 수 있다.
최근의 블록 데이터에 따르면, 대부분의 블록은 일반적으로 80% 정도 채워지고, 쓰기 잠금 제한은 50%보다 훨씬 낮다. 일반적으로 미래의 블록에는 항상 여유 용량이 있어야 한다. 블록이 일시적으로 용량 제한을 초과할 수 있기 때문에, 실행은 합의 프로세스와 비동기적으로 이루어져야 한다. 비동기 실행 제안에 대한 자세한 내용은 APE 문서를 참조하라.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














