Leo dili ile Oylama Uygulaması
Özet
vote.leo genel bir oylama programıdır.
Herkes yeni öneriler sunabilir, önerenler seçmene biletler çıkarabilir ve seçmenler kimliklerini ortaya çıkarmadan oy kullanabilir.
Bu örnek, Aleo topluluğu tarafından yazılan aleo-vote örneğinden ilham alınarak oluşturulmuştur.
Dikkat Çeken Özellikler
Seçmen kimliği, bir seçmenin oy pusulasını bir işleve özel olarak geçirerek gizlenir. Öneri bilgileri ve oy sonuçları, Leo’daki genel eşleme veri türünü kullanarak açıklanır.
Nasıl Çalıştırılır
Leo Kurulum Talimatlarını Takip Edin.
Bu oy programı, aşağıdaki bash betiği kullanılarak çalıştırılabilir. Yerel olarak, öneriler oluşturmak, biletler oluşturmak ve oy vermek için Leo program fonksiyonlarını çalıştıracaktır.
cd vote
./run.sh
.env dosyası özel anahtar ve adres içerir. Bu hesap, işlemleri imzalamak için kullanılacak ve kayıt sahipliği için kontrol edilecektir. Programları farklı taraflar olarak yürütürken, .env dosyasındaki private_key alanını uygun değere ayarladığınızdan emin olun. Farklı taraflar olarak programı nasıl çalıştıracağınızın tam bir örneği için ./run.sh dosyasına bakabilirsiniz.
Fonksiyonlar
Öner
Herkes, propose fonksiyonunu çağırarak açıkça yeni bir öneri sunabilir.
Bilet Oluştur
Önerenler, önerilen öneriler için yeni biletler oluşturabilirler.
Bilet, sahibi ve pid ile bir kayıttır, belirli bir öneri — pid için oy kullanmak için kullanılabilir ve yalnızca bilet sahibi tarafından kullanılabilir (oy verilebilir).
Oy Ver
Bir bilet sahibi, bilet kaydını belirli bir öneri — pid için “katılıyorum / katılmıyorum” oyu vermek için kullanabilir. Bilet kaydı özel olarak bir giriş olarak kullanılabildiğinden, oy verenin gizliliği korunur.
Bir Öneri Oluştur
Üç farklı tarafın rolünü oynayacağız.
The private key and address of the proposer.
private_key: APrivateKey1zkp8wKHF9zFX1j4YJrK3JhxtyKDmPbRu9LrnEW8Ki56UQ3G
address: aleo1rfez44epy0m7nv4pskvjy6vex64tnt0xy90fyhrg49cwe0t9ws8sh6nhhr
The private key and address of voter 1.
private_key: APrivateKey1zkpHmSu9zuhyuCJqVfQE8p82HXpCTLVa8Z2HUNaiy9mrug2
address: aleo1c45etea8czkyscyqawxs7auqjz08daaagp2zq4qjydkhxt997q9s77rsp2
The private key and address of voter 2.
private_key: APrivateKey1zkp6NHwbT7PkpnEFeBidz5ZkZ14W8WXZmJ6kjKbEHYdMmf2
address: aleo1uc6jphye8y9gfqtezrz240ak963sdgugd7s96qpuw6k7jz9axs8q2qnhxc
Yeni bir oy pusulası önerelim. Önerenin rolünü üstlenelim ve propose geçiş fonksiyonunu çalıştıralım. Gerekli bilgileri propose fonksiyonuna giriş olarak sağladık.
echo "
NETWORK=testnet3
PRIVATE_KEY=APrivateKey1zkp8wKHF9zFX1j4YJrK3JhxtyKDmPbRu9LrnEW8Ki56UQ3G
" > .env
leo run propose "{
title: 2077160157502449938194577302446444field,
content: 1452374294790018907888397545906607852827800436field,
proposer: aleo1rfez44epy0m7nv4pskvjy6vex64tnt0xy90fyhrg49cwe0t9ws8sh6nhhr
}"
Görüleceği üzere çıktı, öneri bilgilerini içeren yeni bir kayıt oluşturur ve öneri kimliğini bir argüman girişi olarak alan bir genel eşleme ayarlar. Bu genel eşleme, zincirde sorgulanabilir olacaktır.
Seçmen 1 oy kullanıyor
Oy kullanmak için yeni özel bir bilet oluşturalım. Seçmen 1'in rolünü üstlenelim ve yeni_ticket geçiş fonksiyonunu çalıştıralım. Girişler, benzersiz bir bilet kimliği ve seçmenin genel adresini alır.
echo "
NETWORK=testnet3
PRIVATE_KEY=APrivateKey1zkpHmSu9zuhyuCJqVfQE8p82HXpCTLVa8Z2HUNaiy9mrug2
" > .env
leo run new_ticket 2264670486490520844857553240576860973319410481267184439818180411609250173817field aleo1c45etea8czkyscyqawxs7auqjz08daaagp2zq4qjydkhxt997q9s77rsp2
Yeni sahibi olan özel bir bilet oluşturulduğunu ve bu biletin kimliğini takip etmek için oylama programında genel bir eşlemenin olduğunu göreceksiniz.
Seçmen 1 artık biletinde özel olarak oy kullanabilir. Seçmenin bilet çıktısını giriş olarak alan katılıyorum veya katılmıyorum geçiş fonksiyonunu çağırın.
leo run agree "{
owner: aleo1c45etea8czkyscyqawxs7auqjz08daaagp2zq4qjydkhxt997q9s77rsp2.private,
pid: 2264670486490520844857553240576860973319410481267184439818180411609250173817field.private,
_nonce: 1738483341280375163846743812193292672860569105378494043894154684192972730518group.public
}"
Seçmen 2 oy kullanıyor Seçmen 2 için yeni özel bir bilet oluşturalım. Seçmen 1'in rolünü üstlenelim ve yeni_ticket geçiş fonksiyonunu çalıştıralım. Girişler, benzersiz bir bilet kimliği ve seçmenin genel adresini alır.
echo "
NETWORK=testnet3
PRIVATE_KEY=APrivateKey1zkp6NHwbT7PkpnEFeBidz5ZkZ14W8WXZmJ6kjKbEHYdMmf2
" > .env
leo run new_ticket 2158670485494560943857353240576760973319410481267184429818180411607250143681field aleo1uc6jphye8y9gfqtezrz240ak963sdgugd7s96qpuw6k7jz9axs8q2qnhxc
Şimdi Seçmen 2, biletinde özel olarak oy kullanabilir. Katılıyorum veya katılmıyorum geçiş fonksiyonunu çağırın, bu geçiş işlevi seçmenin bilet çıktısını giriş olarak alır.
leo run disagree "{
owner: aleo1uc6jphye8y9gfqtezrz240ak963sdgugd7s96qpuw6k7jz9axs8q2qnhxc.private,
pid: 2158670485494560943857353240576760973319410481267184429818180411607250143681field.private,
_nonce: 6511154004161574129036815174288926693337549214513234790975047364416273541105group.public
}"
Oylar nasıl sayılır?
Oylar bilet üzerinde özeldir. Ancak, anlaşmaların ve anlaşmazlıkların toplamı, genel eşlemede zincir üzerinde gösterilir. Bu verilere zincir üzerinde sorgu yapabilirsiniz.