diff --git a/backend/nft_market/api/tasks.py b/backend/nft_market/api/tasks.py index ab2e158..46571d3 100644 --- a/backend/nft_market/api/tasks.py +++ b/backend/nft_market/api/tasks.py @@ -111,7 +111,7 @@ def index_operations(asset_pk, update_timestamp=False, params=None): limit=1, txn_type="appl", ) - response = algorand.indexer.search_transactions(**params) + response = algorand.explorer.search_transactions(**params) txs = response["transactions"] if len(txs) == 0: return @@ -214,7 +214,7 @@ def index_holder(asset_pk, prev_tx=None, params=None): txn_type="axfer", min_amount=0, ) - response = algorand.indexer.search_transactions(**params) + response = algorand.explorer.search_transactions(**params) txs = response["transactions"] txs = list(filter(is_non_zero_asset_tx, txs)) diff --git a/backend/nft_market/services/algorand.py b/backend/nft_market/services/algorand.py index 7ee29c2..a7ec924 100644 --- a/backend/nft_market/services/algorand.py +++ b/backend/nft_market/services/algorand.py @@ -1,3 +1,6 @@ +import base64 + +import requests from algosdk.v2client.algod import AlgodClient from algosdk.v2client.indexer import IndexerClient from django.conf import settings @@ -7,3 +10,75 @@ indexer = IndexerClient( settings.PURESTAKE_API_KEY, settings.PURESTAKE_INDEXER_URL, headers ) + + +class Explorer: + def search_transactions( + self, + limit=None, + next_page=None, + note_prefix=None, + txn_type=None, + sig_type=None, + txid=None, + min_round=None, + max_round=None, + asset_id=None, + start_time=None, + end_time=None, + min_amount=None, + max_amount=None, + address=None, + address_role=None, + exclude_close_to=False, + application_id=None, + rekey_to=False, + ): + query = dict() + if limit: + query["limit"] = limit + if next_page: + query["next"] = next_page + if note_prefix: + query["note-prefix"] = base64.b64encode(note_prefix).decode() + if txn_type: + query["tx-type"] = txn_type + if sig_type: + query["sig-type"] = sig_type + if txid: + query["txid"] = txid + if min_round: + query["min-round"] = min_round + if max_round: + query["max-round"] = max_round + if asset_id: + query["asset-id"] = asset_id + if end_time: + query["before-time"] = end_time + if start_time: + query["after-time"] = start_time + if min_amount: + query["currency-greater-than"] = min_amount + if max_amount: + query["currency-less-than"] = max_amount + if address: + query["address"] = address + if address_role: + query["address-role"] = address_role + if exclude_close_to: + query["exclude-close-to"] = "true" + if application_id: + query["application-id"] = application_id + if rekey_to: + query["rekey-to"] = "true" + r = requests.get( + "https://testnet.algoexplorerapi.io/idx2/v2/transactions", + params=query, + headers={ + "content-type": "application/json", + }, + ) + return r.json() + + +explorer = Explorer() diff --git a/backend/poetry.lock b/backend/poetry.lock index 40022d0..1a89a7b 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -804,7 +804,7 @@ python-versions = "*" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "f013141ba0858269e00951b69305bb7a6e3ac34bf5efb6a5c7aad5dba6bfdce8" +content-hash = "65a7bf9c10cb56a293e9f077a298257cf4dcdfa3588b73c37ed988a3e0c54742" [metadata.files] amqp = [ diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 99e1517..f77f3ba 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -19,6 +19,7 @@ uWSGI = "^2.0.19" dj-database-url = "^0.5.0" django-storages = {extras = ["google"], version = "^1.11.1"} psycopg2-binary = "^2.8.6" +requests = "^2.25.1" [tool.poetry.dev-dependencies] black = "^20.8b1"