mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
correct block model
This commit is contained in:
parent
9006e77296
commit
b69a897b26
@ -493,9 +493,8 @@ class Bigchain(object):
|
||||
Tallies the votes on a block, and returns the status: valid, invalid, or undecided
|
||||
"""
|
||||
n_voters = len(block['block']['voters'])
|
||||
|
||||
vote_cast = [vote['vote']['is_block_valid'] for vote in block['block']['votes']]
|
||||
vote_validity = [self.consensus.verify_vote_signature(block, vote) for vote in block['block']['votes']]
|
||||
vote_cast = [vote['vote']['is_block_valid'] for vote in block['votes']]
|
||||
vote_validity = [self.consensus.verify_vote_signature(block, vote) for vote in block['votes']]
|
||||
|
||||
# element-wise product of stated vote and validity of vote
|
||||
vote_list = list(map(operator.mul, vote_cast, vote_validity))
|
||||
|
@ -326,43 +326,43 @@ class TestBlockElection(object):
|
||||
for vote in improperly_signed_valid_vote]
|
||||
|
||||
# test unanimously valid block
|
||||
test_block['block']['votes'] = valid_vote
|
||||
test_block['votes'] = valid_vote
|
||||
assert b.block_election_status(test_block) == 'valid'
|
||||
|
||||
# test partial quorum situations
|
||||
test_block['block']['votes'] = valid_vote[:2]
|
||||
test_block['votes'] = valid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'undecided'
|
||||
#
|
||||
test_block['block']['votes'] = valid_vote[:3]
|
||||
test_block['votes'] = valid_vote[:3]
|
||||
assert b.block_election_status(test_block) == 'valid'
|
||||
#
|
||||
test_block['block']['votes'] = invalid_vote[:2]
|
||||
test_block['votes'] = invalid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'invalid'
|
||||
|
||||
# test unanimously valid block with one improperly signed vote -- should still succeed
|
||||
test_block['block']['votes'] = valid_vote[:3] + improperly_signed_valid_vote[:1]
|
||||
test_block['votes'] = valid_vote[:3] + improperly_signed_valid_vote[:1]
|
||||
assert b.block_election_status(test_block) == 'valid'
|
||||
|
||||
# test unanimously valid block with two improperly signed votes -- should fail
|
||||
test_block['block']['votes'] = valid_vote[:2] + improperly_signed_valid_vote[:2]
|
||||
test_block['votes'] = valid_vote[:2] + improperly_signed_valid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'invalid'
|
||||
|
||||
# test block with minority invalid vote
|
||||
test_block['block']['votes'] = invalid_vote[:1] + valid_vote[:3]
|
||||
test_block['votes'] = invalid_vote[:1] + valid_vote[:3]
|
||||
assert b.block_election_status(test_block) == 'valid'
|
||||
|
||||
# test split vote
|
||||
test_block['block']['votes'] = invalid_vote[:2] + valid_vote[:2]
|
||||
test_block['votes'] = invalid_vote[:2] + valid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'invalid'
|
||||
|
||||
# test undecided
|
||||
test_block['block']['votes'] = valid_vote[:2]
|
||||
test_block['votes'] = valid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'undecided'
|
||||
|
||||
# change signatures in block, should fail
|
||||
test_block['block']['voters'][0] = 'abc'
|
||||
test_block['block']['voters'][1] = 'abc'
|
||||
test_block['block']['votes'] = valid_vote
|
||||
test_block['votes'] = valid_vote
|
||||
assert b.block_election_status(test_block) == 'invalid'
|
||||
|
||||
def test_quorum_odd(self, b):
|
||||
@ -386,16 +386,16 @@ class TestBlockElection(object):
|
||||
invalid_vote = [member.vote(test_block, 'abc', False)
|
||||
for member in test_federation]
|
||||
|
||||
test_block['block']['votes'] = valid_vote[:2]
|
||||
test_block['votes'] = valid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'undecided'
|
||||
|
||||
test_block['block']['votes'] = invalid_vote[:2]
|
||||
test_block['votes'] = invalid_vote[:2]
|
||||
assert b.block_election_status(test_block) == 'undecided'
|
||||
|
||||
test_block['block']['votes'] = valid_vote[:3]
|
||||
test_block['votes'] = valid_vote[:3]
|
||||
assert b.block_election_status(test_block) == 'valid'
|
||||
|
||||
test_block['block']['votes'] = invalid_vote[:3]
|
||||
test_block['votes'] = invalid_vote[:3]
|
||||
assert b.block_election_status(test_block) == 'invalid'
|
||||
|
||||
def test_tx_rewritten_after_invalid(self, b, user_vk):
|
||||
@ -425,11 +425,11 @@ class TestBlockElection(object):
|
||||
[member.vote(test_block_2, 'abc', False) for member in test_federation[2:]]
|
||||
|
||||
# construct valid block
|
||||
test_block_1['block']['votes'] = vote_1
|
||||
test_block_1['votes'] = vote_1
|
||||
q_block_new_vote.put(test_block_1)
|
||||
|
||||
# construct invalid block
|
||||
test_block_2['block']['votes'] = vote_2
|
||||
test_block_2['votes'] = vote_2
|
||||
q_block_new_vote.put(test_block_2)
|
||||
|
||||
election = Election(q_block_new_vote)
|
||||
|
Loading…
x
Reference in New Issue
Block a user