correct block model

This commit is contained in:
ryan 2016-05-04 18:22:38 +02:00
parent 9006e77296
commit b69a897b26
2 changed files with 18 additions and 19 deletions

View File

@ -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))

View File

@ -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)