mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
from tinysmpc import VirtualMachine, PrivateScalar, SharedScalar
|
|
|
|
# Generating generals
|
|
general0 = VirtualMachine('general0')
|
|
general1 = VirtualMachine('general1')
|
|
general2 = VirtualMachine('general2')
|
|
general3 = VirtualMachine('general3')
|
|
|
|
# Using a simple number to represent the block for testing purposes
|
|
print('General 0 is the leader and shares block 42...')
|
|
block = PrivateScalar(42, general0)
|
|
shared_block = block.share([general0, general1, general2, general3])
|
|
print(general0)
|
|
print(general1)
|
|
print(general2)
|
|
print(general3)
|
|
print()
|
|
|
|
# 1 Stands for vote for, 0 for vote against
|
|
print('Generals vote on the block...')
|
|
general0_vote = PrivateScalar(1, general0)
|
|
general1_vote = PrivateScalar(1, general1)
|
|
general2_vote = PrivateScalar(1, general2)
|
|
general3_vote = PrivateScalar(0, general3)
|
|
shared_general0_vote = general0_vote.share([general0, general1, general2, general3])
|
|
shared_general1_vote = general1_vote.share([general0, general1, general2, general3])
|
|
shared_general2_vote = general2_vote.share([general0, general1, general2, general3])
|
|
shared_general3_vote = general3_vote.share([general0, general1, general2, general3])
|
|
print(general0)
|
|
print(general1)
|
|
print(general2)
|
|
print(general3)
|
|
print()
|
|
|
|
# Each general sums votes to notarize block if votes exceed 2n/3
|
|
print('Generals check votes...')
|
|
votes_thresshold = (2*4)/3
|
|
generals_votes_sum = shared_general0_vote + shared_general1_vote + shared_general2_vote + shared_general3_vote
|
|
|
|
general0_votes_sum = generals_votes_sum.reconstruct(general0)
|
|
print('General 0 votes sum: {0}'.format(general0_votes_sum.value))
|
|
if (general0_votes_sum.value > votes_thresshold):
|
|
print('General 0 will notarize block')
|
|
else:
|
|
print('General 0 will not notarize block')
|
|
|
|
general1_votes_sum = generals_votes_sum.reconstruct(general1)
|
|
print('General 1 votes sum: {0}'.format(general1_votes_sum.value))
|
|
if (general1_votes_sum.value > votes_thresshold):
|
|
print('General 1 will notarize block')
|
|
else:
|
|
print('General 1 will not notarize block')
|
|
|
|
general2_votes_sum = generals_votes_sum.reconstruct(general2)
|
|
print('General 2 votes sum: {0}'.format(general2_votes_sum.value))
|
|
if (general2_votes_sum.value > votes_thresshold):
|
|
print('General 2 will notarize block')
|
|
else:
|
|
print('General 2 will not notarize block')
|
|
|
|
general3_votes_sum = generals_votes_sum.reconstruct(general3)
|
|
print('General 3 votes sum: {0}'.format(general3_votes_sum.value))
|
|
if (general3_votes_sum.value > votes_thresshold):
|
|
print('General 3 will notarize block')
|
|
else:
|
|
print('General 3 will not notarize block')
|