From 3b819cd5cf4afa98f3b6eb2dcc438630fcfef74e Mon Sep 17 00:00:00 2001 From: BlackPanda <46260610+B14ckP4nd4@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:20:51 +0000 Subject: [PATCH] feat: Add extra TonCenter API endpoints and utility methods - Added support for the following TonCenter API methods in `TonCenterClient`: - `get_address_information`: Fetches general information about a given address. - `get_wallet_information`: Retrieves wallet-specific details for a given address. - `get_extended_address_information`: Provides extended information for a given address. - Added utility functions: - `from_nanotons(amount)`: Converts nanotons to tons. - `to_nanotons(amount)`: Converts tons to nanotons. These changes extend the capability to work with more endpoints and improve TON amount conversions. --- TonTools/Providers/TonCenterClient.py | 48 +++++++++++++++++++++++++-- TonTools/Providers/utils.py | 6 ++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/TonTools/Providers/TonCenterClient.py b/TonTools/Providers/TonCenterClient.py index 97849ec..fed25f7 100644 --- a/TonTools/Providers/TonCenterClient.py +++ b/TonTools/Providers/TonCenterClient.py @@ -11,7 +11,7 @@ from ..Contracts.Contract import Transaction from ..Contracts.Wallet import Wallet from ..Contracts.Jetton import Jetton, JettonWallet -from .utils import markets_adresses, get, process_jetton_data +from .utils import markets_adresses, get, process_jetton_data, from_nanotons from ._orbs_ton_access import get_http_endpoint @@ -303,7 +303,7 @@ async def get_wallet_seqno(self, address: str): data = await self.run_get_method(address=address, method='seqno', stack=[]) return int(data[0][1], 16) - async def get_balance(self, address: str): + async def get_balance(self, address: str,convert_nanotons=False): async with aiohttp.ClientSession() as session: url = self.base_url + 'getAddressBalance' params = { @@ -311,7 +311,49 @@ async def get_balance(self, address: str): } response = await session.get(url=url, params=params, headers=self.headers) response = await process_response(response) - return int(response['result']) + balance = int(response['result']) + + return balance if not convert_nanotons else from_nanotons(balance) + + async def get_address_information(self, address: str): + async with aiohttp.ClientSession() as session: + url = self.base_url + 'getAddressInformation' + params = { + 'address': address + } + response = await session.get(url=url, params=params, headers=self.headers) + response = await process_response(response) + return response['result'] + + async def get_wallet_information(self, address: str): + async with aiohttp.ClientSession() as session: + url = self.base_url + 'getWalletInformation' + params = { + 'address': address + } + response = await session.get(url=url, params=params, headers=self.headers) + response = await process_response(response) + return response['result'] + + async def get_extended_address_information(self, address: str): + async with aiohttp.ClientSession() as session: + url = self.base_url + 'getExtendedAddressInformation' + params = { + 'address': address + } + response = await session.get(url=url, params=params, headers=self.headers) + response = await process_response(response) + return response['result'] + + async def get_extended_address_information(self, address: str): + async with aiohttp.ClientSession() as session: + url = self.base_url + 'getExtendedAddressInformation' + params = { + 'address': address + } + response = await session.get(url=url, params=params, headers=self.headers) + response = await process_response(response) + return response['result'] async def get_state(self, address: str): async with aiohttp.ClientSession() as session: diff --git a/TonTools/Providers/utils.py b/TonTools/Providers/utils.py index b43d685..4705617 100644 --- a/TonTools/Providers/utils.py +++ b/TonTools/Providers/utils.py @@ -39,6 +39,12 @@ def process_jetton_data(data): 'decimals': int(decimals) } +def from_nanotons(amount): + return amount / 1000000000 + +def to_nanotons(amount): + return amount * 1000000000 + async def get(url: str): if 'ipfs' in url: