Merge pull request #373 from bigchaindb/bug/#/fix-cc-integration

Update cc API usage
This commit is contained in:
Tim Daubenschütz 2016-06-13 17:27:49 +02:00 committed by GitHub
commit a3b37f0984
5 changed files with 49 additions and 51 deletions

View File

@ -275,7 +275,7 @@ def create_tx(current_owners, new_owners, inputs, operation, payload=None):
conditions.append({
'new_owners': new_owners,
'condition': {
'details': rapidjson.loads(condition.serialize_json()),
'details': condition.to_dict(),
'uri': condition.condition_uri
},
'cid': fulfillment['fid']
@ -333,7 +333,7 @@ def sign_tx(transaction, signing_keys):
# TODO: avoid instantiation, pass as argument!
bigchain = bigchaindb.Bigchain()
input_condition = get_input_condition(bigchain, fulfillment)
parsed_fulfillment = cc.Fulfillment.from_json(input_condition['condition']['details'])
parsed_fulfillment = cc.Fulfillment.from_dict(input_condition['condition']['details'])
# for the case in which the type of fulfillment is not covered by this method
parsed_fulfillment_signed = parsed_fulfillment
@ -520,7 +520,7 @@ def get_input_condition(bigchain, fulfillment):
return {
'condition': {
'details': rapidjson.loads(condition.serialize_json()),
'details': condition.to_dict(),
'uri': condition.condition_uri
}
}

View File

@ -2,7 +2,7 @@
This section gives an example of using the Python Server API to interact _directly_ with a BigchainDB node running BigchainDB Server. That is, in this example, the Python code and BigchainDB Server run on the same machine.
(One can also interact with a BigchainDB node via other APIs, including the HTTP Client-Server API.)
(One can also interact with a BigchainDB node via other APIs, including the HTTP Client-Server API.)
We create a digital asset, sign it, write it to a BigchainDB Server instance, read it, transfer it to a different user, and then attempt to transfer it to another user, resulting in a double-spend error.
@ -535,7 +535,6 @@ We'll illustrate this by a threshold condition where 2 out of 3 `new_owners` nee
```python
import copy
import json
import cryptoconditions as cc
from bigchaindb import util, crypto
@ -559,7 +558,7 @@ threshold_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=threshol
# Update the condition in the newly created transaction
threshold_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(threshold_condition.serialize_json()),
'details': threshold_condition.to_dict(),
'uri': threshold_condition.condition.serialize_uri()
}
@ -667,7 +666,7 @@ tx_retrieved_id = b.get_owned_ids(thresholduser1_pub).pop()
threshold_tx_transfer = b.create_transaction([thresholduser1_pub, thresholduser2_pub, thresholduser3_pub], thresholduser4_pub, tx_retrieved_id, 'TRANSFER')
# Parse the threshold cryptocondition
threshold_fulfillment = cc.Fulfillment.from_json(threshold_tx['transaction']['conditions'][0]['condition']['details'])
threshold_fulfillment = cc.Fulfillment.from_dict(threshold_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment1 = threshold_fulfillment.get_subcondition_from_vk(thresholduser1_pub)[0]
subfulfillment2 = threshold_fulfillment.get_subcondition_from_vk(thresholduser2_pub)[0]
@ -911,7 +910,7 @@ condition_timeout = cc.TimeoutFulfillment(expire_time=time_expire)
# The conditions list is empty, so we need to append a new condition
tx_timeout['transaction']['conditions'].append({
'condition': {
'details': json.loads(condition_timeout.serialize_json()),
'details': condition_timeout.to_dict(),
'uri': condition_timeout.condition.serialize_uri()
},
'cid': 0,
@ -977,7 +976,7 @@ from time import sleep
tx_timeout_transfer = b.create_transaction(None, testuser1_pub, {'txid': tx_timeout['id'], 'cid': 0}, 'TRANSFER')
# Parse the timeout condition and create the corresponding fulfillment
timeout_fulfillment = cc.Fulfillment.from_json(
timeout_fulfillment = cc.Fulfillment.from_dict(
tx_timeout['transaction']['conditions'][0]['condition']['details'])
tx_timeout_transfer['transaction']['fulfillments'][0]['fulfillment'] = timeout_fulfillment.serialize_uri()
@ -1054,7 +1053,7 @@ tx_retrieved_id = b.get_owned_ids(testuser2_pub).pop()
# Create a base template with the execute and abort address
tx_escrow = b.create_transaction(testuser2_pub, [testuser2_pub, testuser1_pub], tx_retrieved_id, 'TRANSFER')
# Set expiry time - the execute address needs to fulfill before expiration
# Set expiry time - the execute address needs to fulfill before expiration
time_sleep = 12
time_expire = str(float(util.timestamp()) + time_sleep) # 12 secs from now
@ -1073,12 +1072,12 @@ condition_escrow.add_subfulfillment(condition_execute)
# Create the abort branch
condition_abort = cc.ThresholdSha256Fulfillment(threshold=2) # AND gate
condition_abort.add_subfulfillment(cc.Ed25519Fulfillment(public_key=testuser2_pub)) # abort address
condition_abort.add_subfulfillment(condition_timeout_inverted)
condition_abort.add_subfulfillment(condition_timeout_inverted)
condition_escrow.add_subfulfillment(condition_abort)
# Update the condition in the newly created transaction
tx_escrow['transaction']['conditions'][0]['condition'] = {
'details': json.loads(condition_escrow.serialize_json()),
'details': condition_escrow.to_dict(),
'uri': condition_escrow.condition.serialize_uri()
}
@ -1209,7 +1208,7 @@ In the case of `testuser1`, we create the `execute` fulfillment:
tx_escrow_execute = b.create_transaction([testuser2_pub, testuser1_pub], testuser1_pub, {'txid': tx_escrow_signed['id'], 'cid': 0}, 'TRANSFER')
# Parse the Escrow cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
tx_escrow['transaction']['conditions'][0]['condition']['details'])
subfulfillment_testuser1 = escrow_fulfillment.get_subcondition_from_vk(testuser1_pub)[0]
@ -1250,7 +1249,7 @@ In the case of `testuser2`, we create the `abort` fulfillment:
tx_escrow_abort = b.create_transaction([testuser2_pub, testuser1_pub], testuser2_pub, {'txid': tx_escrow_signed['id'], 'cid': 0}, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
tx_escrow['transaction']['conditions'][0]['condition']['details'])
subfulfillment_testuser1 = escrow_fulfillment.get_subcondition_from_vk(testuser1_pub)[0]

View File

@ -95,7 +95,7 @@ setup(
'rethinkdb==2.3.0',
'pysha3==0.3',
'pytz==2015.7',
'cryptoconditions==0.3.1',
'cryptoconditions==0.4.1',
'statsd==3.2.1',
'python-rapidjson==0.0.6',
'logstats==0.2.1',
@ -108,7 +108,7 @@ setup(
tests_require=tests_require,
extras_require={
'test': tests_require,
'dev': dev_require + tests_require + docs_require + benchmarks_require,
'docs': docs_require,
'dev': dev_require + tests_require + docs_require + benchmarks_require,
'docs': docs_require,
},
)

View File

@ -2,7 +2,6 @@ import copy
import multiprocessing as mp
import random
import time
import json
import pytest
import rethinkdb as r
@ -1504,9 +1503,9 @@ class TestCryptoconditions(object):
tx = b.create_transaction(b.me, user_vk, None, 'CREATE')
condition = tx['transaction']['conditions'][0]['condition']
condition_from_uri = cc.Condition.from_uri(condition['uri'])
condition_from_json = cc.Fulfillment.from_json(condition['details']).condition
condition_from_dict = cc.Fulfillment.from_dict(condition['details']).condition
assert condition_from_uri.serialize_uri() == condition_from_json.serialize_uri()
assert condition_from_uri.serialize_uri() == condition_from_dict.serialize_uri()
assert condition['details']['public_key'] == user_vk
tx_signed = b.sign_transaction(tx, b.me_private)
@ -1528,16 +1527,16 @@ class TestCryptoconditions(object):
prev_tx = b.get_transaction(prev_tx_id['txid'])
prev_condition = prev_tx['transaction']['conditions'][0]['condition']
prev_condition_from_uri = cc.Condition.from_uri(prev_condition['uri'])
prev_condition_from_json = cc.Fulfillment.from_json(prev_condition['details']).condition
prev_condition_from_dict = cc.Fulfillment.from_dict(prev_condition['details']).condition
assert prev_condition_from_uri.serialize_uri() == prev_condition_from_json.serialize_uri()
assert prev_condition_from_uri.serialize_uri() == prev_condition_from_dict.serialize_uri()
assert prev_condition['details']['public_key'] == user_vk
condition = tx['transaction']['conditions'][0]['condition']
condition_from_uri = cc.Condition.from_uri(condition['uri'])
condition_from_json = cc.Fulfillment.from_json(condition['details']).condition
condition_from_dict = cc.Fulfillment.from_dict(condition['details']).condition
assert condition_from_uri.serialize_uri() == condition_from_json.serialize_uri()
assert condition_from_uri.serialize_uri() == condition_from_dict.serialize_uri()
assert condition['details']['public_key'] == other_vk
tx_signed = b.sign_transaction(tx, user_sk)
@ -1554,7 +1553,7 @@ class TestCryptoconditions(object):
tx = b.create_transaction(b.me, user_vk, None, 'CREATE')
fulfillment = cc.Ed25519Fulfillment(public_key=user_vk)
tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(fulfillment.serialize_json()),
'details': fulfillment.to_dict(),
'uri': fulfillment.condition.serialize_uri()
}
@ -1577,7 +1576,7 @@ class TestCryptoconditions(object):
fulfillment = cc.Ed25519Fulfillment(public_key=other_vk)
tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(fulfillment.serialize_json()),
'details': fulfillment.to_dict(),
'uri': fulfillment.condition.serialize_uri()
}
@ -1627,7 +1626,7 @@ class TestCryptoconditions(object):
first_tx_condition = cc.Ed25519Fulfillment(public_key=other_vk)
first_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
}
@ -1674,7 +1673,7 @@ class TestCryptoconditions(object):
first_tx_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=other3_vk))
first_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
}
# conditions have been updated, so hash needs updating
@ -1713,7 +1712,7 @@ class TestCryptoconditions(object):
assert b.is_valid_transaction(next_tx) == next_tx
@pytest.mark.usefixtures('inputs')
def test_override_condition_and_fulfillment_transfer_threshold_from_json(self, b, user_vk, user_sk):
def test_override_condition_and_fulfillment_transfer_threshold_from_dict(self, b, user_vk, user_sk):
other1_sk, other1_vk = crypto.generate_key_pair()
other2_sk, other2_vk = crypto.generate_key_pair()
other3_sk, other3_vk = crypto.generate_key_pair()
@ -1727,7 +1726,7 @@ class TestCryptoconditions(object):
first_tx_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=other3_vk))
first_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
}
# conditions have been updated, so hash needs updating
@ -1752,7 +1751,7 @@ class TestCryptoconditions(object):
next_tx_fulfillment_message = util.get_fulfillment_message(next_tx, next_tx_fulfillment, serialized=True)
# parse the threshold cryptocondition
next_tx_fulfillment = cc.Fulfillment.from_json(first_tx['transaction']['conditions'][0]['condition']['details'])
next_tx_fulfillment = cc.Fulfillment.from_dict(first_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment1 = next_tx_fulfillment.get_subcondition_from_vk(other1_vk)[0]
subfulfillment2 = next_tx_fulfillment.get_subcondition_from_vk(other2_vk)[0]
@ -1783,7 +1782,7 @@ class TestCryptoconditions(object):
first_tx_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=other2_vk))
first_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
}
# conditions have been updated, so hash needs updating
@ -1835,7 +1834,7 @@ class TestCryptoconditions(object):
expected_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=user_vk))
expected_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=user2_vk))
tx_expected_condition = {
'details': json.loads(expected_condition.serialize_json()),
'details': expected_condition.to_dict(),
'uri': expected_condition.condition.serialize_uri()
}
@ -1857,7 +1856,7 @@ class TestCryptoconditions(object):
tx_transfer_signed = b.sign_transaction(tx_transfer, [user_sk, user2_sk])
# expected fulfillment
expected_fulfillment = cc.Fulfillment.from_json(
expected_fulfillment = cc.Fulfillment.from_dict(
tx_create['transaction']['conditions'][0]['condition']['details'])
subfulfillment1 = expected_fulfillment.subconditions[0]['body']
subfulfillment2 = expected_fulfillment.subconditions[1]['body']
@ -1881,7 +1880,7 @@ class TestCryptoconditions(object):
hashlock_tx['transaction']['conditions'].append({
'condition': {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
},
'cid': 0,
@ -1912,7 +1911,7 @@ class TestCryptoconditions(object):
hashlock_tx['transaction']['conditions'].append({
'condition': {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
},
'cid': 0,
@ -1943,7 +1942,7 @@ class TestCryptoconditions(object):
hashlock_tx['transaction']['conditions'].append({
'condition': {
'details': json.loads(first_tx_condition.serialize_json()),
'details': first_tx_condition.to_dict(),
'uri': first_tx_condition.condition.serialize_uri()
},
'cid': 0,
@ -2013,7 +2012,7 @@ class TestCryptoconditions(object):
# create a transaction with multiple new_owners
tx = b.create_transaction(b.me, new_owners, None, 'CREATE')
condition = cc.Fulfillment.from_json(tx['transaction']['conditions'][0]['condition']['details'])
condition = cc.Fulfillment.from_dict(tx['transaction']['conditions'][0]['condition']['details'])
for new_owner in new_owners:
subcondition = condition.get_subcondition_from_vk(new_owner)[0]
@ -2051,7 +2050,7 @@ class TestCryptoconditions(object):
# Update the condition in the newly created transaction
escrow_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(condition_escrow.serialize_json()),
'details': condition_escrow.to_dict(),
'uri': condition_escrow.condition.serialize_uri()
}
@ -2077,7 +2076,7 @@ class TestCryptoconditions(object):
escrow_tx_transfer = b.create_transaction([user_vk, user2_vk], user2_vk, tx_retrieved_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
escrow_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment_user = escrow_fulfillment.get_subcondition_from_vk(user_vk)[0]
@ -2118,7 +2117,7 @@ class TestCryptoconditions(object):
escrow_tx_abort = b.create_transaction([user_vk, user2_vk], user_vk, tx_retrieved_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
escrow_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment_user = escrow_fulfillment.get_subcondition_from_vk(user_vk)[0]
@ -2180,7 +2179,7 @@ class TestCryptoconditions(object):
# Update the condition in the newly created transaction
escrow_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(condition_escrow.serialize_json()),
'details': condition_escrow.to_dict(),
'uri': condition_escrow.condition.serialize_uri()
}
@ -2206,7 +2205,7 @@ class TestCryptoconditions(object):
escrow_tx_transfer = b.create_transaction([user_vk, user2_vk], user2_vk, tx_retrieved_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
escrow_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment_user = escrow_fulfillment.get_subcondition_from_vk(user_vk)[0]
@ -2253,7 +2252,7 @@ class TestCryptoconditions(object):
escrow_tx_abort = b.create_transaction([user_vk, user2_vk], user_vk, tx_retrieved_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
escrow_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment_user = escrow_fulfillment.get_subcondition_from_vk(user_vk)[0]

View File

@ -182,7 +182,7 @@ threshold_condition.add_subfulfillment(cc.Ed25519Fulfillment(public_key=threshol
# update the condition in the newly created transaction
threshold_tx['transaction']['conditions'][0]['condition'] = {
'details': json.loads(threshold_condition.serialize_json()),
'details': threshold_condition.to_dict(),
'uri': threshold_condition.condition.serialize_uri()
}
@ -212,7 +212,7 @@ threshold_tx_transfer = b.create_transaction([thresholduser1_pub, thresholduser2
thresholduser4_pub, tx_retrieved_id, 'TRANSFER')
# parse the threshold cryptocondition
threshold_fulfillment = cc.Fulfillment.from_json(threshold_tx['transaction']['conditions'][0]['condition']['details'])
threshold_fulfillment = cc.Fulfillment.from_dict(threshold_tx['transaction']['conditions'][0]['condition']['details'])
subfulfillment1 = threshold_fulfillment.get_subcondition_from_vk(thresholduser1_pub)[0]
subfulfillment2 = threshold_fulfillment.get_subcondition_from_vk(thresholduser2_pub)[0]
@ -323,7 +323,7 @@ condition_timeout = cc.TimeoutFulfillment(expire_time=time_expire)
# The conditions list is empty, so we need to append a new condition
tx_timeout['transaction']['conditions'].append({
'condition': {
'details': json.loads(condition_timeout.serialize_json()),
'details': condition_timeout.to_dict(),
'uri': condition_timeout.condition.serialize_uri()
},
'cid': 0,
@ -347,7 +347,7 @@ tx_timeout_id = {'txid': tx_timeout['id'], 'cid': 0}
tx_timeout_transfer = b.create_transaction(None, testuser1_pub, tx_timeout_id, 'TRANSFER')
# Parse the threshold cryptocondition
timeout_fulfillment = cc.Fulfillment.from_json(
timeout_fulfillment = cc.Fulfillment.from_dict(
tx_timeout['transaction']['conditions'][0]['condition']['details'])
tx_timeout_transfer['transaction']['fulfillments'][0]['fulfillment'] = timeout_fulfillment.serialize_uri()
@ -392,7 +392,7 @@ condition_escrow.add_subfulfillment(condition_abort)
# Update the condition in the newly created transaction
tx_escrow['transaction']['conditions'][0]['condition'] = {
'details': json.loads(condition_escrow.serialize_json()),
'details': condition_escrow.to_dict(),
'uri': condition_escrow.condition.serialize_uri()
}
@ -417,7 +417,7 @@ tx_escrow_id = {'txid': tx_escrow_signed['id'], 'cid': 0}
tx_escrow_execute = b.create_transaction([testuser2_pub, testuser1_pub], testuser1_pub, tx_escrow_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
tx_escrow['transaction']['conditions'][0]['condition']['details'])
subfulfillment_testuser1 = escrow_fulfillment.get_subcondition_from_vk(testuser1_pub)[0]
@ -453,7 +453,7 @@ tx_escrow_execute['transaction']['fulfillments'][0]['fulfillment'] = escrow_fulf
tx_escrow_abort = b.create_transaction([testuser2_pub, testuser1_pub], testuser2_pub, tx_escrow_id, 'TRANSFER')
# Parse the threshold cryptocondition
escrow_fulfillment = cc.Fulfillment.from_json(
escrow_fulfillment = cc.Fulfillment.from_dict(
tx_escrow['transaction']['conditions'][0]['condition']['details'])
subfulfillment_testuser1 = escrow_fulfillment.get_subcondition_from_vk(testuser1_pub)[0]