mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-25 15:05:49 +00:00
* Integrate zenroom acceptance test * fixed zenroom reference * added additional dependences to the docker fils so that zenroom can be executed. added zenroom from git repo, because pypi servs an older buggy version * using the custom planetmintdriver branch to avoid pypi zendesk downloads * Added zenroom test * Added zenroom test Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Change reference to planetmint-driver to planetmint-driver-python Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Basic structuring * Added new classes in transactions/common * Added Create and Transfer as separate transactions * Resolved errors related to transactions.common * Fixing imports * Resolved issues of election transaction * Resolve flake8 issues Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Resolve remaining flake8 issues Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Resolve remaining flake8 issues Signed-off-by: Sangat Das <sangatdas5@gmail.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: ArpitShukla007 <arpitnshukla@gmail.com>
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
# Copyright © 2020 Interplanetary Database Association e.V.,
|
|
# Planetmint and IPDB software contributors.
|
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
|
|
|
from planetmint.utils import condition_details_has_owner
|
|
from planetmint.backend import query
|
|
from planetmint.transactions.common.transaction import TransactionLink
|
|
|
|
|
|
class FastQuery():
|
|
"""Database queries that join on block results from a single node."""
|
|
|
|
def __init__(self, connection):
|
|
self.connection = connection
|
|
|
|
def get_outputs_by_public_key(self, public_key):
|
|
"""Get outputs for a public key"""
|
|
txs = list(query.get_owned_ids(self.connection, public_key))
|
|
return [TransactionLink(tx['id'], index)
|
|
for tx in txs
|
|
for index, output in enumerate(tx['outputs'])
|
|
if condition_details_has_owner(output['condition']['details'],
|
|
public_key)]
|
|
|
|
def filter_spent_outputs(self, outputs):
|
|
"""Remove outputs that have been spent
|
|
|
|
Args:
|
|
outputs: list of TransactionLink
|
|
"""
|
|
links = [o.to_dict() for o in outputs]
|
|
txs = list(query.get_spending_transactions(self.connection, links))
|
|
spends = {TransactionLink.from_dict(input_['fulfills'])
|
|
for tx in txs
|
|
for input_ in tx['inputs']}
|
|
return [ff for ff in outputs if ff not in spends]
|
|
|
|
def filter_unspent_outputs(self, outputs):
|
|
"""Remove outputs that have not been spent
|
|
|
|
Args:
|
|
outputs: list of TransactionLink
|
|
"""
|
|
links = [o.to_dict() for o in outputs]
|
|
txs = list(query.get_spending_transactions(self.connection, links))
|
|
spends = {TransactionLink.from_dict(input_['fulfills'])
|
|
for tx in txs
|
|
for input_ in tx['inputs']}
|
|
return [ff for ff in outputs if ff in spends]
|