Skip to content

Commit 50f8feb

Browse files
authored
Merge pull request #139 from AtomicalsBuilder/fix-bug
Add flag for find_container, find_ticker, find_realm, etc for is_verified_only=True
2 parents 1352665 + e6de179 commit 50f8feb

File tree

2 files changed

+45
-17
lines changed

2 files changed

+45
-17
lines changed

electrumx/server/http_session.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -490,21 +490,34 @@ async def atomical_id_get_ft_info(self, compact_atomical_id):
490490
return atomical_in_mempool
491491

492492
# Perform a search for tickers, containers, realms, subrealms
493-
def atomicals_search_name_template(self, db_prefix, name_type_str, parent_prefix=None, prefix=None, Reverse=False, Limit=100, Offset=0):
493+
def atomicals_search_name_template(self, db_prefix, name_type_str, parent_prefix=None, prefix=None, Reverse=False, Limit=100, Offset=0, is_verified_only=True):
494494
search_prefix = b''
495495
if prefix:
496496
search_prefix = prefix.encode()
497497

498498
db_entries = self.db.get_name_entries_template_limited(db_prefix, parent_prefix, search_prefix, Reverse, Limit, Offset)
499499
formatted_results = []
500500
for item in db_entries:
501+
if name_type_str == "ticker":
502+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'tick', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.ticker_data_cache)
503+
elif name_type_str == "realm":
504+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'rlm', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.realm_data_cache)
505+
elif name_type_str == "collection":
506+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'co', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.container_data_cache)
507+
elif name_type_str == "subrealm":
508+
status, _, _ = self.session_mgr.bp.get_effective_subrealm(parent_prefix, item['name'], self.session_mgr.bp.height)
509+
501510
obj = {
502511
'atomical_id': location_id_bytes_to_compact(item['atomical_id']),
503512
'tx_num': item['tx_num']
504513
}
505514
obj[name_type_str] = item['name']
506515
obj[name_type_str + '_hex'] = item.get('name_hex')
507-
formatted_results.append(obj)
516+
obj['status'] = status
517+
if is_verified_only and status == "verified":
518+
formatted_results.append(obj)
519+
elif not is_verified_only:
520+
formatted_results.append(obj)
508521
return {'result': formatted_results}
509522

510523
def auto_populate_container_dmint_items_fields(self, items):
@@ -1876,15 +1889,17 @@ async def atomicals_search_tickers(self, request):
18761889
Reverse = params.get(1, False)
18771890
Limit = params.get(2, 100)
18781891
Offset = params.get(3, 0)
1879-
return self.atomicals_search_name_template(b'tick', 'ticker', None, prefix, Reverse, Limit, Offset)
1892+
is_verified_only = params.get(4, True)
1893+
return self.atomicals_search_name_template(b'tick', 'ticker', None, prefix, Reverse, Limit, Offset, is_verified_only)
18801894

18811895
async def atomicals_search_realms(self, request):
18821896
params = await self.format_params(request)
18831897
prefix = params.get(0, None)
18841898
Reverse = params.get(1, False)
18851899
Limit = params.get(2, 100)
18861900
Offset = params.get(3, 0)
1887-
return self.atomicals_search_name_template(b'rlm', 'realm', None, prefix, Reverse, Limit, Offset)
1901+
is_verified_only = params.get(4, True)
1902+
return self.atomicals_search_name_template(b'rlm', 'realm', None, prefix, Reverse, Limit, Offset, is_verified_only)
18881903

18891904
async def atomicals_search_subrealms(self, request):
18901905
params = await self.format_params(request)
@@ -1893,17 +1908,18 @@ async def atomicals_search_subrealms(self, request):
18931908
Reverse = params.get(2, False)
18941909
Limit = params.get(3, 100)
18951910
Offset = params.get(4, 0)
1911+
is_verified_only = params.get(5, True)
18961912
parent_realm_id_long_form = compact_to_location_id_bytes(parent_realm_id_compact)
1897-
return self.atomicals_search_name_template(b'srlm', 'subrealm', parent_realm_id_long_form, prefix, Reverse, Limit, Offset)
1913+
return self.atomicals_search_name_template(b'srlm', 'subrealm', parent_realm_id_long_form, prefix, Reverse, Limit, Offset, is_verified_only)
18981914

18991915
async def atomicals_search_containers(self, request):
19001916
params = await self.format_params(request)
19011917
prefix = params.get(0, None)
19021918
Reverse = params.get(1, False)
19031919
Limit = params.get(2, 100)
19041920
Offset = params.get(3, 0)
1905-
1906-
return self.atomicals_search_name_template(b'co', 'collection', None, prefix, Reverse, Limit, Offset)
1921+
is_verified_only = params.get(4, True)
1922+
return self.atomicals_search_name_template(b'co', 'collection', None, prefix, Reverse, Limit, Offset, is_verified_only)
19071923

19081924
async def atomicals_get_holders(self, request):
19091925
'''Return the holder by a specific location id```

electrumx/server/session.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2053,39 +2053,51 @@ def populate_rules_response_struct(parent_atomical_id, struct_to_populate, Verbo
20532053
return {'result': return_struct}
20542054

20552055
# Perform a search for tickers, containers, and realms
2056-
def atomicals_search_name_template(self, db_prefix, name_type_str, parent_prefix=None, prefix=None, Reverse=False, Limit=1000, Offset=0):
2056+
def atomicals_search_name_template(self, db_prefix, name_type_str, parent_prefix=None, prefix=None, Reverse=False, Limit=1000, Offset=0, is_verified_only=True):
20572057
db_entries = self.db.get_name_entries_template_limited(db_prefix, parent_prefix, prefix, Reverse, Limit, Offset)
20582058
formatted_results = []
20592059
for item in db_entries:
2060+
if name_type_str == "ticker":
2061+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'tick', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.ticker_data_cache)
2062+
elif name_type_str == "realm":
2063+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'rlm', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.realm_data_cache)
2064+
elif name_type_str == "collection":
2065+
status, _, _ = self.session_mgr.bp.get_effective_name_template(b'co', item['name'], self.session_mgr.bp.height, self.session_mgr.bp.container_data_cache)
2066+
elif name_type_str == "subrealm":
2067+
status, _, _ = self.session_mgr.bp.get_effective_subrealm(parent_prefix, item['name'], self.session_mgr.bp.height)
20602068
obj = {
20612069
'atomical_id': location_id_bytes_to_compact(item['atomical_id']),
20622070
'tx_num': item['tx_num']
20632071
}
20642072
obj[name_type_str + '_hex'] = item['name_hex']
20652073
obj[name_type_str] = item['name']
2066-
formatted_results.append(obj)
2074+
obj['status'] = status
2075+
if is_verified_only and status == "verified":
2076+
formatted_results.append(obj)
2077+
elif not is_verified_only:
2078+
formatted_results.append(obj)
20672079
return {'result': formatted_results}
20682080

2069-
async def atomicals_search_tickers(self, prefix=None, Reverse=False, Limit=100, Offset=0):
2081+
async def atomicals_search_tickers(self, prefix=None, Reverse=False, Limit=100, Offset=0, is_verified_only=True):
20702082
if isinstance(prefix, str):
20712083
prefix = prefix.encode()
2072-
return self.atomicals_search_name_template(b'tick', 'ticker', None, prefix, Reverse, Limit, Offset)
2084+
return self.atomicals_search_name_template(b'tick', 'ticker', None, prefix, Reverse, Limit, Offset, is_verified_only)
20732085

2074-
async def atomicals_search_realms(self, prefix=None, Reverse=False, Limit=100, Offset=0):
2086+
async def atomicals_search_realms(self, prefix=None, Reverse=False, Limit=100, Offset=0, is_verified_only=True):
20752087
if isinstance(prefix, str):
20762088
prefix = prefix.encode()
2077-
return self.atomicals_search_name_template(b'rlm', 'realm', None, prefix, Reverse, Limit, Offset)
2089+
return self.atomicals_search_name_template(b'rlm', 'realm', None, prefix, Reverse, Limit, Offset, is_verified_only)
20782090

2079-
async def atomicals_search_subrealms(self, parent_realm_id_compact, prefix=None, Reverse=False, Limit=100, Offset=0):
2091+
async def atomicals_search_subrealms(self, parent_realm_id_compact, prefix=None, Reverse=False, Limit=100, Offset=0, is_verified_only=True):
20802092
parent_realm_id_long_form = compact_to_location_id_bytes(parent_realm_id_compact)
20812093
if isinstance(prefix, str):
20822094
prefix = prefix.encode()
2083-
return self.atomicals_search_name_template(b'srlm', 'subrealm', parent_realm_id_long_form, prefix, Reverse, Limit, Offset)
2095+
return self.atomicals_search_name_template(b'srlm', 'subrealm', parent_realm_id_long_form, prefix, Reverse, Limit, Offset, is_verified_only)
20842096

2085-
async def atomicals_search_containers(self, prefix=None, Reverse=False, Limit=100, Offset=0):
2097+
async def atomicals_search_containers(self, prefix=None, Reverse=False, Limit=100, Offset=0, is_verified_only=True):
20862098
if isinstance(prefix, str):
20872099
prefix = prefix.encode()
2088-
return self.atomicals_search_name_template(b'co', 'collection', None, prefix, Reverse, Limit, Offset)
2100+
return self.atomicals_search_name_template(b'co', 'collection', None, prefix, Reverse, Limit, Offset, is_verified_only)
20892101

20902102
async def atomicals_at_location(self, compact_location_id):
20912103
'''Return the Atomicals at a specific location id```

0 commit comments

Comments
 (0)