Giao thức Vocdoni: Cho phép bỏ phiếu phi tập trung cho quần chúng bằng công nghệ ZK

Bài viết này được dịch máy
Xem bản gốc

Tại Vocdoni , chúng tôi đã dành sáu năm qua để thúc đẩy các giải pháp bỏ phiếu phi tập trung, tập trung vào việc kết nối các ứng dụng web2 với các công nghệ web3. Chúng tôi đã thực hiện thành công việc bỏ phiếu có rủi ro cao cho các tổ chức như câu lạc bộ bóng đá, hội đồng thành phố, hiệp hội, đảng phái chính trị, tổ chức chuyên nghiệp, các phong trào đang bị truy tố và nhiều tổ chức khác.

Cho đến nay, chúng ta vẫn dựa vào mạng chứng minh thẩm quyền Lớp 1 được tùy chỉnh.
Nhưng chúng tôi tin rằng đã đến lúc chuyển sang cơ sở hạ tầng không kiến thức (zk) để đạt được sự phân cấp hoàn toàn và giải quyết những thách thức chính của hệ thống bỏ phiếu kỹ thuật số

Trên con đường thiết kế đề xuất giao thức mới này, chúng tôi muốn nhận được phản hồi từ cộng đồng Ethereum :heartbeat: .


Bằng cách lấy ý tưởng từ chuyên môn của chúng tôi, MACI và những bên khác. Chúng tôi giới thiệu một giao thức bỏ phiếu phổ quát mới giải quyết các vấn đề quan trọng như không cần biên lai, quyền riêng tư của cử tri, tính minh bạch trong giám sát, kiểm toán phổ quát và loại bỏ nhu cầu về một điều phối viên đáng tin cậy.

Được thiết kế để có khả năng mở rộng và khả năng truy cập, hệ thống cho phép bỏ phiếu tần suất cao, chi phí thấp phù hợp để áp dụng rộng rãi. Chúng tôi sử dụng zkSNARK và mã hóa đồng hình ngưỡng (ElGamal) để đảm bảo khả năng xác minh đầu cuối và ẩn danh cho người dùng cuối.

Một máy trạng thái phi tập trung dựa trên zkSNARK, hoạt động như lớp 2 chuyên biệt trên chuỗi khối Ethereum, cung cấp khả năng chống kiểm duyệt, tính toàn vẹn, hoạt động không cần sự trung thực và giám sát minh bạch các kết quả. Một thế hệ khóa phân tán (DKG) giữa các trình sắp xếp, được phối hợp thông qua hợp đồng thông minh, cho phép tạo khóa mã hóa an toàn và phi tập trung mà không cần phụ thuộc vào một cơ quan trung ương.

Hầu hết các thành phần đã được triển khai bằng các công nghệ có thể truy cập được và đã trải qua thử nghiệm chứng minh khái niệm, xác nhận rằng giao thức này thực tế và sẵn sàng để triển khai ngay lập tức. Chúng tôi có kế hoạch ra mắt mạng thử nghiệm vào quý 1–quý 2 năm 2025.

Triển khai của chúng tôi sử dụng Circom và SnarkJS ở phía cử tri, cho phép bỏ phiếu từ bất kỳ thiết bị nào, bao gồm điện thoại thông minh và trình duyệt web. Đối với trình sắp xếp, chúng tôi sử dụng Gnark với các đường cong BLS12-377 và BW6-761 để đệ quy gốc trong tổng hợp phiếu bầu. Thiết lập này tạo ra bằng chứng BN254 cuối cùng có thể được xác minh trên Ethereum.

Tập trung vào tính phi tập trung, chúng tôi đã thiết kế máy giải trình tự để hoạt động trên các máy có thể truy cập được—các hệ thống dựa trên CPU với bộ nhớ 64 GiB—do đó, việc tham gia không yêu cầu phần cứng chuyên dụng.


Diễn viên

Người tổ chức thiết lập và quản lý quy trình bỏ phiếu, xác định các thông số như tùy chọn bỏ phiếu, thời lượng và sổ đăng ký cử tri (điều tra dân số).

Người bỏ phiếu tương tác với hệ thống thông qua giao diện thân thiện với người dùng, cho phép họ bỏ phiếu một cách an toàn và riêng tư. Người bỏ phiếu tạo zkSNARK để chứng minh rằng phiếu bầu được mã hóa của họ tuân thủ các quy tắc bỏ phiếu mà không tiết lộ lựa chọn của họ.

Trình sắp xếp là các nút chuyên biệt chịu trách nhiệm thu thập phiếu bầu, xác minh tính hợp lệ của phiếu bầu và cập nhật trạng thái được chia sẻ. Chúng tham gia vào giao thức Tạo khóa phân tán (DKG) để cùng nhau tạo khóa mã hóa mà không có bên nào kiểm soát khóa riêng.

hình ảnh
hình ảnh 1383×1076 37.2 KB

Của cải

Quyền riêng tư được duy trì bằng mã hóa đồng cấu. Phiếu bầu được mã hóa bằng hệ thống mật mã ElGamal trên các đường cong elliptic, cho phép tổng hợp các phiếu bầu được mã hóa mà không cần giải mã từng lá phiếu, do đó giữ bí mật các lựa chọn của cử tri.

Tính toàn vẹn được đảm bảo thông qua nỗ lực hợp tác của một mạng lưới phân cấp các trình tự, những người duy trì trạng thái chung được biểu thị bằng cây Merkle tóm tắt trạng thái hiện tại của quy trình bỏ phiếu, bao gồm các phiếu bầu tích lũy và các lệnh hủy bỏ để ngăn chặn việc bỏ phiếu trùng lặp. Mỗi lần trạng thái được cập nhật bằng các phiếu bầu mới, trình tự sẽ tạo ra bằng chứng zkSNARK chứng thực tính hợp lệ của quá trình chuyển đổi trạng thái.

Tính không cần biên lai đạt được bằng cách ngăn cử tri chứng minh với bên thứ ba cách họ đã bỏ phiếu, giảm thiểu rủi ro bị ép buộc và mua phiếu bầu. Điều này được thực hiện thông qua cơ chế mã hóa lại lá phiếu và ghi đè phiếu bầu. Khi cử tri nộp lá phiếu đã mã hóa, máy sắp xếp sẽ mã hóa lại lá phiếu đó trước khi lưu trữ trong trạng thái, khiến việc liên kết bản mã gốc và bản mã đã mã hóa lại trở nên bất khả thi về mặt tính toán. Cử tri cũng được phép ghi đè phiếu bầu của mình; nếu cử tri bỏ phiếu mới, máy sắp xếp sẽ trừ phiếu đã mã hóa trước đó khỏi số phiếu và thêm phiếu mới. Việc máy sắp xếp mã hóa lại thường xuyên các lá phiếu ngẫu nhiên sẽ che giấu thời điểm xảy ra tình trạng ghi đè, nâng cao tính không cần biên lai bằng cách khiến không thể phân biệt được liệu lá phiếu đã bị ghi đè hay chỉ được sắp xếp lại ngẫu nhiên.

Quy trình làm việc từ đầu đến cuối

  1. Khởi tạo quy trình : Người tổ chức xác định các tham số bỏ phiếu—bao gồm các tùy chọn, thời lượng và điều tra dân số—và đăng ký quy trình mới trên chuỗi khối Ethereum thông qua hợp đồng thông minh.
  2. Distributed Key Generation (DKG) : Các trình sắp xếp thực hiện giao thức DKG một cách hợp tác để tạo ra khóa mã hóa công khai tập thể mà không có bên nào biết khóa riêng. Khóa công khai được tạo ra được công bố trên chuỗi để cử tri sử dụng khi mã hóa phiếu bầu của họ.
  3. Chuẩn bị cho cử tri : Cử tri lấy khóa mã hóa công khai và bằng chứng bao gồm của họ (bằng chứng Merkle) từ sổ đăng ký điều tra dân số.
  4. Vote Casting : Người bỏ phiếu chọn lựa chọn của họ và mã hóa lá phiếu của họ bằng khóa công khai. Tạo bằng chứng zkSNARK để chứng minh tính hợp lệ của lá phiếu được mã hóa của họ mà không tiết lộ lựa chọn của họ. Lá phiếu và bằng chứng được mã hóa được gửi đến trình sắp xếp để xử lý.
  5. Thu thập và xác minh phiếu bầu : Trình sắp xếp xác minh các bằng chứng zkSNARK để đảm bảo mỗi phiếu bầu tuân thủ các quy tắc giao thức. Xác nhận rằng người bỏ phiếu đủ điều kiện và chưa bỏ phiếu hoặc xử lý ghi đè phiếu bầu một cách thích hợp. Các phiếu bầu được mã hóa hợp lệ được tổng hợp theo cách đồng hình, cho phép kiểm đếm mà không cần giải mã. Trình sắp xếp cập nhật Cây Merkle của tiểu bang để phản ánh các phiếu bầu và phiếu hủy mới.
  6. Chuyển đổi trạng thái và gửi bằng chứng : Trình sắp xếp tạo zkProofs chứng thực tính hợp lệ của quá trình chuyển đổi trạng thái từ trạng thái trước sang trạng thái mới. Gốc mới và bằng chứng tương ứng được gửi đến hợp đồng thông minh Ethereum. Hợp đồng xác minh dữ liệu và cập nhật gốc trạng thái đã lưu trữ.
  7. Tính khả dụng của dữ liệu : Dữ liệu cần thiết để tái tạo trạng thái được công bố lên lớp tính khả dụng của dữ liệu (blob dữ liệu Ethereum), đảm bảo khả năng truy cập để xác minh và tái tạo trạng thái mới.
  8. Hoàn tất quy trình : Vào cuối thời gian bỏ phiếu, quy trình sẽ được hoàn tất trên chuỗi và không chấp nhận thêm bất kỳ phiếu bầu nào nữa.
  9. Giải mã kết quả : Các trình sắp xếp hợp tác để giải mã tổng số phiếu bầu được tổng hợp bằng giao thức giải mã ngưỡng. Kết quả được giải mã được công bố trên chuỗi, cung cấp kết quả không thể thay đổi và minh bạch.

Mã hóa đồng dạng ngưỡng

Hệ thống sử dụng lược đồ mã hóa ngưỡng ElGamal trên đường cong elip bn254, cung cấp các thuộc tính đồng hình bổ sung cần thiết để tổng hợp phiếu bầu một cách an toàn.

Mã hóa

Lựa chọn của cử tri được biểu diễn dưới dạng một thông điệp m \in \mathbb{Z}_q m Z q . Để mã hóa phiếu bầu:

  1. Người bỏ phiếu mã hóa thông điệp thành một điểm trên đường cong elip: M = m G. M = m G .
  2. Người bỏ phiếu chọn một số vô hướng ngẫu nhiên k \in \mathbb{Z}_q^* k Z q .
  3. Bản mã được tính như sau: C = (C_1, C_2) = (k G, M + k H). C = ( C 1 , C 2 ) = ( k G , M + k H ) .

Phép cộng đồng cấu

Hệ thống mật mã ElGamal trên các đường cong elliptic hỗ trợ phép đồng cấu cộng cho các thông điệp được biểu diễn dưới dạng các điểm. Với hai bản mã (C_1^{(1)}, C_2^{(1)}) ( C ( 1 ) 1 , C ( 1 ) 2 )(C_1^{(2)}, C_2^{(2)}) ( C ( 2 ) 1 , C ( 2 ) 2 ) , phép cộng từng thành phần của chúng tạo ra:

  • C_1^{(\text{tổng})} = C_1^{(1)} + C_1^{(2)} C ( tổng ) 1 = C ( 1 ) 1 + C ( 2 ) 1
  • C_2^{(\text{tổng})} = C_2^{(1)} + C_2^{(2)} C ( tổng ) 2 = C ( 1 ) 2 + C ( 2 ) 2

Bản mã tổng hợp được giải mã thành tổng của các thông điệp: M^{(\text{sum})} = M_1 + M_2 M ( sum ) = M 1 + M 2

Giải mã ngưỡng

Sau khi thời gian bỏ phiếu kết thúc, các trình tự hợp tác giải mã bản mã tổng hợp. Mỗi trình tự P_j P j tính toán một phần chia sẻ giải mã:

  1. Tính: D_j = s_j C_1. D j = s j C 1 .
  2. Giải mã một phần được kết hợp bằng cách sử dụng hệ số nội suy Lagrange \lambda_j λ j :
    D = \sum_{j \in T} \lambda_j D_j = s C_1 D = j T λ j D j = s C 1
    trong đó T T là một tập hợp gồm ít nhất t t trình tự.
  3. Tin nhắn văn bản thuần túy được phục hồi bằng cách tính toán:
    M = C_2 - D = M + k H - sk G = M M = C 2 D = M + k H s k G = M
  4. Kết quả cuối cùng m m thu được bằng cách giải M = m G M = m G , ta được m m .

Tạo khóa phân tán (DKG)

Để loại bỏ nhu cầu về một cơ quan đáng tin cậy, khóa mã hóa được sử dụng để mã hóa lá phiếu được tạo ra một cách hợp tác bởi các máy sắp xếp thông qua giao thức Tạo khóa phân tán, tiến hành như sau:

  1. Khởi tạo : Giả sử G G là bộ tạo của nhóm đường cong elliptic có bậc nguyên tố q q . Ngưỡng t t và số lượng trình tự n n được xác định trước, với t \leq n t n .
  2. Chia sẻ bí mật : Mỗi trình sắp xếp P_i P i chọn ngẫu nhiên một đa thức bí mật f_i(x) f i ( x ) có bậc t - 1 t 1 , trong đó f_i(0) = a_{i,0} f i ( 0 ) = a i , 0 và các hệ số a_{i,j} a i , j được chọn ngẫu nhiên đồng đều từ \mathbb{Z}_q Z q .
  3. Cam kết : Mỗi trình sắp xếp công bố cam kết với các hệ số đa thức của chúng: 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. Chia sẻ Phân phối : Trình sắp xếp P_i P i tính toán các chia sẻ cho mọi trình sắp xếp khác 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
    Những chia sẻ này được truyền một cách an toàn đến các máy giải trình tự tương ứng bằng phiên bản đơn giản hóa của ECIES.
  5. Xác minh : Mỗi trình sắp xếp P_j P j xác minh các chia sẻ đã nhận s_{i,j} s i , j bằng cách kiểm tra: 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. Tính toán chia sẻ khóa riêng : Mỗi trình tự tính toán chia sẻ khóa riêng của chúng: s_j = \sum_{i=1}^n s_{i,j} \mod q s j = n i = 1 s i , j chế độ q
  7. Tính toán khóa công khai : Khóa công khai tập thể được tính như sau: H = \sum_{i=1}^n C_{i,0} = s G H = n i = 1 C i , 0 = s G , trong đó s = \sum_{i=1}^n a_{i,0} \mod q s = n i = 1 a i , 0 chế độ q là khóa riêng tổng hợp chỉ được biết dưới dạng phân tán giữa các trình sắp xếp.

Phiếu bầu

Cuộc bỏ phiếu bao gồm một số thành phần và cơ chế được liệt kê dưới đây.

Process Identifier : Mã định danh duy nhất \text{ProcessId} ProcessId cho quy trình bỏ phiếu. Điều này đảm bảo rằng các phiếu bầu được liên kết chính xác với sự kiện bỏ phiếu cụ thể và ngăn ngừa sự can thiệp giữa các quy trình.

Bằng chứng điều tra dân số : Bằng chứng Merkle chứng minh cử tri được đưa vào sổ đăng ký cử tri được ủy quyền (điều tra dân số). Bằng chứng này cho phép người sắp xếp xác minh tính đủ điều kiện của cử tri mà không tiết lộ toàn bộ danh sách cử tri, bảo vệ quyền riêng tư và hiệu quả.

Cam kết danh tính : Người bỏ phiếu tính toán cam kết bằng cách sử dụng hàm băm mật mã: C = Hash(\text{Address} \parallel \text{ProcessId} \parallel s) C = H a s h ( Address ProcessId s ) , trong đó H H là hàm băm mật mã, \text{Address} Address là mã định danh duy nhất của người bỏ phiếu (chẳng hạn như khóa công khai hoặc địa chỉ) và s s là thông tin bí mật chỉ người bỏ phiếu biết.

Bằng cách kết hợp s s bí mật vào cam kết C C , chúng tôi thực sự tách bộ hủy khỏi bất kỳ liên kết trực tiếp nào với danh tính của cử tri trong dữ liệu có thể truy cập công khai. Điều này có nghĩa là ngay cả khi những tiến bộ về máy tính lượng tử trong tương lai làm tổn hại đến mã hóa ElGamal và tiết lộ nội dung của các lá phiếu được mã hóa, sẽ không có phương pháp thực tế nào để liên kết một lá phiếu đã giải mã trở lại địa chỉ của một cử tri cụ thể bằng cách sử dụng bộ hủy.

Nullifier : Để ngăn chặn việc bỏ phiếu trùng lặp và xử lý việc ghi đè phiếu bầu, người bỏ phiếu sẽ tính toán một nullifier: N = Hash(C \parallel s) N = H a s h ( C s ) . Nullifier hoạt động như một mã thông báo một lần biểu thị duy nhất sự tham gia của người bỏ phiếu mà không tiết lộ danh tính của họ.

Bằng cách tránh sử dụng khóa riêng hoặc chữ ký xác định khi tính toán trình vô hiệu hóa, chúng tôi đảm bảo khả năng tương thích với ví phần cứng và các lược đồ chữ ký không xác định.

Phiếu bầu : Phiếu bầu đại diện cho các lựa chọn của cử tri dưới dạng một loạt các lựa chọn riêng lẻ phải tuân thủ các quy tắc giao thức bỏ phiếu do người tổ chức xác định. Cách tiếp cận linh hoạt này cho phép giao thức hỗ trợ nhiều cấu hình bỏ phiếu khác nhau, bao gồm bỏ phiếu theo phạm vi, xếp hạng, bỏ phiếu theo bậc hai và nhiều hơn nữa.

Giả sử một người tổ chức muốn triển khai hệ thống bỏ phiếu bậc hai với các tham số sau:

  • Số lựa chọn tối đa: Có thể chọn tối đa 5 tùy chọn.
  • Phạm vi giá trị: Mỗi lựa chọn phải là số nguyên không âm.
  • Giới hạn tổng chi phí: Tổng bình phương các lựa chọn không được vượt quá ngân sách 100 tín chỉ.
  • Ràng buộc giá trị duy nhất: Cho phép các giá trị trùng lặp.

Giao thức sẽ thực thi điều đó đối với một lá phiếu \mathbf{m} = (m_1, m_2, \ldots, m_5) m = ( m 1 , m 2 , , m 5 ) :

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

Phiếu bầu được mã hóa : Người bỏ phiếu mã hóa phiếu bầu của mình bằng cách sử dụng chương trình mã hóa ElGamal đồng dạng, tiến hành như sau:

  • Các lựa chọn của cử tri được mã hóa thành một vectơ thông điệp \mathbf{m} = (m_1, m_2, \ldots, m_n) m = ( m 1 , m 2 , , m n ) , trong đó mỗi m_i m i tương ứng với một lựa chọn trong mảng bỏ phiếu.
  • Mỗi phần tử m_i m i được mã hóa thành một điểm trên đường cong elip: M_i = m_i G M i = m i G , trong đó G G là phần tử tạo đường cong.
  • Người bỏ phiếu chọn một số vô hướng ngẫu nhiên k \in \mathbb{Z}_q^* k Z q , trong đó q q là bậc của đường cong.
  • Bản mã được tính như sau: 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 )
    trong đó H H là khóa công khai thu được từ giao thức Tạo khóa phân tán.

Bằng chứng không kiến thức (zkSNARK) : Người bỏ phiếu tạo ra zkSNARK để chứng minh mà không tiết lộ nội dung lá phiếu rằng:

  • Mã hóa chính xác: Phiếu bầu được mã hóa được hình thành chính xác theo sơ đồ mã hóa.
  • Tuân thủ giao thức: Lựa chọn của cử tri phải tuân thủ theo các quy tắc giao thức bỏ phiếu do người tổ chức đặt ra.
  • Nullifier và Commitment chính xác: Nullifier và Commitment được tính toán chính xác bằng cách sử dụng mật và địa chỉ của cử tri.
  • Kiến thức về bí mật: Người bỏ phiếu biết bí mật s s và số vô hướng ngẫu nhiên k k được sử dụng trong mã hóa.

Chữ ký : Người bỏ phiếu ký các thành phần cần thiết của phiếu bầu bằng khóa riêng của họ được liên kết với địa chỉ của họ. Điều này xác thực phiếu bầu và ràng buộc nó với danh tính của người bỏ phiếu theo cách có thể xác minh được. Nhiều chương trình chữ ký có thể được hỗ trợ (ECDSA, EdDSA, RSA, v.v.).

Chuyển đổi trạng thái

State Merkle Tree là một cấu trúc dữ liệu mật mã cho phép xác minh dữ liệu chứa trong đó một cách hiệu quả và an toàn. Cây được cấu trúc để lưu trữ nhiều loại thông tin khác nhau tại các chỉ mục hoặc địa chỉ được xác định trước:

  • Tham số quy trình : Được lưu trữ tại các chỉ mục tĩnh, chứa thông tin cần thiết như \text{ProcessId} ProcessId , gốc của cây điều tra dân số Merkle ( \text{censusRoot} censusRoot ), cấu hình giao thức bỏ phiếu và khóa mã hóa công khai H H được tạo thông qua giao thức DKG.
  • Bộ tích lũy kết quả : Có hai bộ tích lũy được duy trì để xử lý việc thêm và bớt phiếu bầu:
    • Bộ tích lũy cộng ( C_{\text{add}} C add ): Lưu trữ các phiếu bầu được mã hóa tổng hợp đồng dạng đã được thêm vào tổng số.
    • Bộ tích lũy trừ ( C_{\text{sub}} C sub ): Lưu trữ các phiếu bầu được mã hóa tổng hợp đồng dạng đã bị trừ do ghi đè phiếu bầu.
  • Nullifier : Được lưu trữ để ngăn chặn việc bỏ phiếu hai lần. Mỗi nullifier N N được liên kết với cam kết của cử tri và là duy nhất đối với cử tri đó trong quá trình bỏ phiếu cụ thể.
  • Cam kết : Được lưu trữ để theo dõi sự tham gia của cử tri và tạo điều kiện ghi đè phiếu bầu.

Trình sắp xếp có trách nhiệm xử lý các phiếu bầu mới và cập nhật trạng thái được chia sẻ. Mỗi lần chuyển đổi trạng thái bao gồm các bước sau:

  1. Thu thập phiếu bầu theo đợt : Bộ sắp xếp thu thập một đợt tối đa N N phiếu bầu mới từ cử tri. Việc sắp xếp phiếu bầu theo đợt giúp tăng hiệu quả và khả năng mở rộng, cho phép bộ sắp xếp xử lý nhiều phiếu bầu cùng lúc. Giá trị của N N được xác định bởi các tham số hệ thống cân bằng các ràng buộc tính toán và thông lượng mạng.

  2. Xác minh phiếu bầu : Đối với mỗi phiếu bầu trong đợt, máy sắp xếp thực hiện:

    • Xác minh bằng chứng zkSNARK : Đảm bảo rằng bằng chứng không kiến thức được gửi kèm với mỗi phiếu bầu là hợp lệ và phiếu bầu tuân thủ các quy tắc của giao thức, bao gồm mã hóa chính xác, tuân thủ các ràng buộc của giao thức bỏ phiếu và tính toán chính xác của lệnh vô hiệu hóa và cam kết.
    • Kiểm tra tư cách : Xác minh tư cách của cử tri bằng cách đối chiếu bằng chứng Merkle điều tra dân số được cung cấp với \text{censusRoot} censusRoot đã lưu trữ trong tiểu bang.
    • Phòng ngừa bỏ phiếu kép : Kiểm tra xem bộ hủy bỏ N N đã tồn tại trong trạng thái hay chưa. Nếu không, phiếu bầu được xử lý như một phiếu bầu mới. Nếu có, phiếu bầu được coi là phiếu bầu ghi đè .
  3. Xử lý việc ghi đè phiếu bầu : Nếu người bỏ phiếu gửi một phiếu bầu mới với cùng một lệnh hủy bỏ N N , trình sắp xếp:

    • Trừ phiếu bầu được mã hóa trước đó khỏi bộ tích lũy trừ C_{\text{sub}} C sub .
    • Thêm phiếu bầu được mã hóa mới vào bộ tích lũy bổ sung C_{\text{add}} C add .
    • Thay thế lá phiếu mã hóa mới trong Tiểu bang.
  4. Mã hóa lại ngẫu nhiên : Để tăng cường khả năng không cần biên lai và ngăn chặn sự liên kết giữa phiếu bầu và cử tri, máy sắp xếp thực hiện mã hóa lại ngẫu nhiên các lá phiếu đã mã hóa hiện có:

    • Chọn một tập hợp con ngẫu nhiên các lá phiếu được mã hóa trong tiểu bang.
    • Mã hóa lại mỗi lá phiếu đã chọn bằng cách thêm mã hóa bằng không, sử dụng số vô hướng ngẫu nhiên mới.
    • Cập nhật các lá phiếu được mã hóa trong tiểu bang bằng phiên bản được mã hóa lại.
  5. Tổng hợp đồng dạng của các phiếu bầu : Bộ sắp xếp cập nhật các bộ tích lũy bằng cách sử dụng các thuộc tính đồng dạng của mã hóa ElGamal:

  6. Tạo ra quá trình chuyển đổi trạng thái zkSNARK : Bộ sắp xếp tạo ra bằng chứng zkSNARK chứng thực tính hợp lệ của quá trình chuyển đổi trạng thái từ gốc \text{Root1} Root1 trước đó sang gốc mới \text{Root2} Root2 . Bằng chứng zkSNARK xác minh tất cả các ràng buộc và hoạt động trước đó.

  7. Gửi trên chuỗi : Trình sắp xếp gửi:, trạng thái gốc đã cập nhật \text{Root2} Root2 . Bằng chứng xác nhận tính hợp lệ của quá trình chuyển đổi trạng thái. Cam kết băm cho blob dữ liệu chứa các phiếu bầu và cập nhật trạng thái, đảm bảo tính khả dụng của dữ liệu.

Mã thông báo Vocdoni (VOC)

Vocdoni giới thiệu một token mới (VOC) để thống nhất các ưu đãi giữa những người tham gia và đảm bảo tính bền vững của hệ sinh thái bỏ phiếu phi tập trung. Token này phục vụ nhiều chức năng thiết yếu: nó khuyến khích các trình tự, tạo điều kiện thanh toán cho các quy trình bỏ phiếu và cho phép quản trị phi tập trung.

Người sắp xếp phải đặt cược token làm tài sản thế chấp để tham gia vào mạng lưới, thúc đẩy hành vi trung thực và bảo mật mạng lưới. Họ kiếm được phần thưởng bằng token VOC dựa trên những đóng góp của họ trong việc xử lý các phiếu bầu hợp lệ và duy trì tính toàn vẹn của mạng lưới.

Người tổ chức sử dụng token để thanh toán cho việc tạo và quản lý quy trình bỏ phiếu. Chi phí phụ thuộc vào các yếu tố như số lượng phiếu bầu tối đa ( \text{maxVotes} maxVotes ), thời lượng bỏ phiếu ( \text{processDuration} processDuration ) và mức độ bảo mật mong muốn, liên quan đến số lượng trình tự tham gia.

Tổng chi phí cho một quá trình bỏ phiếu được tính theo công thức:

\text{totalCost} = \text{baseCost} + \text{capacityCost} + \text{durationCost} + \text{securityCost} totalCost = baseCost + capacityCost + durationCost + securityCost

Các thành phần của chi phí:

  • Chi phí cơ bản: \text{baseCost} = \text{fixedCost} + \text{maxVotes} \cdot p baseCost = fixedCost + maxVotes p , trong đó \text{fixedCost} fixedCost là một khoản phí cố định và p p là một hệ số tuyến tính nhỏ.

  • Chi phí công suất: \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 , trong đó k_1 k 1 là hệ số tỷ lệ, a a kiểm soát tính phi tuyến tính và \epsilon ϵ là một số nhỏ để ngăn phép chia cho số không.

  • Chi phí thời lượng: \text{durationCost} = k_2 \cdot \text{processDuration}^b durationCost = k 2 processDuration b , với k_2 k 2 là hệ số tỷ lệ và b b kiểm soát tỷ lệ dựa trên thời lượng.

  • Chi phí bảo mật: \text{securityCost} = k_3 \cdot e^{c \left( \frac{\text{numSequencers}}{\text{totalSequencers}} \right)^d} securityCost = k 3 e c ( numSequencers totalSequencers ) d , trong đó k_3 k 3 là hệ số tỷ lệ, và c c , d d kiểm soát tỷ lệ theo cấp số nhân liên quan đến số bộ sắp xếp được sử dụng.


Trình sắp xếp kiếm được phần thưởng dựa trên số phiếu bầu được xử lý và số phiếu bầu được viết lại (bao gồm cả mã hóa lại để không có biên lai). Tổng phần thưởng cho trình sắp xếp i i được tính như sau:

\text{sequencerReward}_i = R \left( \frac{\text{votes}_i}{\text{maxVotes}} \right) + W \left( \frac{\text{voteRewrites}_i}{\text{totalRewrites}} \right) sequencerReward i = R ( votes i maxVotes ) + W ( voteRewrites TotalRewrites )

Điều này tuân theo các ràng buộc sau:

\frac{\text{voteRewrites}_i}{\text{votes}_i} \leq T voteRewrites i vote i TR > W R > W

Đảm bảo rằng trình tự ưu tiên xử lý phiếu bầu mới hơn là viết lại. Ở đây, R RW W là các phần của nhóm phần thưởng được phân bổ cho việc xử lý phiếu bầu và viết lại phiếu bầu, tương ứng, và T T là hằng số được xác định trước giới hạn số lần viết lại cho mỗi phiếu bầu.

Những người giải trình tự không thực hiện được nghĩa vụ của mình có thể bị cắt giảm tài sản thế chấp, được tính như sau:

\text{SlashedAmount}_i = s \cdot \text{StakedCollateral}_i SlashedAmount i = s StakedCollateral i

trong đó s s là hệ số cắt ( 0 \leq s \leq 1 0 s 1 ).

Tài nguyên

Nguồn
Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
Thích
Thêm vào Yêu thích
Bình luận