From c567ebf3b44991eba0e50c833502ccff9b6884b4 Mon Sep 17 00:00:00 2001 From: Snedashkovsky Date: Wed, 19 Jul 2023 12:41:14 +0800 Subject: [PATCH] - add export to a contract - add query examples from a contract - update config - update readme - update requirements --- README.md | 5 +- asset_data.ipynb | 115 ++++++++++++++++++++++++++++++----------- asset_data.py | 13 ++--- config.py | 21 ++++++-- requirements.txt | 3 ++ src/contract_export.py | 103 ++++++++++++++++++++++++++++++++++++ src/lcd_extractor.py | 4 +- 7 files changed, 216 insertions(+), 48 deletions(-) create mode 100644 src/contract_export.py diff --git a/README.md b/README.md index b0d2f77d0..f49f4abc0 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,13 @@ On-chain based data allows to view all existing assets.

- [**chain-registry like data**](data_json) - [**csv data**](data_csv) -- **contracts** ([code](cw-on-chain-registry/contracts/on-chain-registry)) +- **contracts** ([code](https://github.com/Snedashkovsky/cw-on-chain-registry/tree/main/contracts/on-chain-registry), +[schema](https://github.com/Snedashkovsky/cw-on-chain-registry/tree/main/contracts/on-chain-registry/schema)) - [bostrom](https://cyb.ai/contracts/bostrom1eeahgvdsun8a04rh5vy9je49nllq6nj8ljmaslsvjeyg0j0063mssjcjmt) ## Asset Data Structure We use chain-registry like [asset data structure](assetlist.schema.json) for better compatibility. -Differences from [chain-registry asset data structure](chain-registry/assetlist.schema.json): +Differences from [chain-registry asset data structure](https://github.com/cosmos/chain-registry/blob/master/assetlist.schema.json): - add `chain_id` required property; - `denom_units`, `display`, `name` and `symbol` asset object properties are optional - add `chain_id` required property in asset traces section diff --git a/asset_data.ipynb b/asset_data.ipynb index 0cee679de..835ffb1d8 100644 --- a/asset_data.ipynb +++ b/asset_data.ipynb @@ -22,15 +22,14 @@ "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "\n", + "from src.contract_export import contract_query\n", + "from config import CONTRACT_ADDRESS\n", + "\n", "filterwarnings('ignore')\n", "tqdm.pandas()" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.411557Z", - "start_time": "2023-07-18T03:11:58.797444Z" - } + "collapsed": false } }, { @@ -48,8 +47,8 @@ "outputs": [ { "data": { - "text/plain": " chain_name chain_id \\\n0 realio realionetwork_3301-1 \n1 loyal loyal-main-02 \n2 loyal loyal-main-02 \n3 xpla dimension_37-1 \n4 xpla dimension_37-1 \n... ... ... \n11411 terra2 phoenix-1 \n11412 terra2 phoenix-1 \n11413 terra2 phoenix-1 \n11414 terra2 phoenix-1 \n11415 terra2 phoenix-1 \n\n denom type_asset \\\n0 ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE1... ics20 \n1 ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1... ics20 \n2 ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F... ics20 \n3 ibc/2CC0B1B7A981ACC74854717F221008484603BB8360... ics20 \n4 ibc/6771714762A6F8F541DE7C461F09C68F310621315F... ics20 \n... ... ... \n11411 cw20:terra1x62mjnme4y0rdnag3r8rfgjuutsqlkkyuh4... cw20 \n11412 cw20:terra17gck626vgax9jpe6utm7dhx4vdzawfkt0jh... cw20 \n11413 cw20:terra1xzkel96e5e8vfmqw7valzdzzv9hqasfyslc... cw20 \n11414 cw20:terra1xp9hrhthzddnl7j5du83gqqr4wmdjm5t0gu... cw20 \n11415 cw20:terra14xsm2wzvu7xaf567r693vgfkhmvfs08l68h... cw20 \n\n supply description \\\n0 1000 The native token of Osmosis \n1 100000 NaN \n2 1000000 NaN \n3 600098 NaN \n4 93300000000000000 NaN \n... ... ... \n11411 132499372296110 NaN \n11412 93000000000000 NaN \n11413 6564511713902 NaN \n11414 100000000000000 NaN \n11415 342589469078 NaN \n\n denom_units display \\\n0 [{'denom': 'uosmo', 'exponent': 0, 'aliases': ... osmo \n1 None NaN \n2 None NaN \n3 None NaN \n4 None NaN \n... ... ... \n11411 [{'denom': 'xastro', 'exponent': 6, 'aliases':... NaN \n11412 [{'denom': 'dust', 'exponent': 6, 'aliases': [... NaN \n11413 [{'denom': 'local', 'exponent': 6, 'aliases': ... NaN \n11414 [{'denom': 'sayve', 'exponent': 6, 'aliases': ... NaN \n11415 [{'denom': 'lunax', 'exponent': 6, 'aliases': ... NaN \n\n name symbol ... denom_base type_asset_base \\\n0 NaN NaN ... uosmo sdk.coin \n1 NaN NaN ... uosmo sdk.coin \n2 NaN NaN ... uaxl sdk.coin \n3 NaN NaN ... uaxl sdk.coin \n4 NaN NaN ... wavax-wei sdk.coin \n... ... ... ... ... ... \n11411 Staked Astroport xASTRO ... NaN NaN \n11412 Depegged UST dUST ... NaN NaN \n11413 Local Terra Token (Wormhole) LOCAL ... NaN NaN \n11414 Sayve Token SAYVE ... NaN NaN \n11415 Stader LunaX Token LunaX ... NaN NaN \n\n path channels chain_id_counterparty \\\n0 transfer/channel-0 [channel-0] osmosis-1 \n1 transfer/channel-1 [channel-1] osmo-test-4 \n2 transfer/channel-2 [channel-2] axelar-testnet-lisbon-3 \n3 transfer/channel-0 [channel-0] axelar-dojo-1 \n4 transfer/channel-0 [channel-0] axelar-dojo-1 \n... ... ... ... \n11411 NaN None NaN \n11412 NaN None NaN \n11413 NaN None NaN \n11414 NaN None NaN \n11415 NaN None NaN \n\n channel_id_counterparty supply_base chain_id_base \\\n0 channel-1011 605276664611957 osmosis-1 \n1 channel-2463 NaN NaN \n2 channel-165 NaN NaN \n3 channel-49 1076502807145169 axelar-dojo-1 \n4 channel-49 11859121968723491769117 axelar-dojo-1 \n... ... ... ... \n11411 NaN NaN NaN \n11412 NaN NaN NaN \n11413 NaN NaN NaN \n11414 NaN NaN NaN \n11415 NaN NaN NaN \n\n one_channel admin \n0 True NaN \n1 True NaN \n2 True NaN \n3 True NaN \n4 True NaN \n... ... ... \n11411 NaN NaN \n11412 NaN NaN \n11413 NaN NaN \n11414 NaN NaN \n11415 NaN NaN \n\n[11416 rows x 21 columns]", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
chain_namechain_iddenomtype_assetsupplydescriptiondenom_unitsdisplaynamesymbol...denom_basetype_asset_basepathchannelschain_id_counterpartychannel_id_counterpartysupply_basechain_id_baseone_channeladmin
0realiorealionetwork_3301-1ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE1...ics201000The native token of Osmosis[{'denom': 'uosmo', 'exponent': 0, 'aliases': ...osmoNaNNaN...uosmosdk.cointransfer/channel-0[channel-0]osmosis-1channel-1011605276664611957osmosis-1TrueNaN
1loyalloyal-main-02ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1...ics20100000NaNNoneNaNNaNNaN...uosmosdk.cointransfer/channel-1[channel-1]osmo-test-4channel-2463NaNNaNTrueNaN
2loyalloyal-main-02ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F...ics201000000NaNNoneNaNNaNNaN...uaxlsdk.cointransfer/channel-2[channel-2]axelar-testnet-lisbon-3channel-165NaNNaNTrueNaN
3xpladimension_37-1ibc/2CC0B1B7A981ACC74854717F221008484603BB8360...ics20600098NaNNoneNaNNaNNaN...uaxlsdk.cointransfer/channel-0[channel-0]axelar-dojo-1channel-491076502807145169axelar-dojo-1TrueNaN
4xpladimension_37-1ibc/6771714762A6F8F541DE7C461F09C68F310621315F...ics2093300000000000000NaNNoneNaNNaNNaN...wavax-weisdk.cointransfer/channel-0[channel-0]axelar-dojo-1channel-4911859121968723491769117axelar-dojo-1TrueNaN
..................................................................
11411terra2phoenix-1cw20:terra1x62mjnme4y0rdnag3r8rfgjuutsqlkkyuh4...cw20132499372296110NaN[{'denom': 'xastro', 'exponent': 6, 'aliases':...NaNStaked AstroportxASTRO...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11412terra2phoenix-1cw20:terra17gck626vgax9jpe6utm7dhx4vdzawfkt0jh...cw2093000000000000NaN[{'denom': 'dust', 'exponent': 6, 'aliases': [...NaNDepegged USTdUST...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11413terra2phoenix-1cw20:terra1xzkel96e5e8vfmqw7valzdzzv9hqasfyslc...cw206564511713902NaN[{'denom': 'local', 'exponent': 6, 'aliases': ...NaNLocal Terra Token (Wormhole)LOCAL...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11414terra2phoenix-1cw20:terra1xp9hrhthzddnl7j5du83gqqr4wmdjm5t0gu...cw20100000000000000NaN[{'denom': 'sayve', 'exponent': 6, 'aliases': ...NaNSayve TokenSAYVE...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11415terra2phoenix-1cw20:terra14xsm2wzvu7xaf567r693vgfkhmvfs08l68h...cw20342589469078NaN[{'denom': 'lunax', 'exponent': 6, 'aliases': ...NaNStader LunaX TokenLunaX...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
\n

11416 rows × 21 columns

\n
" + "text/plain": " chain_name chain_id \\\n0 realio realionetwork_3301-1 \n1 loyal loyal-main-02 \n2 loyal loyal-main-02 \n3 xpla dimension_37-1 \n4 xpla dimension_37-1 \n... ... ... \n11411 terra2 phoenix-1 \n11412 terra2 phoenix-1 \n11413 terra2 phoenix-1 \n11414 terra2 phoenix-1 \n11415 terra2 phoenix-1 \n\n denom type_asset \\\n0 ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE1... ics20 \n1 ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1... ics20 \n2 ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F... ics20 \n3 ibc/2CC0B1B7A981ACC74854717F221008484603BB8360... ics20 \n4 ibc/6771714762A6F8F541DE7C461F09C68F310621315F... ics20 \n... ... ... \n11411 cw20:terra1x62mjnme4y0rdnag3r8rfgjuutsqlkkyuh4... cw20 \n11412 cw20:terra17gck626vgax9jpe6utm7dhx4vdzawfkt0jh... cw20 \n11413 cw20:terra1xzkel96e5e8vfmqw7valzdzzv9hqasfyslc... cw20 \n11414 cw20:terra1xp9hrhthzddnl7j5du83gqqr4wmdjm5t0gu... cw20 \n11415 cw20:terra14xsm2wzvu7xaf567r693vgfkhmvfs08l68h... cw20 \n\n supply description \\\n0 1000 The native token of Osmosis \n1 100000 NaN \n2 1000000 NaN \n3 600098 NaN \n4 93300000000000000 NaN \n... ... ... \n11411 132230954536554 NaN \n11412 93000000000000 NaN \n11413 6564511713902 NaN \n11414 100000000000000 NaN \n11415 342672749394 NaN \n\n denom_units display \\\n0 [{'denom': 'uosmo', 'exponent': 0, 'aliases': ... osmo \n1 None NaN \n2 None NaN \n3 None NaN \n4 None NaN \n... ... ... \n11411 [{'denom': 'xastro', 'exponent': 6, 'aliases':... NaN \n11412 [{'denom': 'dust', 'exponent': 6, 'aliases': [... NaN \n11413 [{'denom': 'local', 'exponent': 6, 'aliases': ... NaN \n11414 [{'denom': 'sayve', 'exponent': 6, 'aliases': ... NaN \n11415 [{'denom': 'lunax', 'exponent': 6, 'aliases': ... NaN \n\n name symbol ... denom_base type_asset_base \\\n0 NaN NaN ... uosmo sdk.coin \n1 NaN NaN ... uosmo sdk.coin \n2 NaN NaN ... uaxl sdk.coin \n3 NaN NaN ... uaxl sdk.coin \n4 NaN NaN ... wavax-wei sdk.coin \n... ... ... ... ... ... \n11411 Staked Astroport xASTRO ... NaN NaN \n11412 Depegged UST dUST ... NaN NaN \n11413 Local Terra Token (Wormhole) LOCAL ... NaN NaN \n11414 Sayve Token SAYVE ... NaN NaN \n11415 Stader LunaX Token LunaX ... NaN NaN \n\n path channels chain_id_counterparty \\\n0 transfer/channel-0 [channel-0] osmosis-1 \n1 transfer/channel-1 [channel-1] osmo-test-4 \n2 transfer/channel-2 [channel-2] axelar-testnet-lisbon-3 \n3 transfer/channel-0 [channel-0] axelar-dojo-1 \n4 transfer/channel-0 [channel-0] axelar-dojo-1 \n... ... ... ... \n11411 NaN None NaN \n11412 NaN None NaN \n11413 NaN None NaN \n11414 NaN None NaN \n11415 NaN None NaN \n\n channel_id_counterparty supply_base chain_id_base \\\n0 channel-1011 605276664611957 osmosis-1 \n1 channel-2463 NaN NaN \n2 channel-165 NaN NaN \n3 channel-49 1076502807145169 axelar-dojo-1 \n4 channel-49 11859121968723491769117 axelar-dojo-1 \n... ... ... ... \n11411 NaN NaN NaN \n11412 NaN NaN NaN \n11413 NaN NaN NaN \n11414 NaN NaN NaN \n11415 NaN NaN NaN \n\n one_channel admin \n0 True NaN \n1 True NaN \n2 True NaN \n3 True NaN \n4 True NaN \n... ... ... \n11411 NaN NaN \n11412 NaN NaN \n11413 NaN NaN \n11414 NaN NaN \n11415 NaN NaN \n\n[11416 rows x 21 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
chain_namechain_iddenomtype_assetsupplydescriptiondenom_unitsdisplaynamesymbol...denom_basetype_asset_basepathchannelschain_id_counterpartychannel_id_counterpartysupply_basechain_id_baseone_channeladmin
0realiorealionetwork_3301-1ibc/ED07A3391A112B175915CD8FAF43A2DA8E4790EDE1...ics201000The native token of Osmosis[{'denom': 'uosmo', 'exponent': 0, 'aliases': ...osmoNaNNaN...uosmosdk.cointransfer/channel-0[channel-0]osmosis-1channel-1011605276664611957osmosis-1TrueNaN
1loyalloyal-main-02ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1...ics20100000NaNNoneNaNNaNNaN...uosmosdk.cointransfer/channel-1[channel-1]osmo-test-4channel-2463NaNNaNTrueNaN
2loyalloyal-main-02ibc/C0E66D1C81D8AAF0E6896E05190FDFBC222367148F...ics201000000NaNNoneNaNNaNNaN...uaxlsdk.cointransfer/channel-2[channel-2]axelar-testnet-lisbon-3channel-165NaNNaNTrueNaN
3xpladimension_37-1ibc/2CC0B1B7A981ACC74854717F221008484603BB8360...ics20600098NaNNoneNaNNaNNaN...uaxlsdk.cointransfer/channel-0[channel-0]axelar-dojo-1channel-491076502807145169axelar-dojo-1TrueNaN
4xpladimension_37-1ibc/6771714762A6F8F541DE7C461F09C68F310621315F...ics2093300000000000000NaNNoneNaNNaNNaN...wavax-weisdk.cointransfer/channel-0[channel-0]axelar-dojo-1channel-4911859121968723491769117axelar-dojo-1TrueNaN
..................................................................
11411terra2phoenix-1cw20:terra1x62mjnme4y0rdnag3r8rfgjuutsqlkkyuh4...cw20132230954536554NaN[{'denom': 'xastro', 'exponent': 6, 'aliases':...NaNStaked AstroportxASTRO...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11412terra2phoenix-1cw20:terra17gck626vgax9jpe6utm7dhx4vdzawfkt0jh...cw2093000000000000NaN[{'denom': 'dust', 'exponent': 6, 'aliases': [...NaNDepegged USTdUST...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11413terra2phoenix-1cw20:terra1xzkel96e5e8vfmqw7valzdzzv9hqasfyslc...cw206564511713902NaN[{'denom': 'local', 'exponent': 6, 'aliases': ...NaNLocal Terra Token (Wormhole)LOCAL...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11414terra2phoenix-1cw20:terra1xp9hrhthzddnl7j5du83gqqr4wmdjm5t0gu...cw20100000000000000NaN[{'denom': 'sayve', 'exponent': 6, 'aliases': ...NaNSayve TokenSAYVE...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
11415terra2phoenix-1cw20:terra14xsm2wzvu7xaf567r693vgfkhmvfs08l68h...cw20342672749394NaN[{'denom': 'lunax', 'exponent': 6, 'aliases': ...NaNStader LunaX TokenLunaX...NaNNaNNaNNoneNaNNaNNaNNaNNaNNaN
\n

11416 rows × 21 columns

\n
" }, "execution_count": 2, "metadata": {}, @@ -64,11 +63,7 @@ "assets_df" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.565480Z", - "start_time": "2023-07-18T03:11:59.413174Z" - } + "collapsed": false } }, { @@ -93,11 +88,7 @@ " return assets_by_item" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.568828Z", - "start_time": "2023-07-18T03:11:59.566960Z" - } + "collapsed": false } }, { @@ -111,11 +102,7 @@ "total_assets = len(assets_df)" ], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.684507Z", - "start_time": "2023-07-18T03:11:59.570937Z" - } + "collapsed": false } }, { @@ -152,25 +139,93 @@ "\n", "plt.show()" ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "markdown", + "source": [ + "## contract query" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "data": { + "text/plain": "{'data': {'chain_name': 'bostrom',\n 'assets': [{'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'boot',\n 'type_asset': 'sdk.coin',\n 'supply': '1154470652565248',\n 'description': 'The staking token of Bostrom',\n 'denom_units': [{'denom': 'boot', 'exponent': 0, 'aliases': ['BOOT']}],\n 'address': None,\n 'admin': None,\n 'name': 'Bostrom Boot',\n 'display': 'boot',\n 'symbol': 'BOOT',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'hydrogen',\n 'type_asset': 'sdk.coin',\n 'supply': '299717359227738',\n 'description': 'The liquid staking token of Bostrom',\n 'denom_units': [{'denom': 'hydrogen',\n 'exponent': 0,\n 'aliases': ['HYDROGEN']}],\n 'address': None,\n 'admin': None,\n 'name': 'Bostrom Hydrogen',\n 'display': 'hydrogen',\n 'symbol': 'HYDROGEN',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/13B2C536BB057AC79D5616B8EA1B9540EC1F2170718CAFF6F0083C966FFFED0B',\n 'type_asset': 'ics20',\n 'supply': '56887105909',\n 'description': 'The native token of Osmosis',\n 'denom_units': [{'denom': 'uosmo', 'exponent': 0, 'aliases': []},\n {'denom': 'osmo', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': 'osmo',\n 'symbol': None,\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uosmo',\n 'chain_id': 'osmosis-1',\n 'port': None,\n 'channel_id': 'channel-95',\n 'chain_name': 'osmosis',\n 'contract': None,\n 'base_supply': '605276664611957'},\n 'chain': {'port': None,\n 'channel_id': 'channel-2',\n 'path': 'transfer/channel-2/uosmo'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-2',\n 'dst_channel': 'channel-95',\n 'source_denom': 'uosmo',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/15E9C5CF5969080539DB395FA7D9C0868265217EFC528433671AAF9B1912D159',\n 'type_asset': 'ics20',\n 'supply': '13370195152',\n 'description': 'The native staking token of the Cosmos Hub.',\n 'denom_units': [{'denom': 'uatom',\n 'exponent': 0,\n 'aliases': ['microatom']},\n {'denom': 'matom', 'exponent': 3, 'aliases': ['milliatom']},\n {'denom': 'atom', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'Cosmos Hub Atom',\n 'display': 'atom',\n 'symbol': 'ATOM',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uatom',\n 'chain_id': 'cosmoshub-4',\n 'port': None,\n 'channel_id': 'channel-341',\n 'chain_name': 'cosmoshub',\n 'contract': None,\n 'base_supply': '354473502116410'},\n 'chain': {'port': None,\n 'channel_id': 'channel-8',\n 'path': 'transfer/channel-8/uatom'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-8',\n 'dst_channel': 'channel-341',\n 'source_denom': 'uatom',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/1DE3244B072A8939517C17C7B679F3B735B2D9AA6BE91CF5B04D01B645B33701',\n 'type_asset': 'ics20',\n 'supply': '100000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/29FC7F418F1EFB5DAB3DD089AADA1FE406DC78633BFF3D3E2B3D767368AC083D',\n 'type_asset': 'ics20',\n 'supply': '160000',\n 'description': 'The power token of Space-pussy',\n 'denom_units': [{'denom': 'milliampere', 'exponent': 0, 'aliases': []},\n {'denom': 'ampere', 'exponent': 3, 'aliases': ['AMPERE']}],\n 'address': None,\n 'admin': None,\n 'name': 'Space-pussy Ampere',\n 'display': 'ampere',\n 'symbol': 'AMPERE',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'milliampere',\n 'chain_id': 'space-pussy',\n 'port': None,\n 'channel_id': 'channel-0',\n 'chain_name': 'space-pussy',\n 'contract': None,\n 'base_supply': '249987039144'},\n 'chain': {'port': None,\n 'channel_id': 'channel-11',\n 'path': 'transfer/channel-11/milliampere'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-11',\n 'dst_channel': 'channel-0',\n 'source_denom': 'milliampere',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/32C4CC556FB73E889DF1A7836A29951F1087525240FF9EEF6AEB616A83C6C9AC',\n 'type_asset': 'ics20',\n 'supply': '599900',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/3554989531C7DB295D548F373FE93205215CAC2820A62D748E5A3703044D481E',\n 'type_asset': 'ics20',\n 'supply': '4000000',\n 'description': 'The native staking token of the Gravity Bridge Blockchain',\n 'denom_units': [{'denom': 'ugraviton',\n 'exponent': 0,\n 'aliases': ['ugrav']},\n {'denom': 'graviton', 'exponent': 6, 'aliases': ['grav']}],\n 'address': None,\n 'admin': None,\n 'name': 'Graviton',\n 'display': 'graviton',\n 'symbol': 'GRAV',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'ugraviton',\n 'chain_id': 'gravity-bridge-3',\n 'port': None,\n 'channel_id': 'channel-33',\n 'chain_name': 'gravitybridge',\n 'contract': None,\n 'base_supply': '2564231284465423'},\n 'chain': {'port': None,\n 'channel_id': 'channel-6',\n 'path': 'transfer/channel-6/ugraviton'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-6',\n 'dst_channel': 'channel-33',\n 'source_denom': 'ugraviton',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/40A19DA7BB2E2275ABC84D0823D6C30E6F49FF541E111395A97CFA019BFED6CA',\n 'type_asset': 'ics20',\n 'supply': '558975',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/43DB7553C43D81CB01E9A2644B49A241314B482C2E56F86E85A6539C60383151',\n 'type_asset': 'ics20',\n 'supply': '809011589660872',\n 'description': 'The staking token of space-pussy',\n 'denom_units': [{'denom': 'pussy', 'exponent': 0, 'aliases': ['PUSSY']}],\n 'address': None,\n 'admin': None,\n 'name': 'Pussy token',\n 'display': 'pussy',\n 'symbol': 'PUSSY',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'pussy',\n 'chain_id': 'space-pussy',\n 'port': None,\n 'channel_id': 'channel-0',\n 'chain_name': 'space-pussy',\n 'contract': None,\n 'base_supply': '1019715120543483586'},\n 'chain': {'port': None,\n 'channel_id': 'channel-11',\n 'path': 'transfer/channel-11/pussy'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-11',\n 'dst_channel': 'channel-0',\n 'source_denom': 'pussy',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/47160B934644DED2F8E605B0521C6CC06F75A0465D8B7F2846A318B3B45D4834',\n 'type_asset': 'ics20',\n 'supply': '35149',\n 'description': 'The bandwidth token of Space-pussy',\n 'denom_units': [{'denom': 'millivolt', 'exponent': 0, 'aliases': []},\n {'denom': 'volt', 'exponent': 3, 'aliases': ['VOLT']}],\n 'address': None,\n 'admin': None,\n 'name': 'Space-pussy Volt',\n 'display': 'volt',\n 'symbol': 'VOLT',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'millivolt',\n 'chain_id': 'space-pussy',\n 'port': None,\n 'channel_id': 'channel-0',\n 'chain_name': 'space-pussy',\n 'contract': None,\n 'base_supply': '46951923442'},\n 'chain': {'port': None,\n 'channel_id': 'channel-11',\n 'path': 'transfer/channel-11/millivolt'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-11',\n 'dst_channel': 'channel-0',\n 'source_denom': 'millivolt',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/4B322204B4F59D770680FE4D7A565DDC3F37BFF035474B717476C66A4F83DD72',\n 'type_asset': 'ics20',\n 'supply': '235799273989001301706',\n 'description': 'The native EVM, governance and staking token of the Evmos Hub',\n 'denom_units': [{'denom': 'aevmos',\n 'exponent': 0,\n 'aliases': ['attoevmos']},\n {'denom': 'evmos', 'exponent': 18, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'Evmos',\n 'display': 'evmos',\n 'symbol': 'EVMOS',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'aevmos',\n 'chain_id': 'evmos_9001-2',\n 'port': None,\n 'channel_id': 'channel-19',\n 'chain_name': 'evmos',\n 'contract': None,\n 'base_supply': '736424403223327770047682972'},\n 'chain': {'port': None,\n 'channel_id': 'channel-9',\n 'path': 'transfer/channel-9/aevmos'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-9',\n 'dst_channel': 'channel-19',\n 'source_denom': 'aevmos',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/5711BC92C095B0A50F0E7F6684ABD5CABB6EE93F0096ED3A84952C0C73C94719',\n 'type_asset': 'ics20',\n 'supply': '10000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/5F78C42BCC76287AE6B3185C6C1455DFFF8D805B1847F94B9B625384B93885C7',\n 'type_asset': 'ics20',\n 'supply': '150000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/8D9262E35CAE362FA74AE05E430550757CF8D842EC1B241F645D3CB7179AFD10',\n 'type_asset': 'ics20',\n 'supply': '3950597414',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'ujuno',\n 'chain_id': 'juno-1',\n 'port': None,\n 'channel_id': 'channel-93',\n 'chain_name': 'juno',\n 'contract': None,\n 'base_supply': '104540471230421'},\n 'chain': {'port': None,\n 'channel_id': 'channel-10',\n 'path': 'transfer/channel-10/ujuno'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-10',\n 'dst_channel': 'channel-93',\n 'source_denom': 'ujuno',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/913F49D47DDB9DD8FD4E846E6522822AF9F99C5FFBDD4330908E6977706ED97C',\n 'type_asset': 'ics20',\n 'supply': '42',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/9B45B8C514B76D792BEC4850AE601E0E73CE7D307A567F34038432FC80D74780',\n 'type_asset': 'ics20',\n 'supply': '366525708234985',\n 'description': 'The liquid staking token of Space-pussy',\n 'denom_units': [{'denom': 'liquidpussy',\n 'exponent': 0,\n 'aliases': ['LIQUIDPUSSY']}],\n 'address': None,\n 'admin': None,\n 'name': 'liquidpussy',\n 'display': 'liquidpussy',\n 'symbol': 'LIQUIDPUSSY',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'liquidpussy',\n 'chain_id': 'space-pussy',\n 'port': None,\n 'channel_id': 'channel-0',\n 'chain_name': 'space-pussy',\n 'contract': None,\n 'base_supply': '45324512234631700'},\n 'chain': {'port': None,\n 'channel_id': 'channel-11',\n 'path': 'transfer/channel-11/liquidpussy'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-11',\n 'dst_channel': 'channel-0',\n 'source_denom': 'liquidpussy',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/B35B29C176E29BD9C348F72FA4DCF2AB68BB38085584EEC46ED0E1EBED8DB53D',\n 'type_asset': 'ics20',\n 'supply': '10',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/B6CAD3F7469F3FAD18ED2230A6C7B15E654AB2E1B66E1C70879C04FEF874A863',\n 'type_asset': 'ics20',\n 'supply': '32284944172127363421',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': {'source_channel': 'channel-12',\n 'dst_channel': 'channel-103',\n 'source_denom': 'gravity0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/BA313C4A19DFBF943586C0387E6B11286F9E416B4DD27574E6909CABE0E342FA',\n 'type_asset': 'ics20',\n 'supply': '226734246',\n 'description': 'The native staking token of the Cosmos Hub.',\n 'denom_units': [{'denom': 'uatom',\n 'exponent': 0,\n 'aliases': ['microatom']},\n {'denom': 'matom', 'exponent': 3, 'aliases': ['milliatom']},\n {'denom': 'atom', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'Cosmos Hub Atom',\n 'display': 'atom',\n 'symbol': 'ATOM',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uatom',\n 'chain_id': 'cosmoshub-4',\n 'port': None,\n 'channel_id': 'channel-240',\n 'chain_name': 'cosmoshub',\n 'contract': None,\n 'base_supply': '354473502116410'},\n 'chain': {'port': None,\n 'channel_id': 'channel-5',\n 'path': 'transfer/channel-5/uatom'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-5',\n 'dst_channel': 'channel-240',\n 'source_denom': 'uatom',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/C23D820C5B6009E544AFC8AF5A2FEC288108AEDBFAEFDBBDD6BE54CC23069559',\n 'type_asset': 'ics20',\n 'supply': '7202236078',\n 'description': 'The native staking token of the Gravity Bridge Blockchain',\n 'denom_units': [{'denom': 'ugraviton',\n 'exponent': 0,\n 'aliases': ['ugrav']},\n {'denom': 'graviton', 'exponent': 6, 'aliases': ['grav']}],\n 'address': None,\n 'admin': None,\n 'name': 'Graviton',\n 'display': 'graviton',\n 'symbol': 'GRAV',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'ugraviton',\n 'chain_id': 'gravity-bridge-3',\n 'port': None,\n 'channel_id': 'channel-103',\n 'chain_name': 'gravitybridge',\n 'contract': None,\n 'base_supply': '2564231284465423'},\n 'chain': {'port': None,\n 'channel_id': 'channel-12',\n 'path': 'transfer/channel-12/ugraviton'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-12',\n 'dst_channel': 'channel-103',\n 'source_denom': 'ugraviton',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/CA5E8F31288514D728AFD1F0533A7F6902AA1192C88C9540F814893C3EAFE244',\n 'type_asset': 'ics20',\n 'supply': '51421155926',\n 'description': 'The token of Desmos',\n 'denom_units': [{'denom': 'udsm', 'exponent': 0, 'aliases': []},\n {'denom': 'DSM', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'Desmos DSM',\n 'display': 'DSM',\n 'symbol': 'DSM',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'udsm',\n 'chain_id': 'desmos-mainnet',\n 'port': None,\n 'channel_id': 'channel-6',\n 'chain_name': 'desmos',\n 'contract': None,\n 'base_supply': '173856459531174'},\n 'chain': {'port': None,\n 'channel_id': 'channel-13',\n 'path': 'transfer/channel-13/udsm'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-13',\n 'dst_channel': 'channel-6',\n 'source_denom': 'udsm',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/CB41EF44BC15C8857B34EA151C8C480706E2A430A677850D3772C8543BD92F3A',\n 'type_asset': 'ics20',\n 'supply': '500000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/D8AC1BB5FA604678F4C5BD3A7D3652B00D6DD3D83556AEB5E6EDD53384D475CA',\n 'type_asset': 'ics20',\n 'supply': '20347',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/EF48E6B1A1A19F47ECAEA62F5670C37C0580E86A9E88498B7E393EB6F49F33C0',\n 'type_asset': 'ics20',\n 'supply': '153000',\n 'description': 'The native staking token of the Cosmos Hub.',\n 'denom_units': [{'denom': 'uatom',\n 'exponent': 0,\n 'aliases': ['microatom']},\n {'denom': 'matom', 'exponent': 3, 'aliases': ['milliatom']},\n {'denom': 'atom', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'Cosmos Hub Atom',\n 'display': 'atom',\n 'symbol': 'ATOM',\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uatom',\n 'chain_id': 'cosmoshub-4',\n 'port': None,\n 'channel_id': 'channel-237',\n 'chain_name': 'cosmoshub',\n 'contract': None,\n 'base_supply': '354473502116410'},\n 'chain': {'port': None,\n 'channel_id': 'channel-4',\n 'path': 'transfer/channel-4/uatom'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-4',\n 'dst_channel': 'channel-237',\n 'source_denom': 'uatom',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'ibc/FA8CE16D380167E62FFD7D34BC0FEEA40DB5506D798D3A3554D64B78593D8906',\n 'type_asset': 'ics20',\n 'supply': '5000000000000000000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'milliampere',\n 'type_asset': 'sdk.coin',\n 'supply': '7596207571',\n 'description': 'The power token of Bostrom',\n 'denom_units': [{'denom': 'milliampere', 'exponent': 0, 'aliases': []},\n {'denom': 'ampere', 'exponent': 3, 'aliases': ['AMPERE']}],\n 'address': None,\n 'admin': None,\n 'name': 'Bostrom Ampere',\n 'display': 'ampere',\n 'symbol': 'AMPERE',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'millivolt',\n 'type_asset': 'sdk.coin',\n 'supply': '777871792',\n 'description': 'The bandwidth token of Bostrom',\n 'denom_units': [{'denom': 'millivolt', 'exponent': 0, 'aliases': []},\n {'denom': 'volt', 'exponent': 3, 'aliases': ['VOLT']}],\n 'address': None,\n 'admin': None,\n 'name': 'Bostrom Volt',\n 'display': 'volt',\n 'symbol': 'VOLT',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool0B7D80CEB5EF865B56CD189BC23203F99EC4009A15AEBB20E32B23638D1DE894',\n 'type_asset': 'pool',\n 'supply': '959914559553',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool1A492174015ABA47066C8569AFF7582C551980840AAE7EBAEFB667347EDDB601',\n 'type_asset': 'pool',\n 'supply': '453744109153',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool27BBCA67F42ED27DFFB6A450966C7EA206ADAA42BA0A1871FADC6C59569F6E8D',\n 'type_asset': 'pool',\n 'supply': '1374482384239',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool3215BC1A427DA452FCC3AE9641AC5D17D736B3943A0DE58223F0BF2F4C8D9BB2',\n 'type_asset': 'pool',\n 'supply': '4812512114386',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool4FD3991B994C4602882E8AEACDA9375F4BBE5116E062E8265844596C340C502F',\n 'type_asset': 'pool',\n 'supply': '6798842404704',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool5D5734E54F485FBAF21DF886EC396F2CBC72203BF050BDE0F99EB94EA37D39E8',\n 'type_asset': 'pool',\n 'supply': '521117703093236',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool5D83035BE0E7AB904379161D3C52FB4C1C392265AC19CE39A864146198610628',\n 'type_asset': 'pool',\n 'supply': '2278087397064',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool70D7610CBA8E94B27BAD7806EBD826F5626C486BBF5C490D1463D72314353C66',\n 'type_asset': 'pool',\n 'supply': '1107353078289672',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool72F72D8646E5FF5AA9C8C6CB4F85EE13C63CD6A15A7757746BD9FC449760CBF2',\n 'type_asset': 'pool',\n 'supply': '33427430427',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool745F45704DFB96E3BAD8223EB91540E08DA279049BDB80665B4B2820CA2EAE7C',\n 'type_asset': 'pool',\n 'supply': '2229059783627',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool79B9E8E233B61B84EA5AE564AB080FC492B4C953A9D8B409F300D9E29716459F',\n 'type_asset': 'pool',\n 'supply': '526078639786973',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool906F3CC4C0F4634031990DB81761BD390890F8A8A80460EBDC6B151254DE7D1D',\n 'type_asset': 'pool',\n 'supply': '78074497012057',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'pool98692450C039BDD30563475A7699A7805075F592A36837A04357F20B0D59C90F',\n 'type_asset': 'pool',\n 'supply': '137968748660266',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolB02CE42B202A71419D2F9EB4996B36C52F1B5B60DAF7D7B1474660A95656C126',\n 'type_asset': 'pool',\n 'supply': '77731369306436',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolB0B2848FDE249D431B50CA59E42C37F41C5A2E11D04470737078D96A43451404',\n 'type_asset': 'pool',\n 'supply': '950000360873',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolBE0F1D1C7FE3E72D18DF1996AB8E76676852A34313D2772E7ED36B041DCAB182',\n 'type_asset': 'pool',\n 'supply': '58516257120',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolD0B5122C1EAB5BE4276EE232D9C493EC9472F9C2655EFF9D307732A812B6455F',\n 'type_asset': 'pool',\n 'supply': '2000000000000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolD8DCE9545B510DE6086A45A8B697250B536B97AF2F679E4BAC097173D674AB0C',\n 'type_asset': 'pool',\n 'supply': '1195819100173',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolE21C556E3469226354EC7AC6BE8452906F678D25F911E5D34F3983E3BA335F5D',\n 'type_asset': 'pool',\n 'supply': '1000000000000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolE32688109702769B49F6471789C4EDE96096D9BFBE21FB4046715D6BC9934674',\n 'type_asset': 'pool',\n 'supply': '1000027358565',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolE479A51F998E2979F89DA9AB897ED45A9AFE4E7DE32BE3D30FB456E58F80D4E9',\n 'type_asset': 'pool',\n 'supply': '45119008179728',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolE734706B12D1672FAC713CA6578F5303AC359E4CE089C1CEDB4320F07E5D970D',\n 'type_asset': 'pool',\n 'supply': '1000000000000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'poolF064538FBA4C66F225BA5C98E608BBB1FAFE16636DEA2AA7B08E35C6E717BC75',\n 'type_asset': 'pool',\n 'supply': '2183121857195',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'bostrom',\n 'chain_id': 'bostrom',\n 'base': 'tocyb',\n 'type_asset': 'sdk.coin',\n 'supply': '1000000000000000',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None}]}}" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "contract_query(query={'get_chain': {'chain_name': 'bostrom'}},\n", + " contract_address=CONTRACT_ADDRESS)" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": "{'data': {'entries': [{'chain_name': '8ball',\n 'chain_id': 'eightball-1',\n 'base': 'ibc/4A3AAD07BC4EBEBC10FC2560EAA3B7A1D3B541B5264ED8E5E13E6B74AC76127B',\n 'type_asset': 'ics20',\n 'supply': '200911',\n 'description': 'The native token of Osmosis',\n 'denom_units': [{'denom': 'uosmo', 'exponent': 0, 'aliases': []},\n {'denom': 'osmo', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': 'osmo',\n 'symbol': None,\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uosmo',\n 'chain_id': 'osmosis-1',\n 'port': None,\n 'channel_id': 'channel-641',\n 'chain_name': 'osmosis',\n 'contract': None,\n 'base_supply': '605276664611957'},\n 'chain': {'port': None,\n 'channel_id': 'channel-16',\n 'path': 'transfer/channel-16/uosmo'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-16',\n 'dst_channel': 'channel-641',\n 'source_denom': 'uosmo',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': '8ball',\n 'chain_id': 'eightball-1',\n 'base': 'ibc/65F2AFA2F7AC0FC1ACA0EC1710A5AB381BF87B25CB74E903C5847ED86CAE213A',\n 'type_asset': 'ics20',\n 'supply': '500',\n 'description': None,\n 'denom_units': [{'denom': 'uion', 'exponent': 0, 'aliases': []},\n {'denom': 'ion', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': 'ion',\n 'symbol': None,\n 'traces': [{'trace_type': 'ibc',\n 'counterparty': {'base_denom': 'uion',\n 'chain_id': 'osmosis-1',\n 'port': None,\n 'channel_id': 'channel-641',\n 'chain_name': 'osmosis',\n 'contract': None,\n 'base_supply': '21294000000'},\n 'chain': {'port': None,\n 'channel_id': 'channel-16',\n 'path': 'transfer/channel-16/uion'},\n 'provider': None}],\n 'ibc': {'source_channel': 'channel-16',\n 'dst_channel': 'channel-641',\n 'source_denom': 'uion',\n 'base_supply': None},\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': '8ball',\n 'chain_id': 'eightball-1',\n 'base': 'uebl',\n 'type_asset': 'sdk.coin',\n 'supply': '74147426974125',\n 'description': None,\n 'denom_units': None,\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': None,\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'acrechain',\n 'chain_id': 'acre_9052-1',\n 'base': 'aacre',\n 'type_asset': 'sdk.coin',\n 'supply': '484471851508930201386651680',\n 'description': 'The native staking and governance token of the Acrechain',\n 'denom_units': [{'denom': 'aacre', 'exponent': 0, 'aliases': ['aacre']},\n {'denom': 'ACRE', 'exponent': 18, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'ACRE',\n 'display': 'ACRE',\n 'symbol': 'ACRE',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None},\n {'chain_name': 'acrechain',\n 'chain_id': 'acre_9052-1',\n 'base': 'erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c',\n 'type_asset': 'sdk.coin',\n 'supply': '63359543701521585972140',\n 'description': 'Cosmos coin token representation of 0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c',\n 'denom_units': [{'denom': 'erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c',\n 'exponent': 0,\n 'aliases': []},\n {'denom': 'ArableUSD', 'exponent': 18, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': 'erc20/0x2Cbea61fdfDFA520Ee99700F104D5b75ADf50B0c',\n 'display': 'ArableUSD',\n 'symbol': 'arUSD',\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None}]}}" + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "contract_query(query={'get_all_assets': {'limit': 5}},\n", + " contract_address=CONTRACT_ADDRESS)" + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": "{'data': {'chain_name': 'osmosis',\n 'asset': {'chain_name': 'osmosis',\n 'chain_id': 'osmosis-1',\n 'base': 'uosmo',\n 'type_asset': 'sdk.coin',\n 'supply': '605276664611957',\n 'description': 'The native token of Osmosis',\n 'denom_units': [{'denom': 'uosmo', 'exponent': 0, 'aliases': []},\n {'denom': 'osmo', 'exponent': 6, 'aliases': []}],\n 'address': None,\n 'admin': None,\n 'name': None,\n 'display': 'osmo',\n 'symbol': None,\n 'traces': None,\n 'ibc': None,\n 'logo_uris': None,\n 'images': None,\n 'coingecko_id': None,\n 'keywords': None}}}" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "contract_query(query={'get_asset': {'chain_name': 'osmosis', 'base': 'uosmo'}},\n", + " contract_address=CONTRACT_ADDRESS)" + ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.908361Z", - "start_time": "2023-07-18T03:11:59.641350Z" + "end_time": "2023-07-19T04:36:56.486245Z", + "start_time": "2023-07-19T04:36:55.646447Z" } } }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "outputs": [], "source": [], "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2023-07-18T03:11:59.909436Z", - "start_time": "2023-07-18T03:11:59.908206Z" - } + "collapsed": false } } ], diff --git a/asset_data.py b/asset_data.py index 20d3652b4..70616a913 100644 --- a/asset_data.py +++ b/asset_data.py @@ -12,6 +12,7 @@ from src.lcd_extractor import extract_assets, get_cw20_token_info from src.chain_registry_extractor import get_chain_names_and_lcd_dicts from src.json_export import get_asset_json_dict +from src.contract_export import save_to_contract filterwarnings('ignore') tqdm.pandas() @@ -44,9 +45,9 @@ def add_cw20(assets_df: pd.DataFrame, for _chain_id, _assets in assets_df[(assets_df.type_asset_base == 'cw20') & (assets_df.one_channel == True)][ ['chain_id_counterparty', 'denom_base']].drop_duplicates().groupby('chain_id_counterparty'): if _chain_id not in chain_id_lcd_dict.keys(): - print(f'{_chain_id} not in chain_id_lcd_dict') + logging.error(f'{_chain_id} not in chain_id_lcd_dict') continue - print(_chain_id) + logging.info(f'Extract cw20 data for {_chain_id}') for _denom in tqdm(_assets['denom_base'].to_list()): _contract = _denom[5:] _cw20_token_info = None @@ -67,13 +68,6 @@ def add_cw20(assets_df: pd.DataFrame, _cw20_token_info_list.append(_cw20_token_info) _cw20_token_info_df = pd.DataFrame(_cw20_token_info_list) - print(_cw20_token_info_df.apply( - lambda x: [{ - "denom": x.symbol.lower(), - "exponent": x.decimals, - "aliases": [x.symbol] - }], - axis=1)) _cw20_token_info_df['denom_units'] = _cw20_token_info_df.apply( lambda x: [{ "denom": x.symbol.lower(), @@ -176,6 +170,7 @@ def run_export() -> None: 'denom_base': ''}) save_to_csv(assets_df=_assets_df) save_to_json(assets_df=_assets_df, chain_id_name_dict=_chain_id_name_dict) + save_to_contract() logging.info(msg=f'extracted {len(_assets_df):>,} assets for {len(set(_assets_df.chain_id.to_list()))} chains') diff --git a/config.py b/config.py index b4c77cc98..94933fb62 100644 --- a/config.py +++ b/config.py @@ -1,20 +1,31 @@ import logging import sys +from dotenv import dotenv_values +from cyber_sdk.client.lcd import LCDClient +from cyber_sdk.key.mnemonic import MnemonicKey + +# logging config logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%d-%m-%Y %H:%M:%S', - handlers=[logging.FileHandler("arbitrage_osmosis.log"), + handlers=[logging.FileHandler("on-chain-registry.log"), logging.StreamHandler(sys.stdout)]) +# extra chains PUSSY_CHAIN_ID = 'space-pussy' PUSSY_CHAIN_NAME = 'space-pussy' PUSSY_NODE_LCD_URL = 'https://lcd.space-pussy.cybernode.ai' - INIT_CHAIN_ID_NAME_DICT = {PUSSY_CHAIN_ID: PUSSY_CHAIN_NAME} INIT_CHAIN_ID_LCD_DICT = {PUSSY_CHAIN_ID: [PUSSY_NODE_LCD_URL]} -CONTRACTS = { - 'bostrom': 'bostrom1eeahgvdsun8a04rh5vy9je49nllq6nj8ljmaslsvjeyg0j0063mssjcjmt' -} +# for export to a contract +CHAIN_ID = 'bostrom' +NODE_RPC_URL = 'https://rpc.bostrom.cybernode.ai:443' +NODE_LCD_URL = 'https://lcd.bostrom.cybernode.ai' +CONTRACT_ADDRESS = 'bostrom1eeahgvdsun8a04rh5vy9je49nllq6nj8ljmaslsvjeyg0j0063mssjcjmt' +LCD_CLIENT = LCDClient(url=NODE_LCD_URL, chain_id=CHAIN_ID) +WALLET_SEED = dotenv_values('.env')['WALLET_SEED'] +WALLET = LCD_CLIENT.wallet(MnemonicKey(mnemonic=WALLET_SEED)) +WALLET_ADDRESS = WALLET.key.acc_address diff --git a/requirements.txt b/requirements.txt index 8c822a6ed..3a3c99727 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,5 @@ pandas tqdm +cyberutils +cyber_sdk +python-dotenv diff --git a/src/contract_export.py b/src/contract_export.py new file mode 100644 index 000000000..8a2a58d49 --- /dev/null +++ b/src/contract_export.py @@ -0,0 +1,103 @@ +import json +import pandas as pd +from tqdm import tqdm +import requests +import base64 + +from cyber_sdk.client.lcd import LCDClient, Wallet +from cyber_sdk.client.lcd.api.tx import BlockTxBroadcastResult +from cyberutils.contract import execute_contract + +from config import logging, CONTRACT_ADDRESS, LCD_CLIENT, WALLET, WALLET_ADDRESS, NODE_LCD_URL + + +def batch(x: list, batch_size: int) -> list[list]: + return [x[_i: _i + batch_size] for _i in range(0, len(x), batch_size)] + + +def contract_query( + contract_address: str, + query: dict, + node_lcd_url: str = NODE_LCD_URL, + display_query: bool = False) -> dict: + """ + Query contract + :param contract_address: contract address + :param query: contract query + :param node_lcd_url: node lcd url + :param display_query: display a query url or not + :return: query result + """ + _query_msg = base64.b64encode(json.dumps(query).encode("utf-8")).decode("utf-8") + _query = f'{node_lcd_url}/cosmwasm/wasm/v1/contract/{contract_address}/smart/{_query_msg}' + if display_query: + logging.info(_query) + return requests.get(_query).json() + + +def save_to_contract( + all_asset_path: str = 'data_json/all_assets.json', + batch_size: int = 150, + contract_address: str = CONTRACT_ADDRESS, + lcd_client: LCDClient = LCD_CLIENT, + wallet: Wallet = WALLET, + wallet_address: str = WALLET_ADDRESS, + fee_denom: str = 'boot', + gas: int = 20_000_000, + memo: str = 'update assets in on-chain-registry') -> list[BlockTxBroadcastResult]: + """ + Save asset data to a contract + :param all_asset_path: path of file with all assets + :param batch_size: number of updated assets in one transaction + :param contract_address: contract address + :param lcd_client: LCD client + :param wallet: sender wallet + :param wallet_address: sender address + :param fee_denom: transaction fee denom + :param gas: gas amount + :param memo: transaction memo + :return: list of transaction results + """ + with open(all_asset_path, 'r') as _all_assets_file: + _all_assets_json = json.load(_all_assets_file) + + _assets_list = [] + for _assets_json in tqdm(_all_assets_json): + _assets = _assets_json['assets'] + for i in range(len(_assets)): + _assets[i]['supply'] = str(_assets[i]['supply']) + _assets[i]['chain_name'] = _assets_json['chain_name'] + _assets[i]['chain_id'] = _assets_json['chain_id'] + if 'traces' in _assets[i].keys(): + for _trace in _assets[i]['traces']: + if 'base_supply' in _trace.keys(): + _trace['base_supply'] = str(_trace['base_supply']) + if 'counterparty' in _trace.keys() and 'base_supply' in _trace['counterparty'].keys(): + _trace['counterparty']['base_supply'] = str(_trace['counterparty']['base_supply']) + if 'type' in _trace.keys(): + _trace['trace_type'] = _trace.pop('type') + _assets_list.extend(_assets) + + _res_list = [] + for _assets_batch in tqdm(batch(_assets_list, batch_size)): + logging.info('Export to contract ' + ', '.join( + [f'{k} {v:>,}' + for k, v in pd.DataFrame(_assets_batch).groupby('chain_name')['chain_name'].agg(pd.value_counts).to_dict().items()] + ) + ) + _res = execute_contract( + execute_msgs=[{'UpdateAssets': { + 'assets': _assets_batch}}], + contract_address=contract_address, + lcd_client=lcd_client, + fee_denom=fee_denom, + wallet=wallet, + sender=wallet_address, + memo=memo, + gas=gas + ) + _res_list.append(_res) + if len(str(_res)) < 500: + logging.error(_res) + + return _res_list diff --git a/src/lcd_extractor.py b/src/lcd_extractor.py index 82df1ec95..d29f7f44d 100644 --- a/src/lcd_extractor.py +++ b/src/lcd_extractor.py @@ -139,9 +139,9 @@ def get_cw20_token_info(contract_address: str, if 'data' in _res.keys(): return _res['data'] if 'code' in _res.keys(): - print(f'{contract_address} {node_lcd_url} Not Implemented') + logging.error(f'{contract_address} {node_lcd_url} Not Implemented') return _res - print(_res) + logging.error(f'{contract_address} {node_lcd_url} Error {_res}') return {}