MultiChain / multichain-explorer

Web-based explorer for MultiChain blockchains
GNU Affero General Public License v3.0
177 stars 140 forks source link

Its posibble look output in json format #30

Open seyacat opened 6 years ago

seyacat commented 6 years ago

Its posibble look output in json format. like http://127.0.0.1:7074/Celtoken/assetaddress/1F46cSAjr9mQnh8e21sx4fFEbs324A1tLzYcU8/181-267-63185?format=json

ty for your help

seyacat commented 6 years ago

i can reformat handler like this in Mce/abe.py

http://127.0.0.1:7074/Celtoken/getaddressbalances/17iZJ8gbitwcMeufCzgNNb2XmreMJwRGGPpEPR

{"hash": 1, "result": [{"qty": 2498, "name": "celtoken", "assetref": "181-267-63185"}], "error": null}

hope someone helps

def handle_getaddressbalances(abe, page): chain = page['chain'] page['template'] = "%(body)s"

    page['body'] = "";
    #page['body'] += "ok";

    #page['body'] +=json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=4, separators=(',', ': '));

    data = {};
    data["result"] = [];
    address = wsgiref.util.shift_path_info(page['env'])
    if address in (None, '') or page['env']['PATH_INFO'] != '':
        raise PageNotFound()
    version, pubkeyhash = util.decode_check_address_multichain(address)
    if pubkeyhash is None:
        raise PageNotFound()

    try:
        row = abe.store.selectrow("""select pubkey_id from pubkey where pubkey_hash = ?""",
                                  (abe.store.binin(pubkeyhash),) )
        assets_resp = abe.store.get_assets(chain)
        if len(assets_resp) is 0:
            body += ['None']
        elif row is not None:
            pubkey_id = int(row[0])                

            assetdict = {}
            for asset in assets_resp:
                # use escaped form as dict key
                name = asset.get('name','').encode('unicode-escape')
                assetdict[name] = asset
            print(assetdict);
            for row in abe.store.selectall("""
                select a.name, a.prefix, b.balance from asset_address_balance b join asset a on (a.asset_id=b.asset_id)
                where b.balance>0 and b.pubkey_id=?""",
                                   (pubkey_id, )):
                name, prefix, balance = row
                if name is None:
                    name=''
                name = name.encode('unicode-escape')
                asset = assetdict[ name ]
                assetref = asset['assetref']

                num_tx = abe.store.get_number_of_transactions_for_asset_address(chain, assetref, pubkey_id)

                if assetref.endswith(str(prefix)):
                    balance_display_qty = util.format_display_quantity(asset, balance)

                    #{"result":[{"name":"celtoken","assetref":"181-267-63185","qty":2466}],"error":null,"id":1510266218,"hash":"aee3bc630b94161ca2817f1f8b326328"}
                    print(escape(chain.name))
                    data["result"].append({"name":name,"assetref":assetref,"qty":balance})
            #body += ['</table>']
        data["error"]=None;
        data["hash"]=1;
    except Exception as e:
        print( ['<div class="alert alert-danger" role="alert">', 'Failed to get asset information: '+str(e), '</div>']);
        data["error"]=str(e);
        data["hash"]=1;
        pass
    page['body'] += json.dumps(data);
    return;