Add ThresholdCondition support
This commit is contained in:
parent
9a2b6a0550
commit
d51edeece4
|
@ -58,15 +58,40 @@ def test_invalid_fulfillment_initialization(cc_ffill, user_vk):
|
|||
Fulfillment(cc_ffill, user_vk)
|
||||
|
||||
|
||||
def test_gen_default_fulfillment(user_vk):
|
||||
def test_gen_default_fulfillment_with_single_owner_after(user_vk):
|
||||
from bigchaindb.transaction import Fulfillment
|
||||
from cryptoconditions import Ed25519Fulfillment
|
||||
|
||||
ffill = Fulfillment.gen_default(user_vk)
|
||||
ffill = Fulfillment.gen_default([user_vk])
|
||||
assert ffill.owners_before == [user_vk]
|
||||
assert ffill.fid == 0
|
||||
assert ffill.fulfillment.to_dict() == Ed25519Fulfillment(public_key=user_vk).to_dict()
|
||||
assert ffill.tx_input is None
|
||||
assert ffill.fulfillment.to_dict() == Ed25519Fulfillment(public_key=user_vk).to_dict()
|
||||
|
||||
|
||||
def test_gen_default_fulfillment_with_multiple_owners_after(user_vks):
|
||||
from bigchaindb.transaction import Fulfillment
|
||||
from cryptoconditions import Ed25519Fulfillment, ThresholdSha256Fulfillment
|
||||
|
||||
ffill = Fulfillment.gen_default(user_vks)
|
||||
expected_ffill = ThresholdSha256Fulfillment(threshold=len(user_vks))
|
||||
# NOTE: Does it make sense to have the exact same logic as in the tested method here?
|
||||
for user_vk in user_vks:
|
||||
expected_ffill.add_subfulfillment(Ed25519Fulfillment(public_key=user_vk))
|
||||
|
||||
assert ffill.owners_before == user_vks
|
||||
assert ffill.fid == 0
|
||||
assert ffill.tx_input is None
|
||||
assert ffill.fulfillment.to_dict() == expected_ffill.to_dict()
|
||||
|
||||
|
||||
def test_invalid_gen_default_arguments():
|
||||
from bigchaindb.transaction import Fulfillment
|
||||
|
||||
with raises(TypeError):
|
||||
Fulfillment.gen_default({})
|
||||
with raises(NotImplementedError):
|
||||
Fulfillment.gen_default([])
|
||||
|
||||
|
||||
def test_condition_serialization(cond_uri, user_vk):
|
||||
|
@ -132,7 +157,7 @@ def test_data_deserialization(payload, payload_id):
|
|||
assert data.to_dict() == expected.to_dict()
|
||||
|
||||
|
||||
def test_transaction_serialization(default_ffill, default_cond):
|
||||
def test_transaction_serialization(default_single_ffill, default_single_cond):
|
||||
from bigchaindb.transaction import Transaction
|
||||
|
||||
tx_id = 'l0l'
|
||||
|
@ -143,36 +168,36 @@ def test_transaction_serialization(default_ffill, default_cond):
|
|||
'version': Transaction.VERSION,
|
||||
'transaction': {
|
||||
# NOTE: This test assumes that Fulfillments and Conditions can successfully be serialized
|
||||
'fulfillments': [default_ffill.to_dict()],
|
||||
'conditions': [default_cond.to_dict()],
|
||||
'fulfillments': [default_single_ffill.to_dict()],
|
||||
'conditions': [default_single_cond.to_dict()],
|
||||
'operation': Transaction.CREATE,
|
||||
'timestamp': timestamp,
|
||||
'data': None,
|
||||
}
|
||||
}
|
||||
|
||||
tx_dict = Transaction(Transaction.CREATE, [default_ffill], [default_cond]).to_dict()
|
||||
tx_dict = Transaction(Transaction.CREATE, [default_single_ffill], [default_single_cond]).to_dict()
|
||||
tx_dict['id'] = tx_id
|
||||
tx_dict['transaction']['timestamp'] = timestamp
|
||||
|
||||
assert tx_dict == expected
|
||||
|
||||
|
||||
def test_transaction_deserialization(default_ffill, default_cond):
|
||||
def test_transaction_deserialization(default_single_ffill, default_single_cond):
|
||||
from bigchaindb.transaction import Transaction
|
||||
|
||||
tx_id = 'l0l'
|
||||
timestamp = '66666666666'
|
||||
|
||||
expected = Transaction(Transaction.CREATE, [default_ffill], [default_cond], None, timestamp, Transaction.VERSION)
|
||||
expected = Transaction(Transaction.CREATE, [default_single_ffill], [default_single_cond], None, timestamp, Transaction.VERSION)
|
||||
|
||||
tx = {
|
||||
'id': tx_id,
|
||||
'version': Transaction.VERSION,
|
||||
'transaction': {
|
||||
# NOTE: This test assumes that Fulfillments and Conditions can successfully be serialized
|
||||
'fulfillments': [default_ffill.to_dict()],
|
||||
'conditions': [default_cond.to_dict()],
|
||||
'fulfillments': [default_single_ffill.to_dict()],
|
||||
'conditions': [default_single_cond.to_dict()],
|
||||
'operation': Transaction.CREATE,
|
||||
'timestamp': timestamp,
|
||||
'data': None,
|
||||
|
@ -195,19 +220,34 @@ def test_invalid_tx_initialization():
|
|||
Transaction(Transaction.CREATE, [], [], wrong_data_type)
|
||||
with raises(TypeError):
|
||||
Transaction('RANSFER', [], [])
|
||||
with raises(TypeError):
|
||||
Transaction('TRANSFER', [], [])
|
||||
|
||||
|
||||
def test_validate_tx_signature(default_ffill, default_cond, user_vk, user_sk):
|
||||
def test_validate_tx_simple_signature(default_single_ffill, default_single_cond, user_vk, user_sk):
|
||||
from copy import deepcopy
|
||||
from bigchaindb.transaction import Transaction
|
||||
|
||||
from bigchaindb.crypto import SigningKey
|
||||
from bigchaindb.transaction import Transaction
|
||||
|
||||
tx = Transaction(Transaction.CREATE, [default_ffill], [default_cond])
|
||||
expected = deepcopy(default_ffill)
|
||||
tx = Transaction(Transaction.CREATE, [default_single_ffill], [default_single_cond])
|
||||
expected = deepcopy(default_single_ffill)
|
||||
expected.fulfillment.sign(str(tx), SigningKey(user_sk))
|
||||
|
||||
tx.sign([user_sk])
|
||||
|
||||
assert tx.fulfillments[0].fulfillment.to_dict()['signature'] == expected.fulfillment.to_dict()['signature']
|
||||
assert tx.fulfillments_valid() is True
|
||||
|
||||
|
||||
def test_validate_tx_threshold_signature(default_threshold_ffill, default_threshold_cond, user_vks, user_sks):
|
||||
from copy import deepcopy
|
||||
|
||||
from bigchaindb.crypto import SigningKey
|
||||
from bigchaindb.transaction import Transaction
|
||||
|
||||
tx = Transaction(Transaction.CREATE, [default_threshold_ffill], [default_threshold_cond])
|
||||
expected = deepcopy(default_threshold_ffill)
|
||||
expected.fulfillment.subconditions[0]['body'].sign(str(tx), SigningKey(user_sks[0]))
|
||||
expected.fulfillment.subconditions[1]['body'].sign(str(tx), SigningKey(user_sks[1]))
|
||||
tx.sign(user_sks)
|
||||
|
||||
assert tx.fulfillments[0].to_dict()['fulfillment'] == expected.to_dict()['fulfillment']
|
||||
assert tx.fulfillments_valid() is True
|
||||
|
|
Loading…
Reference in New Issue