Round timestamp and add uuid to payload.

Timestamp is now returned in UTC with second precision.
Payload hash is replaced by an uuid4. This allows us to distinguish
between duplicated payloads.
Removed a deprecated test related to the payload hash.
Renamded secondary index payload_hash -> payload_uuid
This commit is contained in:
Rodolphe Marques 2016-06-15 09:55:30 +02:00
parent a3b37f0984
commit a694efd9dc
3 changed files with 5 additions and 25 deletions

View File

@ -54,7 +54,7 @@ def init():
.run(conn) .run(conn)
# secondary index for payload hash # secondary index for payload hash
r.db(dbname).table('bigchain')\ r.db(dbname).table('bigchain')\
.index_create('payload_hash', r.row['block']['transactions']['transaction']['data']['hash'], multi=True)\ .index_create('payload_uuid', r.row['block']['transactions']['transaction']['data']['uuid'], multi=True)\
.run(conn) .run(conn)
# wait for rethinkdb to finish creating secondary indexes # wait for rethinkdb to finish creating secondary indexes

View File

@ -4,7 +4,7 @@ import contextlib
import threading import threading
import queue import queue
import multiprocessing as mp import multiprocessing as mp
from datetime import datetime import uuid
import rapidjson import rapidjson
@ -127,14 +127,13 @@ def deserialize(data):
def timestamp(): def timestamp():
"""Calculate a UTC timestamp with microsecond precision. """Calculate a UTC timestamp with second precision.
Returns: Returns:
str: UTC timestamp. str: UTC timestamp.
""" """
dt = datetime.utcnow() return str(round(time.time()))
return "{0:.6f}".format(time.mktime(dt.timetuple()) + dt.microsecond / 1e6)
# TODO: Consider remove the operation (if there are no inputs CREATE else TRANSFER) # TODO: Consider remove the operation (if there are no inputs CREATE else TRANSFER)
@ -224,9 +223,8 @@ def create_tx(current_owners, new_owners, inputs, operation, payload=None):
data = None data = None
if payload is not None: if payload is not None:
if isinstance(payload, dict): if isinstance(payload, dict):
hash_payload = crypto.hash_data(serialize(payload))
data = { data = {
'hash': hash_payload, 'uuid': str(uuid.uuid4()),
'payload': payload 'payload': payload
} }
else: else:

View File

@ -48,24 +48,6 @@ class TestBigchainApi(object):
assert b.validate_fulfillments(tx) == False assert b.validate_fulfillments(tx) == False
assert b.validate_fulfillments(tx_signed) == True assert b.validate_fulfillments(tx_signed) == True
def test_transaction_hash(self, b, user_vk):
payload = {'cats': 'are awesome'}
tx = b.create_transaction(user_vk, user_vk, None, 'CREATE', payload)
tx_calculated = {
'conditions': [{'cid': 0,
'condition': tx['transaction']['conditions'][0]['condition'],
'new_owners': [user_vk]}],
'data': {'hash': crypto.hash_data(util.serialize(payload)),
'payload': payload},
'fulfillments': [{'current_owners': [user_vk],
'fid': 0,
'fulfillment': None,
'input': None}],
'operation': 'CREATE',
'timestamp': tx['transaction']['timestamp']
}
assert tx['transaction']['data'] == tx_calculated['data']
# assert tx_hash == tx_calculated_hash
def test_transaction_signature(self, b, user_sk, user_vk): def test_transaction_signature(self, b, user_sk, user_vk):
tx = b.create_transaction(user_vk, user_vk, None, 'CREATE') tx = b.create_transaction(user_vk, user_vk, None, 'CREATE')