Last active
January 22, 2025 00:16
-
-
Save killerstorm/095faa9cb5183839d54b68cfef92ddc5 to your computer and use it in GitHub Desktop.
ChromiaPyClientExample.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"authorship_tag": "ABX9TyM87uT7Y5PvIcvV8YIrcfrU", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/killerstorm/095faa9cb5183839d54b68cfef92ddc5/chromiapyclientexample.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "HnRgGTGB-nJL", | |
"outputId": "121e869c-def6-4472-a3c3-ec446840a3d6", | |
"collapsed": true | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Requirement already satisfied: postchain-client-py in /usr/local/lib/python3.11/dist-packages (0.1.4)\n" | |
] | |
} | |
], | |
"source": [ | |
"!pip install -q postchain-client-py" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from postchain_client_py import BlockchainClient\n", | |
"from postchain_client_py.blockchain_client.types import NetworkSettings, Operation, Transaction\n", | |
"from postchain_client_py.blockchain_client.enums import FailoverStrategy\n", | |
"\n", | |
"settings = NetworkSettings(\n", | |
" # nodes from cluster your blockchain is from; current version of client does not auto-discover nodes from\n", | |
" # the directory chain, you can find them on https://explorer.chromia.com\n", | |
"\n", | |
" # this is system cluster\n", | |
" node_url_pool=[\"https://system.chromaway.com:7740\"],\n", | |
"\n", | |
" # id of a specific blockchain we connect to\n", | |
" # this is economy chain running on system cluster\n", | |
" blockchain_rid=\"15C0CA99BEE60A3B23829968771C50E491BD00D2E3AE448580CD48A8D71E7BBA\",\n", | |
")\n", | |
"\n", | |
"client = await BlockchainClient.create(settings)\n" | |
], | |
"metadata": { | |
"id": "HPBsXq4a-x3L" | |
}, | |
"execution_count": 2, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import json\n", | |
"\n", | |
"# we can get application structure from the chain itself,\n", | |
"# this is equivalent of ABI in Ethereum\n", | |
"\n", | |
"app_structure = await client.query(\"rell.get_app_structure\")\n", | |
"\n", | |
"print(\"Queries by module\")\n", | |
"\n", | |
"queries = {}\n", | |
"for module in app_structure[\"modules\"]:\n", | |
" print(module)\n", | |
" if \"queries\" not in app_structure[\"modules\"][module]:\n", | |
" continue\n", | |
" for query in app_structure[\"modules\"][module][\"queries\"]:\n", | |
" query_data = app_structure[\"modules\"][module][\"queries\"][query]\n", | |
" queries[query_data[\"mount\"]] = query_data\n", | |
" print(\" \", query_data[\"mount\"])" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "66leBNOaCCEQ", | |
"outputId": "b1955a04-9ec1-42fb-a0be-77156d49e1b0" | |
}, | |
"execution_count": 3, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Queries by module\n", | |
"chain_version\n", | |
" release_commit\n", | |
" release_version\n", | |
"common_consensus\n", | |
"common_proposal\n", | |
" get_common_proposal\n", | |
" get_common_proposal_voter_info\n", | |
" get_common_proposal_voting_results\n", | |
" get_common_proposals_range\n", | |
" get_common_pubkey_votes\n", | |
" get_common_voter_set_members\n", | |
" get_common_voter_sets\n", | |
" get_relevant_common_proposals\n", | |
"constants\n", | |
"economy_chain\n", | |
" api_version\n", | |
" does_account_require_memo\n", | |
" find_dapp_details\n", | |
" get_all_bridge_leases_for_blockchain\n", | |
" get_all_bridge_leases_for_container\n", | |
" get_assign_subnode_image_to_container_ticket_by_id\n", | |
" get_assign_subnode_image_to_container_ticket_by_transaction\n", | |
" get_available_subnode_images_for_all_clusters\n", | |
" get_available_subnode_images_for_cluster\n", | |
" get_balance\n", | |
" get_blockchains_with_bridge_and_anomaly_detection\n", | |
" get_bridge_lease_for_blockchain\n", | |
" get_chr_asset\n", | |
" get_chromia_foundation_voter_set_info\n", | |
" get_cluster_by_name\n", | |
" get_cluster_change_tag_proposal\n", | |
" get_cluster_create_proposal\n", | |
" get_cluster_creation_status\n", | |
" get_clusters\n", | |
" get_create_container_ticket_by_id\n", | |
" get_create_container_ticket_by_transaction\n", | |
" get_dapp_provider_creation_cost\n", | |
" get_ec_voter_set_update_proposal\n", | |
" get_economy_constants\n", | |
" get_economy_metrics\n", | |
" get_economy_metrics_per_node\n", | |
" get_economy_metrics_per_provider_nodes\n", | |
" get_econony_constants_proposal\n", | |
" get_ft4_account_ids\n", | |
" get_lease_by_container_name\n", | |
" get_lease_purchases\n", | |
" get_lease_purchases_by_account\n", | |
" get_lease_refunds\n", | |
" get_lease_refunds_by_account\n", | |
" get_leases_by_account\n", | |
" get_max_lease_duration\n", | |
" get_min_lease_duration\n", | |
" get_minting_proposal\n", | |
" get_pool_account_id_query\n", | |
" get_pool_balance\n", | |
" get_price_oracle_rate_proposal\n", | |
" get_price_oracle_rates\n", | |
" get_propose_transfer_chromia_foundation_funds_proposal\n", | |
" get_provider_account_id\n", | |
" get_provider_performance_metrics\n", | |
" get_provider_performance_metrics_last_30_days\n", | |
" get_provider_performance_metrics_last_365_days\n", | |
" get_provider_performance_metrics_last_7_days\n", | |
" get_provider_staking_status\n", | |
" get_provisional_stake_balance\n", | |
" get_staking_requirement_constants_proposal\n", | |
" get_system_provider_economy_constants_proposal\n", | |
" get_tag_by_name\n", | |
" get_tag_proposal\n", | |
" get_tags\n", | |
" get_total_provisional_stake\n", | |
" get_total_provisional_stake_accounts\n", | |
" get_upgrade_container_ticket_by_id\n", | |
" get_upgrade_container_ticket_by_transaction\n", | |
" staking_get_all_shared_rewards_paid\n", | |
" staking_get_balance\n", | |
" staking_get_cannot_change_before\n", | |
" staking_get_current_delegate\n", | |
" staking_get_current_delegate_on_network\n", | |
" staking_get_current_rate\n", | |
" staking_get_native_balance\n", | |
" staking_get_next_delegation_change\n", | |
" staking_get_number_of_delegates_to\n", | |
" staking_get_provider_stake\n", | |
" staking_get_rewards_paid\n", | |
" staking_get_rewards_start\n", | |
" staking_get_shared_rewards_paid\n", | |
" staking_get_total_delegation_to\n", | |
" staking_get_withdrawal_time\n", | |
" staking_rewards_claimable_for\n", | |
" staking_rewards_for\n", | |
" staking_total_accounts\n", | |
" staking_total_accounts_on_network\n", | |
" staking_total_delegated\n", | |
" staking_total_delegation_accounts\n", | |
" staking_total_stake\n", | |
" staking_total_stake_on_network\n", | |
" total_lease_investment\n", | |
"economy_chain_prod\n", | |
"lib.eif.common\n", | |
"lib.eif.messaging\n", | |
"lib.eif.utils\n", | |
"lib.eif.version\n", | |
" eif.api_version\n", | |
"lib.ft4\n", | |
"lib.ft4.accounts\n", | |
"lib.ft4.accounts.strategies\n", | |
"lib.ft4.accounts.strategies.transfer\n", | |
"lib.ft4.accounts.strategies.transfer.fee\n", | |
"lib.ft4.accounts.strategies.transfer.open\n", | |
"lib.ft4.assets\n", | |
"lib.ft4.auth\n", | |
"lib.ft4.core.accounts\n", | |
"lib.ft4.core.accounts.strategies\n", | |
"lib.ft4.core.accounts.strategies.transfer\n", | |
" ft4.get_allowed_assets\n", | |
" ft4.get_pending_transfer_strategies\n", | |
" ft4.get_transfer_rules\n", | |
" ft4.has_pending_create_account_transfer_for_strategy\n", | |
"lib.ft4.core.accounts.strategies.transfer.fee\n", | |
" ft4.get_fee_assets\n", | |
"lib.ft4.core.accounts.strategies.transfer.open\n", | |
"lib.ft4.core.assets\n", | |
"lib.ft4.core.auth\n", | |
"lib.ft4.core.crosschain\n", | |
"lib.ft4.crosschain\n", | |
"lib.ft4.external.accounts\n", | |
" ft4.get_account_auth_descriptor_by_id\n", | |
" ft4.get_account_auth_descriptors\n", | |
" ft4.get_account_auth_descriptors_by_signer\n", | |
" ft4.get_account_by_id\n", | |
" ft4.get_account_main_auth_descriptor\n", | |
" ft4.get_account_rate_limit_last_update\n", | |
" ft4.get_accounts_by_auth_descriptor_id\n", | |
" ft4.get_accounts_by_signer\n", | |
" ft4.get_accounts_by_type\n", | |
" ft4.get_auth_descriptor_counter\n", | |
" ft4.get_config\n", | |
" ft4.is_auth_descriptor_valid\n", | |
"lib.ft4.external.accounts.strategies\n", | |
" ft4.get_enabled_registration_strategies\n", | |
" ft4.get_register_account_message\n", | |
"lib.ft4.external.assets\n", | |
" ft4.get_all_assets\n", | |
" ft4.get_asset_balance\n", | |
" ft4.get_asset_balances\n", | |
" ft4.get_asset_by_id\n", | |
" ft4.get_asset_details_for_crosschain_registration\n", | |
" ft4.get_assets_by_name\n", | |
" ft4.get_assets_by_symbol\n", | |
" ft4.get_assets_by_type\n", | |
" ft4.get_transfer_details\n", | |
" ft4.get_transfer_details_by_asset\n", | |
" ft4.get_transfer_history\n", | |
" ft4.get_transfer_history_entry\n", | |
" ft4.get_transfer_history_from_height\n", | |
"lib.ft4.external.auth\n", | |
" ft4.get_all_auth_handlers\n", | |
" ft4.get_auth_flags\n", | |
" ft4.get_auth_handler_for_operation\n", | |
" ft4.get_auth_message_template\n", | |
" ft4.get_first_allowed_auth_descriptor\n", | |
" ft4.get_first_allowed_auth_descriptor_by_signers\n", | |
" ft4.get_login_config\n", | |
"lib.ft4.external.crosschain\n", | |
" ft4.crosschain.get_apply_transfer_tx\n", | |
" ft4.crosschain.get_asset_origin_by_id\n", | |
" ft4.crosschain.get_last_pending_transfer_for_account\n", | |
" ft4.crosschain.get_pending_transfers_for_account\n", | |
" ft4.crosschain.is_transfer_applied\n", | |
"lib.ft4.utils\n", | |
"lib.ft4.version\n", | |
" ft4.get_version\n", | |
"lib.hbridge\n", | |
" eif.hbridge.are_snapshots_enabled_for_asset\n", | |
" eif.hbridge.get_account_for_eoa_address\n", | |
" eif.hbridge.get_account_for_sc_address\n", | |
" eif.hbridge.get_bridge_contracts\n", | |
" eif.hbridge.get_eoa_addresses_for_account\n", | |
" eif.hbridge.get_erc20_deposit_history\n", | |
" eif.hbridge.get_erc20_deposits\n", | |
" eif.hbridge.get_erc20_for_asset\n", | |
" eif.hbridge.get_erc20_withdrawal\n", | |
" eif.hbridge.get_erc20_withdrawal_by_event_hash\n", | |
" eif.hbridge.get_erc20_withdrawal_by_id\n", | |
" eif.hbridge.get_erc20_withdrawal_by_tx\n", | |
" eif.hbridge.get_erc20_withdrawal_history\n", | |
" eif.hbridge.get_erc20_withdrawals\n", | |
" eif.hbridge.get_registered_erc20_assets\n", | |
" eif.hbridge.get_sc_addresses_for_account\n", | |
" eif.hbridge.get_state_slot_ids_for_account\n", | |
" eif.hbridge.get_state_slot_ids_for_address\n", | |
" eif.hbridge.get_withdrawal_state_slot_ids_for_address\n", | |
"lib.iccf\n", | |
"lib.icmf\n", | |
"lib.icmf.constants\n", | |
"lib.icmf.receiver\n", | |
"lib.price_oracle_messages\n", | |
"lib.transaction_submitter_messaging\n", | |
"messaging.blockchain_rid\n", | |
"messaging.bridge_mapping\n", | |
"messaging.economy_chain\n", | |
"messaging.economy_chain_staking\n", | |
"messaging.node_availability_reporting\n", | |
"provider_auth\n", | |
"provider_auth.model\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print(queries[\"ft4.get_assets_by_symbol\"])" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "MojTtJImA6s9", | |
"outputId": "8d45faae-1ff8-4c47-fa12-b3c498fd0c1a" | |
}, | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"{'mount': 'ft4.get_assets_by_symbol', 'parameters': [{'name': 'symbol', 'type': 'text'}, {'name': 'page_size', 'type': {'type': 'nullable', 'value': 'integer'}}, {'name': 'page_cursor', 'type': {'type': 'nullable', 'value': 'text'}}], 'type': 'lib.ft4.utils:paged_result'}\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"def describe_query(query_name):\n", | |
" \"\"\"\n", | |
" Describes the query parameters and output type based on the global `queries` dictionary.\n", | |
"\n", | |
" Args:\n", | |
" query_name: The name of the query to describe.\n", | |
" \"\"\"\n", | |
"\n", | |
" if query_name not in queries:\n", | |
" print(f\"Query '{query_name}' not found.\")\n", | |
" return\n", | |
"\n", | |
" query_data = queries[query_name]\n", | |
" print(f\"Query: {query_name}\")\n", | |
" print(\"Parameters:\")\n", | |
" for param in query_data.get(\"parameters\", []):\n", | |
" param_name = param[\"name\"]\n", | |
" param_type = param[\"type\"]\n", | |
"\n", | |
" if isinstance(param_type, dict):\n", | |
" param_type_str = f\"{param_type['type']}({param_type['value']})\"\n", | |
" else:\n", | |
" param_type_str = param_type\n", | |
"\n", | |
" print(f\" - {param_name}: {param_type_str}\")\n", | |
" print(f\"Output Type: {query_data.get('type')}\")\n" | |
], | |
"metadata": { | |
"id": "ojhpz1YMKViX" | |
}, | |
"execution_count": 5, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print(describe_query(\"ft4.get_assets_by_symbol\"))" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "J48c5aWVVX12", | |
"outputId": "d8dbb15c-89f9-4411-97af-05180fd634e1" | |
}, | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Query: ft4.get_assets_by_symbol\n", | |
"Parameters:\n", | |
" - symbol: text\n", | |
" - page_size: nullable(integer)\n", | |
" - page_cursor: nullable(text)\n", | |
"Output Type: lib.ft4.utils:paged_result\n", | |
"None\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"chr_asset = await client.query(\"ft4.get_assets_by_symbol\", {\"symbol\":\"CHR\", \"page_size\":None, \"page_cursor\":None})\n", | |
"chr_asset" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "TOf5J1gnEu4t", | |
"outputId": "32744c47-d5b8-4efa-dcc6-c40e38286a44" | |
}, | |
"execution_count": 7, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{'data': [{'blockchain_rid': '15C0CA99BEE60A3B23829968771C50E491BD00D2E3AE448580CD48A8D71E7BBA',\n", | |
" 'decimals': 6,\n", | |
" 'icon_url': 'https://assets.chromia.com/chr.png',\n", | |
" 'id': '5F16D1545A0881F971B164F1601CBBF51C29EFD0633B2730DA18C403C3B428B5',\n", | |
" 'name': 'Chromia',\n", | |
" 'supply': '85929786728814',\n", | |
" 'symbol': 'CHR',\n", | |
" 'type': 'ft4'}],\n", | |
" 'next_cursor': None}" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 7 | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment