def test_generate_conditions_single_owner_with_condition(user_pub): from bigchaindb_common.transaction import Condition from cryptoconditions import Ed25519Fulfillment expected = Ed25519Fulfillment(public_key=user_pub) cond = Condition.generate([expected]) assert cond.fulfillment.to_dict() == expected.to_dict()
def test_generate_conditions_invalid_parameters(user_pub, user2_pub, user3_pub): from bigchaindb_common.transaction import Condition with raises(ValueError): Condition.generate([]) with raises(TypeError): Condition.generate('not a list') with raises(ValueError): Condition.generate([[user_pub, [user2_pub, [user3_pub]]]]) with raises(ValueError): Condition.generate([[user_pub]])
def test_generate_conditions_flat_ownage(user_pub, user2_pub, user3_pub): from bigchaindb_common.transaction import Condition from cryptoconditions import Ed25519Fulfillment, ThresholdSha256Fulfillment expected_simple1 = Ed25519Fulfillment(public_key=user_pub) expected_simple2 = Ed25519Fulfillment(public_key=user2_pub) expected_simple3 = Ed25519Fulfillment(public_key=user3_pub) expected = ThresholdSha256Fulfillment(threshold=3) expected.add_subfulfillment(expected_simple1) expected.add_subfulfillment(expected_simple2) expected.add_subfulfillment(expected_simple3) cond = Condition.generate([user_pub, user2_pub, expected_simple3]) assert cond.fulfillment.to_dict() == expected.to_dict()
def test_generate_conditions_split_half_single_owner(user_pub, user2_pub, user3_pub): from bigchaindb_common.transaction import Condition from cryptoconditions import Ed25519Fulfillment, ThresholdSha256Fulfillment expected_simple1 = Ed25519Fulfillment(public_key=user_pub) expected_simple2 = Ed25519Fulfillment(public_key=user2_pub) expected_simple3 = Ed25519Fulfillment(public_key=user3_pub) expected = ThresholdSha256Fulfillment(threshold=2) expected_threshold = ThresholdSha256Fulfillment(threshold=2) expected_threshold.add_subfulfillment(expected_simple2) expected_threshold.add_subfulfillment(expected_simple3) expected.add_subfulfillment(expected_threshold) expected.add_subfulfillment(expected_simple1) cond = Condition.generate([[expected_simple2, user3_pub], user_pub]) assert cond.fulfillment.to_dict() == expected.to_dict()
def test_generate_conditions_split_half_recursive_custom_threshold(user_pub, user2_pub, user3_pub): from bigchaindb_common.transaction import Condition from cryptoconditions import Ed25519Fulfillment, ThresholdSha256Fulfillment expected_simple1 = Ed25519Fulfillment(public_key=user_pub) expected_simple2 = Ed25519Fulfillment(public_key=user2_pub) expected_simple3 = Ed25519Fulfillment(public_key=user3_pub) expected = ThresholdSha256Fulfillment(threshold=1) expected.add_subfulfillment(expected_simple1) expected_threshold = ThresholdSha256Fulfillment(threshold=1) expected_threshold.add_subfulfillment(expected_simple2) expected_threshold.add_subfulfillment(expected_simple3) expected.add_subfulfillment(expected_threshold) cond = Condition.generate(([user_pub, ([user2_pub, expected_simple3], 1)], 1)) assert cond.fulfillment.to_dict() == expected.to_dict()
def test_generate_threshold_condition_with_hashlock(user_pub, user2_pub, user3_pub): from bigchaindb_common.transaction import Condition from cryptoconditions import (PreimageSha256Fulfillment, Ed25519Fulfillment, ThresholdSha256Fulfillment) secret = b'much secret, wow' hashlock = PreimageSha256Fulfillment(preimage=secret) expected_simple1 = Ed25519Fulfillment(public_key=user_pub) expected_simple3 = Ed25519Fulfillment(public_key=user3_pub) expected = ThresholdSha256Fulfillment(threshold=2) expected_sub = ThresholdSha256Fulfillment(threshold=2) expected_sub.add_subfulfillment(expected_simple1) expected_sub.add_subfulfillment(hashlock) expected.add_subfulfillment(expected_simple3) cond = Condition.generate([[user_pub, hashlock], expected_simple3]) assert cond.fulfillment.to_dict() == expected.to_dict()