adjusted backend queries for multiple assets

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2022-04-13 12:26:08 +02:00
parent f0248800d3
commit 664fe6c772
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
4 changed files with 25 additions and 25 deletions

View File

@ -121,12 +121,12 @@ def store_block(conn, block):
@register_query(LocalMongoDBConnection)
def get_txids_filtered(conn, asset_id, operation=None, last_tx=None):
def get_txids_filtered(conn, asset_ids, operation=None, last_tx=None):
match = {
Transaction.CREATE: {'operation': 'CREATE', 'id': asset_id},
Transaction.TRANSFER: {'operation': 'TRANSFER', 'asset.id': asset_id},
None: {'$or': [{'asset.id': asset_id}, {'id': asset_id}]},
Transaction.CREATE: {'operation': 'CREATE', 'id': {'$in': asset_ids}},
Transaction.TRANSFER: {'operation': 'TRANSFER', 'assets.id': {'$in': asset_ids}},
None: {'$or': [{'assets.id': {'$in': asset_ids}}, {'id': {'$in': asset_ids}}]},
}[operation]
cursor = conn.run(conn.collection('transactions').find(match))

View File

@ -215,7 +215,7 @@ def get_assets(connection, asset_ids):
@singledispatch
def get_txids_filtered(connection, asset_id, operation=None):
def get_txids_filtered(connection, asset_ids, operation=None):
"""Return all transactions for a particular asset id and optional operation.
Args:

View File

@ -18,19 +18,19 @@ def test_asset_transfer(b, signed_create_tx, user_pk, user_sk):
assert tx_transfer_signed.validate(b) == tx_transfer_signed
assert tx_transfer_signed.assets[0]['id'] == signed_create_tx.id
# NOTE: TO BE REMOVED BECAUSE V3.0 ALLOWS FOR MULTIPLE ASSETS THEREFOR MULTIPLE ASSET IDS
# def test_validate_transfer_asset_id_mismatch(b, signed_create_tx, user_pk, user_sk):
# from planetmint.transactions.common.exceptions import AssetIdMismatch
def test_validate_transfer_asset_id_mismatch(b, signed_create_tx, user_pk, user_sk):
from planetmint.transactions.common.exceptions import AssetIdMismatch
# tx_transfer = Transfer.generate(signed_create_tx.to_inputs(), [([user_pk], 1)],
# [signed_create_tx.id])
# tx_transfer.assets[0]['id'] = 'a' * 64
# tx_transfer_signed = tx_transfer.sign([user_sk])
tx_transfer = Transfer.generate(signed_create_tx.to_inputs(), [([user_pk], 1)],
[signed_create_tx.id])
tx_transfer.assets[0]['id'] = 'a' * 64
tx_transfer_signed = tx_transfer.sign([user_sk])
# b.store_bulk_transactions([signed_create_tx])
b.store_bulk_transactions([signed_create_tx])
with pytest.raises(AssetIdMismatch):
tx_transfer_signed.validate(b)
# with pytest.raises(AssetIdMismatch):
# tx_transfer_signed.validate(b)
def test_get_asset_id_create_transaction(alice, user_pk):

View File

@ -26,18 +26,18 @@ def test_get_txids_filtered(signed_create_tx, signed_transfer_tx):
conn.db.transactions.insert_one(signed_create_tx.to_dict())
conn.db.transactions.insert_one(signed_transfer_tx.to_dict())
asset_id = Transaction.get_asset_ids([signed_create_tx, signed_transfer_tx])
asset_ids = Transaction.get_asset_ids([signed_create_tx, signed_transfer_tx])
# Test get by just asset id
txids = set(query.get_txids_filtered(conn, asset_id))
txids = set(query.get_txids_filtered(conn, asset_ids))
assert txids == {signed_create_tx.id, signed_transfer_tx.id}
# Test get by asset and CREATE
txids = set(query.get_txids_filtered(conn, asset_id, Transaction.CREATE))
txids = set(query.get_txids_filtered(conn, asset_ids, Transaction.CREATE))
assert txids == {signed_create_tx.id}
# Test get by asset and TRANSFER
txids = set(query.get_txids_filtered(conn, asset_id, Transaction.TRANSFER))
txids = set(query.get_txids_filtered(conn, asset_ids, Transaction.TRANSFER))
assert txids == {signed_transfer_tx.id}
@ -223,9 +223,9 @@ def test_get_spending_transactions(user_pk, user_sk):
tx1 = Create.generate([user_pk], out * 3)
tx1.sign([user_sk])
inputs = tx1.to_inputs()
tx2 = Transfer.generate([inputs[0]], out, tx1.id).sign([user_sk])
tx3 = Transfer.generate([inputs[1]], out, tx1.id).sign([user_sk])
tx4 = Transfer.generate([inputs[2]], out, tx1.id).sign([user_sk])
tx2 = Transfer.generate([inputs[0]], out, [tx1.id]).sign([user_sk])
tx3 = Transfer.generate([inputs[1]], out, [tx1.id]).sign([user_sk])
tx4 = Transfer.generate([inputs[2]], out, [tx1.id]).sign([user_sk])
txns = [deepcopy(tx.to_dict()) for tx in [tx1, tx2, tx3, tx4]]
conn.db.transactions.insert_many(txns)
@ -250,17 +250,17 @@ def test_get_spending_transactions_multiple_inputs():
inputs1 = tx1.to_inputs()
tx2 = Transfer.generate([inputs1[0]],
[([alice_pk], 6), ([bob_pk], 3)],
tx1.id).sign([alice_sk])
[tx1.id]).sign([alice_sk])
inputs2 = tx2.to_inputs()
tx3 = Transfer.generate([inputs2[0]],
[([bob_pk], 3), ([carol_pk], 3)],
tx1.id).sign([alice_sk])
[tx1.id]).sign([alice_sk])
inputs3 = tx3.to_inputs()
tx4 = Transfer.generate([inputs2[1], inputs3[0]],
[([carol_pk], 6)],
tx1.id).sign([bob_sk])
[tx1.id]).sign([bob_sk])
txns = [deepcopy(tx.to_dict()) for tx in [tx1, tx2, tx3, tx4]]
conn.db.transactions.insert_many(txns)