Look for the correct assets
This commit is contained in:
parent
ec64c2e0e1
commit
5265d1a234
|
@ -4,7 +4,7 @@ import base64
|
|||
import dataclasses
|
||||
import requests_cache
|
||||
from collections.abc import Iterator
|
||||
|
||||
import logging
|
||||
|
||||
HTML_INDEX = """
|
||||
|
||||
|
@ -94,7 +94,12 @@ TEST_NOTAMON = Notamon(
|
|||
)
|
||||
|
||||
ADDRESS_NFTS = '02b82d36784146bd29415dbaa623a5f1cf6e6e1108'
|
||||
ADDRESS_ASSETS = '0338d039e3960426d0cfc590efbdbef70b049696a3'
|
||||
ADDRESS_ASSETS = '036080dc8a15e496e5b970f65112b4fe4ac022e62c'
|
||||
|
||||
|
||||
ASSET_ID_OFFSET_SPECIES = 0x0100_0000
|
||||
ASSET_ID_OFFSET_SKIN = 0x0200_0000
|
||||
ASSET_ID_OFFSET_EFFECT = 0x0300_0000
|
||||
|
||||
SESSION = requests_cache.CachedSession()
|
||||
|
||||
|
@ -119,10 +124,8 @@ def get_asset_variables(client, address) -> Iterator[AssetVariable]:
|
|||
asset_contract_state, _ = client.get_contract_state(ADDRESS_ASSETS)
|
||||
|
||||
for variable in asset_contract_state['variables']:
|
||||
print(variable)
|
||||
|
||||
asset_id = int.from_bytes(base64.b64decode(variable['value']['information']['data']))
|
||||
opened = decode_opened_variable(variable['value']['openValue']['data']) if variable['value']['openValue'] else None
|
||||
opened = decode_opened_variable(variable['value']['openValue']['data']) if 'openValue' in variable['value'] else None
|
||||
|
||||
yield AssetVariable(
|
||||
variable_id = variable['key'],
|
||||
|
@ -155,28 +158,38 @@ def get_notamon_nfts(client: pbc_client.PbcClient) -> Iterator[NotamonNFTData]:
|
|||
)
|
||||
|
||||
|
||||
def nft_to_notamon_view(nft: NotamonNFTData, assets) -> Notamon:
|
||||
def get_asset(assets, asset_type_id, asset_type_offset) -> bytes | None:
|
||||
asset_id = asset_type_id | asset_type_offset
|
||||
asset = assets.get(asset_id)
|
||||
if asset is None:
|
||||
app.logger.error('Unknown asset with id %s = %s | %s', asset_id, asset_type_id, asset_type_offset)
|
||||
return None
|
||||
asset = asset.opened
|
||||
if asset is None:
|
||||
app.logger.warning('Secret asset with id %s = %s | %s', asset_id, asset_type_id, asset_type_offset)
|
||||
return asset
|
||||
|
||||
def nft_to_notamon_view(nft: NotamonNFTData, assets) -> Notamon | None:
|
||||
species_image_bytes = get_asset(assets, nft.species_id, ASSET_ID_OFFSET_SPECIES)
|
||||
effect_str = get_asset(assets, nft.effect_id, ASSET_ID_OFFSET_EFFECT)
|
||||
|
||||
if species_image_bytes is None or effect_str is None:
|
||||
return None
|
||||
|
||||
return Notamon(
|
||||
image_src = to_base64_png(assets[nft.species_id]),
|
||||
effect_css = to_base64_png(assets[nft.effect_id]),
|
||||
image_src = to_base64_png(species_image_bytes),
|
||||
effect_css = effect_str,
|
||||
nickname = nft.nickname,
|
||||
species_name = 'Mudkip',
|
||||
)
|
||||
|
||||
def select_notamons():
|
||||
client = pbc_client.PbcClient(SESSION, pbc_client.HOSTNAME_TESTNET)
|
||||
|
||||
nfts = list(get_notamon_nfts(client))
|
||||
print(nfts)
|
||||
|
||||
|
||||
print(client)
|
||||
assets = list(get_asset_variables(client, ADDRESS_ASSETS))
|
||||
print(assets )
|
||||
|
||||
return [nft_to_notamon_view(nft, assets) for nft in nfts]
|
||||
assets = {v.asset_id: v for v in get_asset_variables(client, ADDRESS_ASSETS)}
|
||||
notamon_views = [nft_to_notamon_view(nft, assets) for nft in nfts]
|
||||
return [n for n in notamon_views if n is not None]
|
||||
|
||||
@app.route("/")
|
||||
def hello_world():
|
||||
return flask.render_template_string(HTML_INDEX, notamons = select_notamons())
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user