Vocdoni 프로토콜: ZK 기술을 통해 대중을 위한 분산 투표 활성화

이 기사는 기계로 번역되었습니다
원문 표시

Vocdoni 에서 우리는 지난 6년 동안 분산형 투표 솔루션을 발전시키고, 웹2 애플리케이션과 웹3 기술을 연결하는 데 집중했습니다. 우리는 축구 클럽, 시의회, 협회, 정당, 전문 기관, 기소 중인 운동 등과 같은 조직을 위해 고위험 투표를 성공적으로 실행했습니다.

오늘날까지 우리는 맞춤형 권한 증명 레이어 1 네트워크에 의존해 왔습니다.
하지만 우리는 완전한 분산화를 달성하고 디지털 투표 시스템의 주요 과제를 해결하기 위해 이제 제로 지식(zk) 기반 인프라로 전환할 때가 되었다고 믿습니다.

이 새로운 프로토콜 제안 설계를 진행하는 과정에서 우리는 Ethereum 커뮤니티로부터 피드백을 받고 싶습니다. :heartbeat: .


MACI 및 기타 전문 지식에서 아이디어를 얻어 영수증 없음, 유권자 개인 정보 보호, 감사 투명성, 보편적 감사 및 신뢰할 수 있는 코디네이터의 필요성 제거와 같은 중요한 문제를 해결하는 새로운 보편적 투표 프로토콜을 소개합니다.

확장성과 접근성을 위해 설계된 이 시스템은 대량 채택에 적합한 고빈도 저비용 투표를 가능하게 합니다. 우리는 zkSNARK와 임계값 동형 암호화(ElGamal)를 활용하여 최종 사용자의 엔드투엔드 검증 가능성과 익명성을 보장합니다.

이더리움 블록체인에서 특수 레이어 2로 작동하는 분산형 zkSNARK 기반 상태 머신은 검열 저항성, 무결성, 신뢰할 수 없는 운영 및 결과에 대한 투명한 감사를 제공합니다. 스마트 계약을 통해 조정되는 시퀀서 간의 분산 키 생성(DKG)은 중앙 권한에 의존하지 않고도 안전하고 분산된 암호화 키 생성을 가능하게 합니다.

대부분의 구성 요소는 접근 가능한 기술을 사용하여 구현되었으며 개념 증명 테스트를 거쳐 프로토콜이 실용적이고 즉시 배포할 준비가 되었음을 확인했습니다. 2025년 1~2분기에 테스트넷을 출시할 계획입니다.

저희 구현은 투표자 측에서 Circom과 SnarkJS를 사용하여 스마트폰과 웹 브라우저를 포함한 모든 기기에서 투표할 수 있도록 합니다. 시퀀서의 경우, 투표 집계에서 기본 재귀를 위해 곡선 BLS12-377과 BW6-761을 사용하여 Gnark를 사용합니다. 이 설정은 Ethereum에서 검증할 수 있는 최종 BN254 증명을 생성합니다.

분산화에 초점을 맞춰, 우리는 접근 가능한 머신(64GiB 메모리를 갖춘 CPU 기반 시스템)에서 작동하도록 시퀀서를 설계했기 때문에 참여에 특수 하드웨어가 필요하지 않습니다.


배우들

주최측은 투표 옵션, 기간, 유권자 등록(인구 조사) 등의 매개변수를 정의하여 투표 절차를 설정하고 관리합니다.

유권자는 사용자 친화적인 인터페이스를 통해 시스템과 상호 작용하여 안전하고 비공개적으로 투표할 수 있습니다. 유권자는 암호화된 투표가 선택 사항을 공개하지 않고도 투표 규칙을 준수한다는 것을 증명하기 위해 zkSNARK를 생성합니다.

시퀀서는 투표를 수집하고, 유효성을 검증하고, 공유 상태를 업데이트하는 전문 노드입니다. 이들은 분산 키 생성(DKG) 프로토콜에 참여하여 개인 키를 제어하는 단일 당사자 없이 암호화 키를 공동으로 생성합니다.

영상
이미지 1383×1076 37.2KB

속성

프라이버시는 동형 암호화를 사용하여 유지됩니다. 투표는 타원 곡선을 통한 ElGamal 암호 시스템으로 암호화되어 개별 투표지를 해독하지 않고도 암호화된 투표를 집계할 수 있으므로 유권자의 선택은 기밀로 유지됩니다.

무결성은 시퀀서의 분산 네트워크 의 협력적 노력을 통해 보장되며, 이들은 Merkle 트리로 표현되는 공유 상태를 유지하는데, 이는 누적 투표와 이중 투표를 방지하기 위한 무효화자를 포함하여 투표 프로세스의 현재 상태를 요약합니다. 상태가 새로운 투표로 업데이트될 때마다 시퀀서는 상태 전환의 유효성을 증명하는 zkSNARK 증명을 생성합니다.

수신 불능은 유권자가 제3자에게 투표 방법을 증명할 수 없도록 방지하여 강압 및 투표 매수의 위험을 완화함으로써 달성됩니다. 이는 투표용지 재암호화 및 투표 덮어쓰기 메커니즘을 통해 달성됩니다. 유권자가 암호화된 투표용지를 제출하면 시퀀서는 이를 상태에 저장하기 전에 다시 암호화하여 원래 암호문과 다시 암호화된 암호문을 연결하는 것을 계산적으로 불가능하게 만듭니다. 유권자는 또한 자신의 투표를 덮어쓸 수 있습니다. 유권자가 새 투표를 하면 시퀀서는 이전에 암호화된 투표를 집계에서 빼고 새 투표를 더합니다. 시퀀서가 무작위 투표용지를 정기적으로 다시 암호화하면 덮어쓰기가 발생하는 시점이 숨겨져 투표용지가 덮어쓰기되었는지 아니면 단순히 다시 무작위화되었는지 구별할 수 없게 되어 수신 불능이 향상됩니다.

엔드투엔드 워크플로

  1. 프로세스 초기화 : 주최자는 옵션, 기간, 인구 조사를 비롯한 투표 매개변수를 정의하고 스마트 계약을 통해 Ethereum 블록체인에 새로운 프로세스를 등록합니다.
  2. 분산 키 생성(DKG) : 시퀀서는 DKG 프로토콜을 공동으로 실행하여 어느 한 당사자도 개인 키를 알지 못한 채 공동 공개 암호화 키를 생성합니다. 생성된 공개 키는 투표자가 투표용지를 암호화할 때 사용할 수 있도록 체인에 게시됩니다.
  3. 유권자 준비 : 유권자는 인구 조사 등록부에서 공개 암호화 키와 포함 증명(Merkle 증명)을 검색합니다.
  4. 투표 캐스팅 : 유권자는 선택 사항을 선택하고 공개 키를 사용하여 투표지를 암호화합니다. zkSNARK 증명을 생성하여 선택 사항을 공개하지 않고 암호화된 투표의 유효성을 증명합니다. 암호화된 투표지와 증명은 처리를 위해 시퀀서에 제출됩니다.
  5. 투표 수집 및 검증 : 시퀀서는 각 투표가 프로토콜 규칙을 준수하는지 확인하기 위해 zkSNARK 증명을 검증합니다. 투표자가 자격이 있고 아직 투표하지 않았는지 확인하거나 투표 덮어쓰기를 적절히 처리합니다. 유효한 암호화된 투표는 동형적으로 집계되므로 복호화 없이 집계할 수 있습니다. 시퀀서는 상태 머클 트리를 업데이트하여 새로운 투표와 무효화자를 반영합니다.
  6. 상태 전환 및 증명 제출 : 시퀀서는 이전 상태에서 새 상태로의 상태 전환의 유효성을 증명하는 zkProof를 생성합니다. 새 루트와 해당 증명은 Ethereum 스마트 계약에 제출됩니다. 계약은 데이터를 검증하고 저장된 상태 루트를 업데이트합니다.
  7. 데이터 가용성 : 상태를 재구축하는 데 필요한 데이터는 데이터 가용성 계층(Ethereum 데이터 블롭)에 게시되어 새로운 상태의 검증 및 재구축을 위한 접근성을 보장합니다.
  8. 프로세스 마무리 : 투표 기간이 끝나면 체인상에서 프로세스가 마무리되고, 더 이상 투표가 허용되지 않습니다.
  9. 결과 복호화 : 시퀀서는 임계값 복호화 프로토콜을 사용하여 집계된 투표 총계를 복호화하기 위해 협업합니다. 복호화된 결과는 체인에 게시되어 변경 불가능하고 투명한 결과를 제공합니다.

임계값 동형 암호화

이 시스템은 타원 곡선 bn254에 대한 ElGamal 임계값 암호화 방식을 활용하는데, 이는 투표를 안전하게 집계하는 데 필수적인 가산적 준동형 속성을 제공합니다.

암호화

유권자의 선택은 메시지 m \in \mathbb{Z}_q m Z q 로 표현됩니다. 투표를 암호화하려면:

  1. 유권자는 메시지를 타원 곡선상의 점으로 인코딩합니다: M = m G. M = m G .
  2. 투표자는 무작위 스칼라 k \in \mathbb{Z}_q^* k Z q 를 선택합니다.
  3. 암호문은 다음과 같이 계산됩니다. C = (C_1, C_2) = (k G, M + k H). C = ( C 1 , C 2 ) = ( k G , M + k H ) .

동형 추가

타원 곡선에 대한 ElGamal 암호 시스템은 점으로 표현된 메시지에 대한 가산 준동형 사상을 지원합니다. 두 개의 암호문 (C_1^{(1)}, C_2^{(1)}) ( C ( 1 ) 1 , C ( 1 ) 2 )(C_1^{(2)}, C_2^{(2)}) ( C ( 2 ) 1 , C ( 2 ) 2 ) 이 주어지면, 이들의 성분별 덧셈은 다음을 생성합니다.

  • C_1^{(\text{합계})} = C_1^{(1)} + C_1^{(2)} C ( 합계 ) 1 = C ( 1 ) 1 + C ( 2 ) 1
  • C_2^{(\text{합계})} = C_2^{(1)} + C_2^{(2)} C ( 합계 ) 2 = C ( 1 ) 2 + C ( 2 ) 2

집계된 암호문은 메시지 합계로 복호화됩니다. M^{(\text{sum})} = M_1 + M_2 M ( sum ) = M 1 + M 2

임계값 복호화

투표 기간이 끝나면 시퀀서가 집계된 암호문을 협력하여 해독합니다. 각 시퀀서 P_j P j 는 부분 해독 공유를 계산합니다.

  1. 계산: D_j = s_j C_1. D j = s j C 1 .
  2. 부분 복호화는 라그랑주 보간 계수 \lambda_j λ j 를 사용하여 결합됩니다.
    D = \sum_{j \in T} \lambda_j D_j = s C_1 D = j T λ j D j = s C 1
    여기서 T T는 최소 t개의 t 시퀀서의 집합입니다.
  3. 평문 메시지는 다음을 계산하여 복구됩니다.
    M = C_2 - D = M + k H - sk G = M M = C 2 D = M + k H s k G = M
  4. 최종 결과 m m 은 M = m G M = m G 풀어서 구할 수 있으며, 그 결과 m m 이 생성됩니다.

분산 키 생성(DKG)

신뢰할 수 있는 기관의 필요성을 없애기 위해 투표 암호화에 사용되는 암호화 키는 분산 키 생성 프로토콜을 통해 시퀀서가 공동으로 생성합니다. 이 프로토콜은 다음과 같이 진행됩니다.

  1. 초기화 : G G 를 소수 차수 q q 의 타원 곡선 군의 생성자로 하자. 임계값 t t 와 시퀀서 수 n nt \leq n t n 으로 미리 정의되어 있다.
  2. 비밀 공유 : 각 시퀀서 P_i P i 는 차수 t - 1 t 1 의 비밀 다항식 f_i(x) f i ( x ) 를 무작위로 선택합니다. 여기서 f_i(0) = a_{i,0} f i ( 0 ) = a i , 0 이고 계수 a_{i,j} a i , j 는 \mathbb{Z}_q Z q 에서 균일하게 무작위로 선택됩니다.
  3. 커밋먼트 : 각 시퀀서는 다항식 계수에 대한 커밋먼트를 게시합니다. C_{i,j} = a_{i,j} G \quad \text{for} \quad j = 0, \ldots, t - 1. C i , j = a i , j G ~을 위한 j = 0 , , t 1.
  4. 공유 분배 : 시퀀서 P_i P i는 다른 모든 시퀀서 P_j 에 대한 공유를 계산합니다. P j : s_{i,j} = f_i(j), \quad \text{for} \quad j = 1, \ldots, n s i , j = f i ( j ) , ~을 위한 j = 1 , , n
    이러한 공유는 ECIES의 간소화된 버전을 사용하여 각 시퀀서에 안전하게 전송됩니다.
  5. 검증 : 각 시퀀서 P_j P j 는 다음을 확인하여 수신된 공유 s_{i,j} s i , j 를 검증합니다. s_{i,j} G \stackrel{?}{=} \sum_{k=0}^{t - 1} C_{i,k} \cdot j^k s i , j G ? = t 1 k = 0 C i , k j k
  6. 개인 키 공유 계산 : 각 시퀀서는 개인 키 공유를 계산합니다. s_j = \sum_{i=1}^n s_{i,j} \mod q s j = n i = 1 s i , j 모드
  7. 공개 키 계산 : 집합 공개 키는 다음과 같이 계산됩니다. H = \sum_{i=1}^n C_{i,0} = s G H = n i = 1 C i , 0 = s G , 여기서 s = \sum_{i=1}^n a_{i,0} \mod q s = n i = 1 a i , 0 모드 q는 시퀀서 간에 분산된 형태로만 알려진 집계된 개인 키입니다.

투표

투표는 아래 나열된 여러 구성 요소와 메커니즘으로 구성됩니다.

프로세스 식별자 : 투표 프로세스의 고유 식별자 \text{ProcessId} ProcessId . 이를 통해 투표가 특정 투표 이벤트와 올바르게 연관되고 프로세스 간 간섭이 방지됩니다.

인구조사 증명 : 유권자가 공인 유권자 등록부(인구조사)에 포함되었음을 보여주는 Merkle 증명. 이 증명을 통해 시퀀서는 전체 유권자 목록을 공개하지 않고도 유권자의 자격을 확인할 수 있어 프라이버시와 효율성을 유지할 수 있습니다.

신원 커미트먼트 : 유권자는 암호화 해시 함수를 사용하여 커미트먼트를 계산합니다. C = Hash(\text{Address} \parallel \text{ProcessId} \parallel s) C = H a s h ( Address ProcessId s ) , 여기서 H H 는 암호화 해시 함수이고, \text{Address} Address 는 유권자의 고유 식별자(공개 키 또는 주소 등)이고, s s 는 유권자만 아는 비밀입니다.

비밀 s s 를 커밋먼트 C C 에 통합함으로써, 우리는 무효화자를 공개적으로 접근 가능한 데이터에서 유권자의 신원과 직접 연관시키는 것을 효과적으로 분리합니다. 즉, 미래의 양자 컴퓨팅 발전으로 ElGamal 암호화가 손상되어 암호화된 투표용지의 내용이 드러나더라도 무효화자를 사용하여 해독된 투표용지를 특정 유권자의 주소로 다시 연결하는 실용적인 방법은 없습니다.

무효화기 : 이중 투표를 방지하고 투표 덮어쓰기를 처리하기 위해 투표자는 무효화기를 계산합니다. N = Hash(C \parallel s) N = H a s h ( C s ) . 무효화기는 투표자의 신원을 밝히지 않고 투표자의 참여를 고유하게 나타내는 일회성 토큰 역할을 합니다.

무효화 계산 시 개인 키나 결정적 서명을 사용하지 않음으로써 하드웨어 지갑과 비결정적 서명 체계와의 호환성을 보장합니다.

투표용지 : 투표용지는 유권자의 선택을 주최자가 정의한 투표 프로토콜 규칙을 준수해야 하는 개별 선택의 배열로 나타냅니다. 이 유연한 접근 방식을 통해 프로토콜은 범위 투표, 순위, 2차 투표 등 다양한 투표 구성을 지원할 수 있습니다.

조직자가 다음과 같은 매개변수를 사용하여 2차 투표 시스템을 구현하려고 한다고 가정해 보겠습니다.

  • 최대 선택 항목: 최대 5개 옵션을 선택할 수 있습니다.
  • 값 범위: 각 선택 항목은 음이 아닌 정수여야 합니다.
  • 총 비용 제약: 선택 항목의 제곱의 합은 100크레딧의 예산을 초과해서는 안 됩니다.
  • 고유 값 제약: 중복 값이 허용됩니다.

이 프로토콜은 투표 용지의 경우 m = (m_1, m_2, m_5) m = ( m 1 , m 2 , , m 5 ) 를 강제로 적용합니다.

  • m_i \geq 0 m i 0 .
  • \sum_{i=1}^5 m_i^2 \leq 100 5 i = 1 m 2 i 100 .

암호화된 투표용지 : 유권자는 다음과 같이 동형 ElGamal 암호화 방식을 사용하여 투표용지를 암호화합니다.

  • 유권자의 선택은 메시지 벡터 \mathbf{m} = (m_1, m_2, \ldots, m_n) m = ( m 1 , m 2 , , m n ) 으로 인코딩됩니다. 여기서 각 m_i m i 는 투표지 배열의 선택에 해당합니다.
  • 각 요소 m_i m i는 타원 곡선상의 점으로 인코딩됩니다. M_i = m_i G M i = m i G , 여기서 G G 는 곡선의 생성자입니다.
  • 투표자는 곡선의 순서인 q q 를 갖는 무작위 스칼라 k \in \mathbb{Z}_q^* k Z q 를 선택합니다.
  • 암호문은 다음과 같이 계산됩니다. C = (C_1, C_2) = \left( k G,\; \sum_{i=1}^n M_i + k H \right) C = ( C 1 , C 2 ) = ( k G , n i = 1 M i + k H )
    여기서 H H 는 분산 키 생성 프로토콜로부터 얻은 공개 키입니다.

영지식 증명(zkSNARK) : 유권자는 투표 내용을 공개하지 않고 다음 사항을 증명하는 zkSNARK를 생성합니다.

  • 올바른 암호화: 암호화된 투표용지는 암호화 방식에 따라 올바르게 형성되었습니다.
  • 의정 준수: 유권자의 선택은 주최측이 정의한 투표 의정 규칙을 준수합니다.
  • 올바른 무효화 및 커미트먼트: 무효화 및 커미트먼트는 투표자의 비밀 번호 s 주소를 사용하여 올바르게 계산됩니다.
  • 비밀에 대한 지식: 투표자는 암호화 에 사용된 비밀 ss 랜덤 스칼라 kk 알고 있습니다.

서명 : 유권자는 주소와 연관된 개인 키를 사용하여 투표의 필수 구성 요소에 서명합니다. 이를 통해 투표가 인증되고 검증 가능한 방식으로 유권자의 신원에 바인딩됩니다. 많은 서명 체계가 지원될 수 있습니다(ECDSA, EdDSA, RSA 등).

상태 전환

State Merkle Tree 는 포함된 데이터의 효율적이고 안전한 검증을 가능하게 하는 암호화 데이터 구조입니다. 이 트리는 미리 정의된 인덱스 또는 주소에 다양한 유형의 정보를 저장하도록 구성되어 있습니다.

  • 프로세스 매개변수 : 정적 인덱스에 저장되며, \text{ProcessId} ProcessId , 인구 조사 머클 트리의 루트( \text{censusRoot} censusRoot ), 투표 프로토콜 구성, DKG 프로토콜을 통해 생성된 공개 암호화 키 H H 등의 필수 정보를 포함합니다.
  • 결과 축적기 : 투표 추가 및 뺄셈을 처리하기 위해 두 개의 축적기가 유지됩니다.
    • 추가 축적기 ( C_{\text{add}} C add ): 집계된 암호화된 투표를 저장하여 집계에 추가합니다.
    • 뺄셈 누적기 ( C_{\text{sub}} C sub ): 투표 덮어쓰기로 인해 뺄셈된 준동형적으로 집계된 암호화된 투표를 저장합니다.
  • 무효화자 : 이중 투표를 방지하기 위해 저장됩니다. 각 무효화자 N N은 투표자의 약속과 연관되어 있으며 특정 투표 프로세스에 대해 해당 투표자에게 고유합니다.
  • 약속 : 유권자 참여를 추적하고 투표 덮어쓰기를 용이하게 하기 위해 저장됩니다.

시퀀서는 새로운 투표를 처리하고 공유 상태를 업데이트하는 역할을 합니다. 각 상태 전환에는 다음 단계가 포함됩니다.

  1. 투표 일괄 수집 : 시퀀서는 투표자로부터 최대 N N 개의 새로운 투표를 일괄 수집합니다. 투표를 일괄 처리하면 효율성과 확장성이 향상되어 시퀀서가 여러 투표를 동시에 처리할 수 있습니다. N N 의 값은 계산 제약과 네트워크 처리량의 균형을 맞추는 시스템 매개변수에 의해 결정됩니다.

  2. 투표 검증 : 배치의 각 투표에 대해 시퀀서는 다음을 수행합니다.

    • zkSNARK 증명 검증 : 각 투표와 함께 제출된 제로 지식 증명이 유효한지, 그리고 올바른 암호화, 투표 프로토콜 제약 조건 준수, 무효화자와 커밋먼트의 적절한 계산을 포함한 프로토콜 규칙을 투표가 준수하는지 확인합니다.
    • 자격 확인 : 제공된 인구 조사 머클 증명을 해당 주에 저장된 \text{censusRoot} 인구 조사 루트 와 비교하여 유권자의 자격을 확인합니다.
    • 이중 투표 방지 : 무효화자 N N이 이미 상태에 있는지 확인합니다. 존재하지 않으면 투표는 새 투표로 처리됩니다. 존재하는 경우 투표는 투표 덮어쓰기 로 간주됩니다.
  3. 투표 덮어쓰기 처리 : 투표자가 동일한 무효화자 N N 으로 새 투표를 제출하는 경우 시퀀서는 다음을 수행합니다.

    • 이전 암호화된 투표를 뺄셈 누적기 C_{\text{sub}} C sub 에서 뺍니다.
    • 새로운 암호화된 투표를 추가 축적기 C_{\text{add}} C add 에 추가합니다.
    • 주 내 새로운 암호화된 투표용지를 대체합니다.
  4. 무작위 재암호화 : 수신 자유성을 강화하고 투표와 투표자 간의 연결을 방지하기 위해 시퀀서는 기존 암호화된 투표용지를 무작위로 재암호화합니다.

    • 주 내 암호화된 투표용지에서 무작위 하위 집합을 선택합니다.
    • 새로운 난수 스칼라를 사용하여 암호화를 0으로 추가하여 선택된 각 투표용지를 다시 암호화합니다.
    • 주 내 암호화된 투표용지를 다시 암호화된 버전으로 업데이트합니다.
  5. 투표의 동형 집계 : 시퀀서는 ElGamal 암호화의 동형 속성을 사용하여 어큐뮬레이터를 업데이트합니다.

  6. 상태 전이 zkSNARK 생성 : 시퀀서는 이전 루트 \text{Root1} Root1 에서 새 루트 \text{Root2} Root2 로의 상태 전이의 유효성을 증명하는 zkSNARK 증명을 생성합니다. zkSNARK 증명은 이전의 모든 제약 조건과 연산을 검증합니다.

  7. 온체인 제출 : 시퀀서는 다음을 제출합니다. 업데이트된 상태 루트 \text{Root2} Root2 . 상태 전환의 유효성을 증명하는 증명. 투표와 상태 업데이트가 포함된 데이터 블롭에 대한 해시 커밋으로 데이터 가용성을 보장합니다.

Vocdoni 토큰(VOC)

Vocdoni는 참여자 간의 인센티브를 조정하고 분산형 투표 생태계의 지속 가능성을 보장하기 위해 새로운 토큰(VOC)을 도입합니다. 이 토큰은 여러 가지 필수 기능을 제공합니다. 시퀀서에게 인센티브를 제공하고, 투표 프로세스에 대한 지불을 용이하게 하며, 분산형 거버넌스를 가능하게 합니다.

시퀀서는 네트워크에 참여하기 위해 토큰을 담보로 스테이킹해야 하며, 정직한 행동과 네트워크 보안을 촉진합니다. 그들은 유효한 투표를 처리하고 네트워크의 무결성을 유지하는 데 기여한 것에 따라 VOC 토큰으로 보상을 받습니다.

조직자는 토큰을 사용하여 투표 프로세스를 만들고 관리하는 데 비용을 지불합니다. 비용은 최대 투표 수( \text{maxVotes} maxVotes ), 투표 기간( \text{processDuration} processDuration ) 및 참여 시퀀서 수와 관련된 원하는 보안 수준과 같은 요인에 따라 달라집니다.

투표 과정의 총 비용은 다음 공식을 사용하여 계산됩니다.

\text{총비용} = \text{기본비용} + \text{용량비용} + \text{기간비용} + \text{보안비용} 총비용 = 기본비용 + 용량비용 + 기간비용 + 보안비용

비용의 구성 요소:

  • 기본 비용: \text{baseCost} = \text{fixedCost} + \text{maxVotes} \cdot p baseCost = fixedCost + maxVotes p , 여기서 \text{fixedCost} fixedCost 는 고정 수수료이고 p p 는 작은 선형 요인입니다.

  • 용량 비용: \text{capacityCost} = k_1 \left( \frac{\text{totalVotingProcesses}}{\text{totalSequencers} - \text{usedSequencers} + \epsilon} \cdot \text{maxVotes} \right)^a capacityCost = k 1 ( totalVotingProcesses totalSequencers usedSequencers + ϵ maxVotes ) a , 여기서 k_1 k 1 은 스케일링 인자이고, a a 는 비선형성을 제어하고, \epsilon ϵ 은 0으로 나누는 것을 방지하기 위한 작은 숫자입니다.

  • 지속 시간 비용: \text{durationCost} = k_2 \cdot \text{processDuration}^b durationCost = k 2 processDuration b , k_2 k 2 는 스케일링 요소이고 b b 는 지속 시간에 따라 스케일링을 제어합니다.

  • 보안 비용: \text{securityCost} = k_3 \cdot e^{c \left( \frac{\text{numSequencers}}{\text{totalSequencers}} \right)^d} securityCost = k 3 e c ( numSequencers totalSequencers ) d , 여기서 k_3 k 3 은 스케일링 인수이고, c c , d d 는 사용된 시퀀서 수와 관련된 지수 스케일링을 제어합니다.


시퀀서는 처리된 투표 수와 투표 재작성 수(수신 없음을 위한 재암호화 포함)에 따라 보상을 받습니다 . 시퀀서 i i 에 대한 총 보상은 다음과 같이 계산됩니다.

\text{sequencerReward}_i = R \left( \frac{\text{투표}_i}{\text{최대투표}} \right) + W \left( \frac{\text{투표재작성}_i}{\text{총재작성}} \right) sequencerReward i = R ( 투표 i 최대 투표 ) + W ( voteRewrites i totalRewrites )

이는 다음과 같은 제약을 받습니다.

\frac{\text{투표재작성}_i}{\text{투표}_i} \leq T 투표재작성 i 투표 i TR > W R > W

시퀀서가 재작성보다 새 투표 처리를 우선시하도록 합니다. 여기서 R RW W 는 각각 투표 처리와 투표 재작성을 위해 할당된 보상 풀의 일부이고, T T 는 투표당 재작성 횟수를 제한하는 미리 정의된 상수입니다.

의무를 이행하지 못한 시퀀서의 담보가 다음과 같이 삭감될 수 있습니다.

\text{삭감된 금액}_i = s \cdot \text{지분된 담보}_i 삭감된 금액 i = s 지분된 담보 i

여기서 s s는 슬래싱 계수( 0 \leq s \leq 1 0 s 1 )입니다.

자원

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트