mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Add Asset into work-flow-functions
This commit is contained in:
parent
34e7afbdf5
commit
01337eb922
@ -284,8 +284,38 @@ def test_generate_conditions_invalid_parameters(user_pub, user2_pub,
|
|||||||
Condition.generate([[user_pub]])
|
Condition.generate([[user_pub]])
|
||||||
|
|
||||||
|
|
||||||
def test_transaction_serialization(user_ffill, user_cond):
|
def test_invalid_transaction_initialization():
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
|
with raises(TypeError):
|
||||||
|
Transaction(operation='invalid operation')
|
||||||
|
with raises(TypeError):
|
||||||
|
Transaction(operation='CREATE', asset='invalid asset')
|
||||||
|
with raises(TypeError):
|
||||||
|
Transaction(
|
||||||
|
operation='CREATE',
|
||||||
|
asset=Asset(),
|
||||||
|
conditions='invalid conditions'
|
||||||
|
)
|
||||||
|
with raises(TypeError):
|
||||||
|
Transaction(
|
||||||
|
operation='CREATE',
|
||||||
|
asset=Asset(),
|
||||||
|
conditions=[],
|
||||||
|
fulfillments='invalid fulfillments'
|
||||||
|
)
|
||||||
|
with raises(TypeError):
|
||||||
|
Transaction(
|
||||||
|
operation='CREATE',
|
||||||
|
asset=Asset(),
|
||||||
|
conditions=[],
|
||||||
|
fulfillments=[],
|
||||||
|
metadata='invalid metadata'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_transaction_serialization(user_ffill, user_cond, data, data_id):
|
||||||
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx_id = 'l0l'
|
tx_id = 'l0l'
|
||||||
timestamp = '66666666666'
|
timestamp = '66666666666'
|
||||||
@ -301,24 +331,34 @@ def test_transaction_serialization(user_ffill, user_cond):
|
|||||||
'operation': Transaction.CREATE,
|
'operation': Transaction.CREATE,
|
||||||
'timestamp': timestamp,
|
'timestamp': timestamp,
|
||||||
'metadata': None,
|
'metadata': None,
|
||||||
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
'divisible': False,
|
||||||
|
'updatable': False,
|
||||||
|
'refillable': False,
|
||||||
|
'data': data,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE, [user_ffill], [user_cond])
|
tx = Transaction(Transaction.CREATE, Asset(data, data_id), [user_ffill],
|
||||||
|
[user_cond])
|
||||||
tx_dict = tx.to_dict()
|
tx_dict = tx.to_dict()
|
||||||
tx_dict['id'] = tx_id
|
tx_dict['id'] = tx_id
|
||||||
|
tx_dict['transaction']['asset']['id'] = data_id
|
||||||
tx_dict['transaction']['timestamp'] = timestamp
|
tx_dict['transaction']['timestamp'] = timestamp
|
||||||
|
|
||||||
assert tx_dict == expected
|
assert tx_dict == expected
|
||||||
|
|
||||||
|
|
||||||
def test_transaction_deserialization(user_ffill, user_cond):
|
def test_transaction_deserialization(user_ffill, user_cond, data, data_id):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
timestamp = '66666666666'
|
timestamp = '66666666666'
|
||||||
|
|
||||||
expected = Transaction(Transaction.CREATE, [user_ffill], [user_cond], None,
|
expected_asset = Asset(data, data_id)
|
||||||
timestamp, Transaction.VERSION)
|
expected = Transaction(Transaction.CREATE, expected_asset, [user_ffill],
|
||||||
|
[user_cond], None, timestamp, Transaction.VERSION)
|
||||||
|
|
||||||
tx = {
|
tx = {
|
||||||
'version': Transaction.VERSION,
|
'version': Transaction.VERSION,
|
||||||
@ -330,6 +370,13 @@ def test_transaction_deserialization(user_ffill, user_cond):
|
|||||||
'operation': Transaction.CREATE,
|
'operation': Transaction.CREATE,
|
||||||
'timestamp': timestamp,
|
'timestamp': timestamp,
|
||||||
'metadata': None,
|
'metadata': None,
|
||||||
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
'divisible': False,
|
||||||
|
'updatable': False,
|
||||||
|
'refillable': False,
|
||||||
|
'data': data,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tx_no_signatures = Transaction._remove_signatures(tx)
|
tx_no_signatures = Transaction._remove_signatures(tx)
|
||||||
@ -378,6 +425,17 @@ def test_invalid_fulfillment_initialization(user_ffill, user_pub):
|
|||||||
Fulfillment(user_ffill, [], tx_input='somethingthatiswrong')
|
Fulfillment(user_ffill, [], tx_input='somethingthatiswrong')
|
||||||
|
|
||||||
|
|
||||||
|
def test_asset_default_values():
|
||||||
|
from bigchaindb_common.transaction import Asset
|
||||||
|
|
||||||
|
asset = Asset()
|
||||||
|
assert asset.data is None
|
||||||
|
assert asset.data_id
|
||||||
|
assert asset.divisible is False
|
||||||
|
assert asset.updatable is False
|
||||||
|
assert asset.refillable is False
|
||||||
|
|
||||||
|
|
||||||
def test_asset_invalid_asset_initialization():
|
def test_asset_invalid_asset_initialization():
|
||||||
from bigchaindb_common.transaction import Asset
|
from bigchaindb_common.transaction import Asset
|
||||||
|
|
||||||
@ -504,35 +562,35 @@ def test_cast_transaction_link_to_boolean():
|
|||||||
|
|
||||||
|
|
||||||
def test_add_fulfillment_to_tx(user_ffill):
|
def test_add_fulfillment_to_tx(user_ffill):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE, [], [])
|
tx = Transaction(Transaction.CREATE, Asset(), [], [])
|
||||||
tx.add_fulfillment(user_ffill)
|
tx.add_fulfillment(user_ffill)
|
||||||
|
|
||||||
assert len(tx.fulfillments) == 1
|
assert len(tx.fulfillments) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_add_fulfillment_to_tx_with_invalid_parameters():
|
def test_add_fulfillment_to_tx_with_invalid_parameters():
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE)
|
tx = Transaction(Transaction.CREATE, Asset())
|
||||||
with raises(TypeError):
|
with raises(TypeError):
|
||||||
tx.add_fulfillment('somewronginput')
|
tx.add_fulfillment('somewronginput')
|
||||||
|
|
||||||
|
|
||||||
def test_add_condition_to_tx(user_cond):
|
def test_add_condition_to_tx(user_cond):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE)
|
tx = Transaction(Transaction.CREATE, Asset())
|
||||||
tx.add_condition(user_cond)
|
tx.add_condition(user_cond)
|
||||||
|
|
||||||
assert len(tx.conditions) == 1
|
assert len(tx.conditions) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_add_condition_to_tx_with_invalid_parameters():
|
def test_add_condition_to_tx_with_invalid_parameters():
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE, [], [])
|
tx = Transaction(Transaction.CREATE, Asset(), [], [])
|
||||||
with raises(TypeError):
|
with raises(TypeError):
|
||||||
tx.add_condition('somewronginput')
|
tx.add_condition('somewronginput')
|
||||||
|
|
||||||
@ -547,15 +605,15 @@ def test_sign_with_invalid_parameters(utx, user_priv):
|
|||||||
def test_validate_tx_simple_create_signature(user_ffill, user_cond, user_priv):
|
def test_validate_tx_simple_create_signature(user_ffill, user_cond, user_priv):
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from bigchaindb_common.crypto import SigningKey
|
from bigchaindb_common.crypto import SigningKey
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE, [user_ffill], [user_cond])
|
tx = Transaction(Transaction.CREATE, Asset(), [user_ffill], [user_cond])
|
||||||
expected = deepcopy(user_cond)
|
expected = deepcopy(user_cond)
|
||||||
expected.fulfillment.sign(str(tx), SigningKey(user_priv))
|
expected.fulfillment.sign(str(tx), SigningKey(user_priv))
|
||||||
tx.sign([user_priv])
|
tx.sign([user_priv])
|
||||||
|
|
||||||
expected_uri = expected.fulfillment.serialize_uri()
|
assert tx.fulfillments[0].to_dict()['fulfillment'] == \
|
||||||
assert tx.fulfillments[0].to_dict()['fulfillment'] == expected_uri
|
expected.fulfillment.serialize_uri()
|
||||||
assert tx.fulfillments_valid() is True
|
assert tx.fulfillments_valid() is True
|
||||||
|
|
||||||
|
|
||||||
@ -590,6 +648,7 @@ def test_sign_threshold_with_invalid_params(utx, user_user2_threshold_ffill,
|
|||||||
|
|
||||||
def test_validate_fulfillment_with_invalid_parameters(utx):
|
def test_validate_fulfillment_with_invalid_parameters(utx):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction
|
||||||
|
|
||||||
input_conditions = [cond.fulfillment.condition_uri for cond
|
input_conditions = [cond.fulfillment.condition_uri for cond
|
||||||
in utx.conditions]
|
in utx.conditions]
|
||||||
tx_dict = utx.to_dict()
|
tx_dict = utx.to_dict()
|
||||||
@ -604,9 +663,9 @@ def test_validate_multiple_fulfillments(user_ffill, user_cond, user_priv):
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from bigchaindb_common.crypto import SigningKey
|
from bigchaindb_common.crypto import SigningKey
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE,
|
tx = Transaction(Transaction.CREATE, Asset(),
|
||||||
[user_ffill, deepcopy(user_ffill)],
|
[user_ffill, deepcopy(user_ffill)],
|
||||||
[user_ffill, deepcopy(user_cond)])
|
[user_ffill, deepcopy(user_cond)])
|
||||||
|
|
||||||
@ -639,9 +698,9 @@ def test_validate_tx_threshold_create_signature(user_user2_threshold_ffill,
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from bigchaindb_common.crypto import SigningKey
|
from bigchaindb_common.crypto import SigningKey
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE, [user_user2_threshold_ffill],
|
tx = Transaction(Transaction.CREATE, Asset(), [user_user2_threshold_ffill],
|
||||||
[user_user2_threshold_cond])
|
[user_user2_threshold_cond])
|
||||||
expected = deepcopy(user_user2_threshold_cond)
|
expected = deepcopy(user_user2_threshold_cond)
|
||||||
expected.fulfillment.subconditions[0]['body'].sign(str(tx),
|
expected.fulfillment.subconditions[0]['body'].sign(str(tx),
|
||||||
@ -661,10 +720,10 @@ def test_multiple_fulfillment_validation_of_transfer_tx(user_ffill, user_cond,
|
|||||||
user3_priv):
|
user3_priv):
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from bigchaindb_common.transaction import (Transaction, TransactionLink,
|
from bigchaindb_common.transaction import (Transaction, TransactionLink,
|
||||||
Fulfillment, Condition)
|
Fulfillment, Condition, Asset)
|
||||||
from cryptoconditions import Ed25519Fulfillment
|
from cryptoconditions import Ed25519Fulfillment
|
||||||
|
|
||||||
tx = Transaction(Transaction.CREATE,
|
tx = Transaction(Transaction.CREATE, Asset(),
|
||||||
[user_ffill, deepcopy(user_ffill)],
|
[user_ffill, deepcopy(user_ffill)],
|
||||||
[user_cond, deepcopy(user_cond)])
|
[user_cond, deepcopy(user_cond)])
|
||||||
tx.sign([user_priv])
|
tx.sign([user_priv])
|
||||||
@ -676,7 +735,7 @@ def test_multiple_fulfillment_validation_of_transfer_tx(user_ffill, user_cond,
|
|||||||
[user3_pub]),
|
[user3_pub]),
|
||||||
Condition(Ed25519Fulfillment(public_key=user3_pub),
|
Condition(Ed25519Fulfillment(public_key=user3_pub),
|
||||||
[user3_pub])]
|
[user3_pub])]
|
||||||
transfer_tx = Transaction('TRANSFER', fulfillments, conditions)
|
transfer_tx = Transaction('TRANSFER', tx.asset, fulfillments, conditions)
|
||||||
transfer_tx = transfer_tx.sign([user_priv])
|
transfer_tx = transfer_tx.sign([user_priv])
|
||||||
|
|
||||||
assert transfer_tx.fulfillments_valid(tx.conditions) is True
|
assert transfer_tx.fulfillments_valid(tx.conditions) is True
|
||||||
@ -711,16 +770,22 @@ def test_validate_fulfillments_of_transfer_tx_with_invalid_params(transfer_tx,
|
|||||||
tx.fulfillments_valid()
|
tx.fulfillments_valid()
|
||||||
|
|
||||||
|
|
||||||
def test_create_create_transaction_single_io(user_cond, user_pub):
|
def test_create_create_transaction_single_io(user_cond, user_pub, data,
|
||||||
from bigchaindb_common.transaction import Transaction
|
data_id):
|
||||||
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
'transaction': {
|
'transaction': {
|
||||||
'conditions': [user_cond.to_dict(0)],
|
'conditions': [user_cond.to_dict(0)],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'data': {
|
'data': data,
|
||||||
'message': 'hello'
|
},
|
||||||
}
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
'divisible': False,
|
||||||
|
'updatable': False,
|
||||||
|
'refillable': False,
|
||||||
|
'data': data,
|
||||||
},
|
},
|
||||||
'fulfillments': [
|
'fulfillments': [
|
||||||
{
|
{
|
||||||
@ -737,8 +802,8 @@ def test_create_create_transaction_single_io(user_cond, user_pub):
|
|||||||
'version': 1
|
'version': 1
|
||||||
}
|
}
|
||||||
|
|
||||||
data = {'message': 'hello'}
|
asset = Asset(data, data_id)
|
||||||
tx = Transaction.create([user_pub], [user_pub], data).to_dict()
|
tx = Transaction.create([user_pub], [user_pub], data, asset).to_dict()
|
||||||
tx.pop('id')
|
tx.pop('id')
|
||||||
tx['transaction']['metadata'].pop('id')
|
tx['transaction']['metadata'].pop('id')
|
||||||
tx['transaction'].pop('timestamp')
|
tx['transaction'].pop('timestamp')
|
||||||
@ -747,15 +812,16 @@ def test_create_create_transaction_single_io(user_cond, user_pub):
|
|||||||
assert tx == expected
|
assert tx == expected
|
||||||
|
|
||||||
|
|
||||||
def test_validate_single_io_create_transaction(user_pub, user_priv):
|
def test_validate_single_io_create_transaction(user_pub, user_priv, data):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction.create([user_pub], [user_pub], {'message': 'hello'})
|
tx = Transaction.create([user_pub], [user_pub], data, Asset())
|
||||||
tx = tx.sign([user_priv])
|
tx = tx.sign([user_priv])
|
||||||
assert tx.fulfillments_valid() is True
|
assert tx.fulfillments_valid() is True
|
||||||
|
|
||||||
|
|
||||||
@mark.skip(reason='Multiple inputs and outputs in CREATE not supported')
|
@mark.skip(reason='Multiple inputs and outputs in CREATE not supported')
|
||||||
|
# TODO: Add digital assets
|
||||||
def test_create_create_transaction_multiple_io(user_cond, user2_cond, user_pub,
|
def test_create_create_transaction_multiple_io(user_cond, user2_cond, user_pub,
|
||||||
user2_pub):
|
user2_pub):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction
|
||||||
@ -800,6 +866,7 @@ def test_create_create_transaction_multiple_io(user_cond, user2_cond, user_pub,
|
|||||||
|
|
||||||
|
|
||||||
@mark.skip(reason='Multiple inputs and outputs in CREATE not supported')
|
@mark.skip(reason='Multiple inputs and outputs in CREATE not supported')
|
||||||
|
# TODO: Add digital assets
|
||||||
def test_validate_multiple_io_create_transaction(user_pub, user_priv,
|
def test_validate_multiple_io_create_transaction(user_pub, user_priv,
|
||||||
user2_pub, user2_priv):
|
user2_pub, user2_priv):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction
|
||||||
@ -812,16 +879,22 @@ def test_validate_multiple_io_create_transaction(user_pub, user_priv,
|
|||||||
|
|
||||||
def test_create_create_transaction_threshold(user_pub, user2_pub, user3_pub,
|
def test_create_create_transaction_threshold(user_pub, user2_pub, user3_pub,
|
||||||
user_user2_threshold_cond,
|
user_user2_threshold_cond,
|
||||||
user_user2_threshold_ffill):
|
user_user2_threshold_ffill, data,
|
||||||
from bigchaindb_common.transaction import Transaction
|
data_id):
|
||||||
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
'transaction': {
|
'transaction': {
|
||||||
'conditions': [user_user2_threshold_cond.to_dict(0)],
|
'conditions': [user_user2_threshold_cond.to_dict(0)],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'data': {
|
'data': data,
|
||||||
'message': 'hello'
|
},
|
||||||
}
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
'divisible': False,
|
||||||
|
'updatable': False,
|
||||||
|
'refillable': False,
|
||||||
|
'data': data,
|
||||||
},
|
},
|
||||||
'fulfillments': [
|
'fulfillments': [
|
||||||
{
|
{
|
||||||
@ -837,28 +910,29 @@ def test_create_create_transaction_threshold(user_pub, user2_pub, user3_pub,
|
|||||||
},
|
},
|
||||||
'version': 1
|
'version': 1
|
||||||
}
|
}
|
||||||
tx = Transaction.create([user_pub], [user_pub, user2_pub],
|
asset = Asset(data, data_id)
|
||||||
{'message': 'hello'}).to_dict()
|
tx = Transaction.create([user_pub], [user_pub, user2_pub], data, asset)
|
||||||
tx.pop('id')
|
tx_dict = tx.to_dict()
|
||||||
tx['transaction']['metadata'].pop('id')
|
tx_dict.pop('id')
|
||||||
tx['transaction'].pop('timestamp')
|
tx_dict['transaction']['metadata'].pop('id')
|
||||||
tx['transaction']['fulfillments'][0]['fulfillment'] = None
|
tx_dict['transaction'].pop('timestamp')
|
||||||
|
tx_dict['transaction']['fulfillments'][0]['fulfillment'] = None
|
||||||
|
|
||||||
assert tx == expected
|
assert tx_dict == expected
|
||||||
|
|
||||||
|
|
||||||
def test_validate_threshold_create_transaction(user_pub, user_priv, user2_pub):
|
def test_validate_threshold_create_transaction(user_pub, user_priv, user2_pub,
|
||||||
from bigchaindb_common.transaction import Transaction
|
data):
|
||||||
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction.create([user_pub], [user_pub, user2_pub],
|
tx = Transaction.create([user_pub], [user_pub, user2_pub], data, Asset())
|
||||||
{'message': 'hello'})
|
|
||||||
tx = tx.sign([user_priv])
|
tx = tx.sign([user_priv])
|
||||||
assert tx.fulfillments_valid() is True
|
assert tx.fulfillments_valid() is True
|
||||||
|
|
||||||
|
|
||||||
def test_create_create_transaction_hashlock(user_pub):
|
def test_create_create_transaction_hashlock(user_pub, data, data_id):
|
||||||
from bigchaindb_common.transaction import Transaction, Condition
|
|
||||||
from cryptoconditions import PreimageSha256Fulfillment
|
from cryptoconditions import PreimageSha256Fulfillment
|
||||||
|
from bigchaindb_common.transaction import Transaction, Condition, Asset
|
||||||
|
|
||||||
secret = b'much secret, wow'
|
secret = b'much secret, wow'
|
||||||
hashlock = PreimageSha256Fulfillment(preimage=secret).condition_uri
|
hashlock = PreimageSha256Fulfillment(preimage=secret).condition_uri
|
||||||
@ -868,9 +942,14 @@ def test_create_create_transaction_hashlock(user_pub):
|
|||||||
'transaction': {
|
'transaction': {
|
||||||
'conditions': [cond.to_dict(0)],
|
'conditions': [cond.to_dict(0)],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'data': {
|
'data': data,
|
||||||
'message': 'hello'
|
},
|
||||||
}
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
'divisible': False,
|
||||||
|
'updatable': False,
|
||||||
|
'refillable': False,
|
||||||
|
'data': data,
|
||||||
},
|
},
|
||||||
'fulfillments': [
|
'fulfillments': [
|
||||||
{
|
{
|
||||||
@ -887,8 +966,8 @@ def test_create_create_transaction_hashlock(user_pub):
|
|||||||
'version': 1
|
'version': 1
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = Transaction.create([user_pub], [], {'message': 'hello'},
|
asset = Asset(data, data_id)
|
||||||
secret).to_dict()
|
tx = Transaction.create([user_pub], [], data, asset, secret).to_dict()
|
||||||
tx.pop('id')
|
tx.pop('id')
|
||||||
tx['transaction']['metadata'].pop('id')
|
tx['transaction']['metadata'].pop('id')
|
||||||
tx['transaction'].pop('timestamp')
|
tx['transaction'].pop('timestamp')
|
||||||
@ -897,11 +976,10 @@ def test_create_create_transaction_hashlock(user_pub):
|
|||||||
assert tx == expected
|
assert tx == expected
|
||||||
|
|
||||||
|
|
||||||
def test_validate_hashlock_create_transaction(user_pub, user_priv):
|
def test_validate_hashlock_create_transaction(user_pub, user_priv, data):
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
|
|
||||||
tx = Transaction.create([user_pub], [], {'message': 'hello'},
|
tx = Transaction.create([user_pub], [], data, Asset(), b'much secret, wow')
|
||||||
b'much secret, wow')
|
|
||||||
tx = tx.sign([user_priv])
|
tx = tx.sign([user_priv])
|
||||||
assert tx.fulfillments_valid() is True
|
assert tx.fulfillments_valid() is True
|
||||||
|
|
||||||
@ -934,16 +1012,19 @@ def test_conditions_to_inputs(tx):
|
|||||||
|
|
||||||
|
|
||||||
def test_create_transfer_transaction_single_io(tx, user_pub, user2_pub,
|
def test_create_transfer_transaction_single_io(tx, user_pub, user2_pub,
|
||||||
user2_cond, user_priv):
|
user2_cond, user_priv, data_id):
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from bigchaindb_common.crypto import SigningKey
|
from bigchaindb_common.crypto import SigningKey
|
||||||
from bigchaindb_common.transaction import Transaction
|
from bigchaindb_common.transaction import Transaction, Asset
|
||||||
from bigchaindb_common.util import serialize
|
from bigchaindb_common.util import serialize
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
'transaction': {
|
'transaction': {
|
||||||
'conditions': [user2_cond.to_dict(0)],
|
'conditions': [user2_cond.to_dict(0)],
|
||||||
'metadata': None,
|
'metadata': None,
|
||||||
|
'asset': {
|
||||||
|
'id': data_id,
|
||||||
|
},
|
||||||
'fulfillments': [
|
'fulfillments': [
|
||||||
{
|
{
|
||||||
'owners_before': [
|
'owners_before': [
|
||||||
@ -962,7 +1043,8 @@ def test_create_transfer_transaction_single_io(tx, user_pub, user2_pub,
|
|||||||
'version': 1
|
'version': 1
|
||||||
}
|
}
|
||||||
inputs = tx.to_inputs([0])
|
inputs = tx.to_inputs([0])
|
||||||
transfer_tx = Transaction.transfer(inputs, [user2_pub])
|
asset = Asset(None, data_id)
|
||||||
|
transfer_tx = Transaction.transfer(inputs, [user2_pub], asset=asset)
|
||||||
transfer_tx = transfer_tx.sign([user_priv])
|
transfer_tx = transfer_tx.sign([user_priv])
|
||||||
transfer_tx = transfer_tx.to_dict()
|
transfer_tx = transfer_tx.to_dict()
|
||||||
transfer_tx_body = transfer_tx['transaction']
|
transfer_tx_body = transfer_tx['transaction']
|
||||||
@ -980,6 +1062,7 @@ def test_create_transfer_transaction_single_io(tx, user_pub, user2_pub,
|
|||||||
assert transfer_tx.fulfillments_valid([tx.conditions[0]]) is True
|
assert transfer_tx.fulfillments_valid([tx.conditions[0]]) is True
|
||||||
|
|
||||||
|
|
||||||
|
@mark.skip(reason='FIXME: When divisible assets land')
|
||||||
def test_create_transfer_transaction_multiple_io(user_pub, user_priv,
|
def test_create_transfer_transaction_multiple_io(user_pub, user_priv,
|
||||||
user2_pub, user2_priv,
|
user2_pub, user2_priv,
|
||||||
user3_pub, user2_cond):
|
user3_pub, user2_cond):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user