Name | pytoncenter JSON |
Version |
0.0.13
JSON |
| download |
home_page | |
Summary | |
upload_time | 2024-02-19 20:10:17 |
maintainer | |
docs_url | None |
author | alan890104 |
requires_python | >=3.9,<3.12 |
license | |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Pytoncenter
[![codecov](https://codecov.io/gh/Ton-Dynasty/pytoncenter/graph/badge.svg?token=EjDfnQmBiE)](https://codecov.io/gh/Ton-Dynasty/pytoncenter)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pytoncenter?style=flat)
![GitHub Repo stars](https://img.shields.io/github/stars/Ton-Dynasty/pytoncenter?style=flat)
## Introduction
Pytoncenter is a [TON Center](https://toncenter.com/) client with type hints that introduces advanced features such as **address subscriptions**, **obtaining transaction flows** similar to TON Viewer, **parallel processing of multiple calls**, and **robust debug tools**. Developers can use this package to create TON data analysis platforms, Dapp backends, and other services with enhanced functionality and efficiency.
## Features
Enhance your development workflow with Pytoncenter, offering:
1. **Rich Typing**: Elevate your coding experience with comprehensive typing for improved code clarity and error detection.
2. **Field Validation & Transformation**: Automate data integrity checks and format conversions supported by [Pydantic](https://docs.pydantic.dev/latest/), ensuring data accuracy effortlessly.
3. **TVM Data Format Conversion**: Seamlessly interact with TVM by automatically converting complex data structures like Addresses and Cells, based on C++ Python binding [Tonpy](https://tonpy.dton.io/)
4. **Concurrency & Rate Limiting**: Execute parallel requests smoothly while managing request rates efficiently to maintain optimal performance, thanks to the [aiolimiter](https://aiolimiter.readthedocs.io/en/latest/)
5. **Advanced Simplicity**: Access sophisticated functionalities like transaction subscriptions, message parsing, and method result decoding with ease and simplicity.
6. **V2 & V3 API Support**: Supporting both [V2](https://toncenter.com/api/v2/) and [V3](https://toncenter.com/api/v3/) APIs, Pytoncenter provides a comprehensive range of features for your development needs.
Simplify your development process with our feature-rich package designed for efficiency and ease of use.
## Quick Start
### 1. Install the package
To get started, install Pytoncenter using pip:
```bash
pip3 install pytoncenter
```
### 2. Export the TONCENTER_API_KEY
To use the TON Center API, you need to obtain an API key from the [TON Center](https://toncenter.com/). After obtaining the API key from [@tonapibot](https://t.me/tonapibot), export it as an environment variable:
```bash
export TONCENTER_API_KEY=your_api_key
```
<details>
<summary>Example 1. Get Account Info (API V3)</summary>
This example demonstrates how to obtain account information and jetton wallet balances using the TON Center API V3.
```python
from pytoncenter import get_client
from pytoncenter.v3.models import *
import asyncio
async def main():
client = get_client(version="v3", network="testnet")
my_address = "0QC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQXmw"
account = await client.get_account(GetAccountRequest(address=my_address))
jetton_wallets = await client.get_jetton_wallets(GetJettonWalletsRequest(owner_address=my_address, limit=10))
masters = await client.multicall({w.address: client.get_jetton_masters(w.jetton) for w in jetton_wallets})
print("=== Account Info ===")
print(" -", "Symbol", "TON", "Balance:", account.balance / 1e9)
print("=== Jetton Wallets ===")
for wallet in jetton_wallets:
jetton = masters.get(wallet.address, None)
if jetton is None:
continue
content = jetton.jetton_content
symbol = content.symbol if content else "unknown"
decimals = (content.decimals if content else 0) or 9
print(" -", "Symbol", symbol, "Balance", wallet.balance / 10**decimals)
if __name__ == "__main__":
asyncio.run(main())
```
</details>
<details>
<summary>Example 2. Decode Get Method Result (API V3)</summary>
Here is an example for decoding get method by declaring the decoder and Type of the field explicitly. Decoder will decode the result based on the type of the field. If you are not sure about the type of the field, you can use AutoDecoder to decode the result.
```python
import asyncio
from pprint import pprint
from pytoncenter import get_client
from pytoncenter.decoder import AutoDecoder, JettonDataDecoder
from pytoncenter.v3.models import *
async def main():
client = get_client(version="v3", network="testnet")
req = GetAccountRequest(address="kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A")
account_info = await client.get_account(req)
# Check account status is active
assert account_info.status == "active", "Account is not active"
print("=====================================")
req = RunGetMethodRequest(address="kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A", method="get_jetton_data", stack=[])
result = await client.run_get_method(req)
print(result)
print("===============Jetton Decoder======================")
decoder = JettonDataDecoder()
jetton_data = decoder.decode(result)
pprint(jetton_data, width=120)
print("===============Auto Decoder======================")
decoder = AutoDecoder()
jetton_data = decoder.decode(result)
pprint(jetton_data, width=120)
if __name__ == "__main__":
asyncio.run(main())
```
You may get the following jetton data in the console:
```bash
OrderedDict([('total_supply', 5000000000),
('mintable', True),
('admin_address', EQC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQZ__),
('jetton_content', <CellSlice [9] bits, [1] refs, [A21FCFE4756B6AD7A1E88E65483CCDAB3BBBD9F8AEF5F5060C5FC8A36737AC36] hash>),
('jetton_wallet_code', 'b5ee9c7241022501000a......'),])
```
If you use AutoDecoder, you may get the following result:
```bash
OrderedDict([('idx_0', 5000000000),
('idx_1', -1), # Because auto decoder does not know the type, it will decode the result as number
('idx_2', EQC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQZ__), # Address field will automatically decode to Address object
('idx_3', 'b5ee9c7241022501000a......'), # Cell and Slice will apply b64decode to hex string
('idx_4', 'b5ee9c7241022501000a......'),])
```
However, for jetton data, there is a more efficient way to retreive the result by V3 API.
```python
client = get_client(version="v3", network="testnet")
jettons = await client.get_jetton_masters(GetJettonMastersRequest(address="kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A"))
jetton = jettons[0]
print("Total Supply: ", jetton.total_supply)
print("Mintable: ", jetton.mintable)
print("last transaction lt: ", jetton.last_transaction_lt)
if jetton.jetton_content is not None:
print("Jetton content - Symbol: ", jetton.jetton_content.symbol)
print("Jetton content - Name: ", jetton.jetton_content.name)
print("Jetton content - Decimals: ", jetton.jetton_content.decimals)
print("Jetton content - Image: ", jetton.jetton_content.image)
```
The output will be:
```bash
Total Supply: 5000000000
Mintable: True
last transaction lt: 19051958000005
Jetton content - Symbol: USDT
Jetton content - Name: USDT
Jetton content - Decimals: 6
Jetton content - Image: https://coinhere.io/wp-content/uploads/2020/08/Tether-USDT-icon-1.png
```
</details>
<details>
<summary>Example 3. Client Config Customization</summary>
```python
# you can customize the qps by passing the qps parameter, default is 9.5 if api key is provided, otherwise 1
client = get_client(version="v2", network="mainnet", qps=7.77)
# By default, the client will read the TONCENTER_API_KEY from the environment variable, you can pass the api_key parameter to customize the api key
client = get_client(version="v2", network="mainnet", api_key="you-api-key")
# By default, the client will use the default endpoint by network, you can pass the custom_endpoint parameter to customize the endpoint
client = get_client(version="v3", network="mainnet", qps=3.14, custom_endpoint="https://api.toncenter.com/v3")
```
</details>
<details>
<summary>Example 4. Get transaction trace</summary>
```python
import asyncio
from pytoncenter import get_client
from pytoncenter.v3.models import *
from pytoncenter.address import Address
from pytoncenter.utils import format_trace, create_address_mapping
"""
Take this transaction as example:
https://testnet.tonviewer.com/transaction/84b7c9467a0a24e7a59a5e224e9ef8803563621f4710fe8536ae7803fe245d61
The output transactions should be the whole trace of the transaction. The source transaction hash is
https://testnet.tonviewer.com/transaction/dc40feab455e86fa0736508febed224891c965ef6cbf55f5ec309247e8d38664
"""
async def main():
client = get_client(version="v3", network="testnet")
trace = await client.get_trace_alternative(GetTransactionTraceRequest(hash="84b7c9467a0a24e7a59a5e224e9ef8803563621f4710fe8536ae7803fe245d61", sort="asc"))
addr_mapping = create_address_mapping(
{
Address("0QApdUMEOUuHnBo-RSdbikkZZ3qWItZLdXjyff9lN_eS5Zib"): "Alan Wallet V4",
Address("kQCQ1B7B7-CrvxjsqgYT90s7weLV-IJB2w08DBslDdrIXucv"): "Alan USD Jetton Wallet",
Address("kQDO_0Z0SuVpqpaNE0dPxUiFCNDpdR4ODW9KQAwgQGwc5wiB"): "Oracle Jetton Wallet",
Address("kQCpk40ub48fvx89vSUjOTRy0vOEEZ4crOPPfLEvg88q1EeH"): "Oracle",
Address("kQA0FY6YIacA0MgDlKN_qMQuXVZqL3qStyyaNkVB-svHQqsJ"): "New Alarm",
}
)
output = format_trace(trace, address_mapping=addr_mapping)
print(output)
if __name__ == "__main__":
asyncio.run(main())
```
Sample output:
<img src="./docs/images/v3-trace.png" alt="v3-trace"/>
</details>
## Examples (V3)
1. [Get Transaction Traces](./examples/v3//get_tx_trace.py)
2. [Decode Jetton Get Method Result](./examples/v3/decode_jetton_data.py)
3. [Decode Custom Get Method Result](./examples/v3/decode_custom_data.py)
4. [Multicall](./examples/v3/multicall.py)
5. [Subscribe transactions of address](./examples/v3/subscribe_jetton_wallet.py)
6. [Get Account Balance](./examples/v3/get_account_balance.py)
7. [Get Previous Transaction](./examples/v3/get_prev_tx.py)
8. [Get Next Transaction](./examples//v3/get_next_tx.py)
9. [Wait message exists](./examples/v3//wait_message_exists.py)
## Examples (V2)
1. [Get Transaction Traces](./examples/v2/transaction_trace.py)
2. [Decode Jetton Get Method Result](./examples/v2/decode_jetton_data.py)
3. [Decode Custom Get Method Result](./examples/v2/decode_custom_data.py)
4. [Execute Parallelly](./examples/v2/multicall.py)
5. [Subscribe transactions for address](./examples/v2/subscribe_jetton_wallet.py)
## Examples (Address)
1. [Address Parser](./examples/v2/address.py)
## Usecase
1. [Subscription and handle on event](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/c30c80e89636ab63933332bc6cc7517ce6666c15/ticton/client.py#L682)
2. [Custom Decoder With Singleton Pattern](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/main/ticton/decoder.py)
3. [Custom Message Payload Parser](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/main/ticton/parser.py)
## Development Guide
Please refer to the [Development Guide](./docs/dev.md) for more information on how to contribute to this project.
Raw data
{
"_id": null,
"home_page": "",
"name": "pytoncenter",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9,<3.12",
"maintainer_email": "",
"keywords": "",
"author": "alan890104",
"author_email": "alan890104@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/d2/57/653df33b7ba93a391b724439de62319c254184c2f237eb0ce300044a3b03/pytoncenter-0.0.13.tar.gz",
"platform": null,
"description": "# Pytoncenter\n[![codecov](https://codecov.io/gh/Ton-Dynasty/pytoncenter/graph/badge.svg?token=EjDfnQmBiE)](https://codecov.io/gh/Ton-Dynasty/pytoncenter)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pytoncenter?style=flat)\n![GitHub Repo stars](https://img.shields.io/github/stars/Ton-Dynasty/pytoncenter?style=flat)\n\n\n## Introduction\n\nPytoncenter is a [TON Center](https://toncenter.com/) client with type hints that introduces advanced features such as **address subscriptions**, **obtaining transaction flows** similar to TON Viewer, **parallel processing of multiple calls**, and **robust debug tools**. Developers can use this package to create TON data analysis platforms, Dapp backends, and other services with enhanced functionality and efficiency.\n\n\n\n## Features\n\nEnhance your development workflow with Pytoncenter, offering:\n\n1. **Rich Typing**: Elevate your coding experience with comprehensive typing for improved code clarity and error detection.\n2. **Field Validation & Transformation**: Automate data integrity checks and format conversions supported by [Pydantic](https://docs.pydantic.dev/latest/), ensuring data accuracy effortlessly.\n3. **TVM Data Format Conversion**: Seamlessly interact with TVM by automatically converting complex data structures like Addresses and Cells, based on C++ Python binding [Tonpy](https://tonpy.dton.io/)\n4. **Concurrency & Rate Limiting**: Execute parallel requests smoothly while managing request rates efficiently to maintain optimal performance, thanks to the [aiolimiter](https://aiolimiter.readthedocs.io/en/latest/)\n5. **Advanced Simplicity**: Access sophisticated functionalities like transaction subscriptions, message parsing, and method result decoding with ease and simplicity.\n6. **V2 & V3 API Support**: Supporting both [V2](https://toncenter.com/api/v2/) and [V3](https://toncenter.com/api/v3/) APIs, Pytoncenter provides a comprehensive range of features for your development needs.\n\nSimplify your development process with our feature-rich package designed for efficiency and ease of use.\n\n\n## Quick Start\n\n### 1. Install the package\n\nTo get started, install Pytoncenter using pip:\n\n```bash\npip3 install pytoncenter\n```\n\n### 2. Export the TONCENTER_API_KEY\n\nTo use the TON Center API, you need to obtain an API key from the [TON Center](https://toncenter.com/). After obtaining the API key from [@tonapibot](https://t.me/tonapibot), export it as an environment variable:\n\n```bash\nexport TONCENTER_API_KEY=your_api_key\n```\n<details>\n<summary>Example 1. Get Account Info (API V3)</summary>\n\nThis example demonstrates how to obtain account information and jetton wallet balances using the TON Center API V3.\n\n```python\nfrom pytoncenter import get_client\nfrom pytoncenter.v3.models import *\nimport asyncio\n\n\nasync def main():\n client = get_client(version=\"v3\", network=\"testnet\")\n my_address = \"0QC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQXmw\"\n account = await client.get_account(GetAccountRequest(address=my_address))\n jetton_wallets = await client.get_jetton_wallets(GetJettonWalletsRequest(owner_address=my_address, limit=10))\n masters = await client.multicall({w.address: client.get_jetton_masters(w.jetton) for w in jetton_wallets})\n print(\"=== Account Info ===\")\n print(\" -\", \"Symbol\", \"TON\", \"Balance:\", account.balance / 1e9)\n print(\"=== Jetton Wallets ===\")\n for wallet in jetton_wallets:\n jetton = masters.get(wallet.address, None)\n if jetton is None:\n continue\n content = jetton.jetton_content\n symbol = content.symbol if content else \"unknown\"\n decimals = (content.decimals if content else 0) or 9\n print(\" -\", \"Symbol\", symbol, \"Balance\", wallet.balance / 10**decimals)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n</details>\n\n<details>\n<summary>Example 2. Decode Get Method Result (API V3)</summary>\n\nHere is an example for decoding get method by declaring the decoder and Type of the field explicitly. Decoder will decode the result based on the type of the field. If you are not sure about the type of the field, you can use AutoDecoder to decode the result.\n\n```python\nimport asyncio\nfrom pprint import pprint\n\nfrom pytoncenter import get_client\nfrom pytoncenter.decoder import AutoDecoder, JettonDataDecoder\nfrom pytoncenter.v3.models import *\n\n\nasync def main():\n client = get_client(version=\"v3\", network=\"testnet\")\n req = GetAccountRequest(address=\"kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A\")\n account_info = await client.get_account(req)\n\n # Check account status is active\n assert account_info.status == \"active\", \"Account is not active\"\n\n print(\"=====================================\")\n\n req = RunGetMethodRequest(address=\"kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A\", method=\"get_jetton_data\", stack=[])\n result = await client.run_get_method(req)\n print(result)\n\n print(\"===============Jetton Decoder======================\")\n decoder = JettonDataDecoder()\n jetton_data = decoder.decode(result)\n pprint(jetton_data, width=120)\n\n print(\"===============Auto Decoder======================\")\n decoder = AutoDecoder()\n jetton_data = decoder.decode(result)\n pprint(jetton_data, width=120)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\nYou may get the following jetton data in the console:\n\n```bash\nOrderedDict([('total_supply', 5000000000),\n ('mintable', True),\n ('admin_address', EQC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQZ__),\n ('jetton_content', <CellSlice [9] bits, [1] refs, [A21FCFE4756B6AD7A1E88E65483CCDAB3BBBD9F8AEF5F5060C5FC8A36737AC36] hash>),\n ('jetton_wallet_code', 'b5ee9c7241022501000a......'),])\n```\n\nIf you use AutoDecoder, you may get the following result:\n\n```bash\nOrderedDict([('idx_0', 5000000000),\n ('idx_1', -1), # Because auto decoder does not know the type, it will decode the result as number\n ('idx_2', EQC8zFHM8LCMp9Xs--w3g9wmf7RwuDgJcQtV-oHZRSCqQZ__), # Address field will automatically decode to Address object\n ('idx_3', 'b5ee9c7241022501000a......'), # Cell and Slice will apply b64decode to hex string\n ('idx_4', 'b5ee9c7241022501000a......'),])\n```\n\nHowever, for jetton data, there is a more efficient way to retreive the result by V3 API.\n\n```python\nclient = get_client(version=\"v3\", network=\"testnet\")\njettons = await client.get_jetton_masters(GetJettonMastersRequest(address=\"kQBqSpvo4S87mX9tjHaG4zhYZeORhVhMapBJpnMZ64jhrP-A\"))\njetton = jettons[0]\nprint(\"Total Supply: \", jetton.total_supply)\nprint(\"Mintable: \", jetton.mintable)\nprint(\"last transaction lt: \", jetton.last_transaction_lt)\nif jetton.jetton_content is not None:\n print(\"Jetton content - Symbol: \", jetton.jetton_content.symbol)\n print(\"Jetton content - Name: \", jetton.jetton_content.name)\n print(\"Jetton content - Decimals: \", jetton.jetton_content.decimals)\n print(\"Jetton content - Image: \", jetton.jetton_content.image)\n```\n\nThe output will be:\n\n```bash\nTotal Supply: 5000000000\nMintable: True\nlast transaction lt: 19051958000005\nJetton content - Symbol: USDT\nJetton content - Name: USDT\nJetton content - Decimals: 6\nJetton content - Image: https://coinhere.io/wp-content/uploads/2020/08/Tether-USDT-icon-1.png\n```\n</details>\n\n<details>\n<summary>Example 3. Client Config Customization</summary>\n\n```python\n# you can customize the qps by passing the qps parameter, default is 9.5 if api key is provided, otherwise 1\nclient = get_client(version=\"v2\", network=\"mainnet\", qps=7.77)\n\n# By default, the client will read the TONCENTER_API_KEY from the environment variable, you can pass the api_key parameter to customize the api key\nclient = get_client(version=\"v2\", network=\"mainnet\", api_key=\"you-api-key\")\n\n# By default, the client will use the default endpoint by network, you can pass the custom_endpoint parameter to customize the endpoint\nclient = get_client(version=\"v3\", network=\"mainnet\", qps=3.14, custom_endpoint=\"https://api.toncenter.com/v3\")\n```\n\n</details>\n\n<details>\n<summary>Example 4. Get transaction trace</summary>\n\n```python\nimport asyncio\n\nfrom pytoncenter import get_client\nfrom pytoncenter.v3.models import *\nfrom pytoncenter.address import Address\nfrom pytoncenter.utils import format_trace, create_address_mapping\n\n\"\"\"\nTake this transaction as example:\nhttps://testnet.tonviewer.com/transaction/84b7c9467a0a24e7a59a5e224e9ef8803563621f4710fe8536ae7803fe245d61\n\nThe output transactions should be the whole trace of the transaction. The source transaction hash is\nhttps://testnet.tonviewer.com/transaction/dc40feab455e86fa0736508febed224891c965ef6cbf55f5ec309247e8d38664\n\"\"\"\n\n\nasync def main():\n client = get_client(version=\"v3\", network=\"testnet\")\n trace = await client.get_trace_alternative(GetTransactionTraceRequest(hash=\"84b7c9467a0a24e7a59a5e224e9ef8803563621f4710fe8536ae7803fe245d61\", sort=\"asc\"))\n addr_mapping = create_address_mapping(\n {\n Address(\"0QApdUMEOUuHnBo-RSdbikkZZ3qWItZLdXjyff9lN_eS5Zib\"): \"Alan Wallet V4\",\n Address(\"kQCQ1B7B7-CrvxjsqgYT90s7weLV-IJB2w08DBslDdrIXucv\"): \"Alan USD Jetton Wallet\",\n Address(\"kQDO_0Z0SuVpqpaNE0dPxUiFCNDpdR4ODW9KQAwgQGwc5wiB\"): \"Oracle Jetton Wallet\",\n Address(\"kQCpk40ub48fvx89vSUjOTRy0vOEEZ4crOPPfLEvg88q1EeH\"): \"Oracle\",\n Address(\"kQA0FY6YIacA0MgDlKN_qMQuXVZqL3qStyyaNkVB-svHQqsJ\"): \"New Alarm\",\n }\n )\n output = format_trace(trace, address_mapping=addr_mapping)\n print(output)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n\n```\n\nSample output:\n\n<img src=\"./docs/images/v3-trace.png\" alt=\"v3-trace\"/>\n\n</details>\n\n\n## Examples (V3)\n1. [Get Transaction Traces](./examples/v3//get_tx_trace.py)\n2. [Decode Jetton Get Method Result](./examples/v3/decode_jetton_data.py)\n3. [Decode Custom Get Method Result](./examples/v3/decode_custom_data.py)\n4. [Multicall](./examples/v3/multicall.py)\n5. [Subscribe transactions of address](./examples/v3/subscribe_jetton_wallet.py)\n6. [Get Account Balance](./examples/v3/get_account_balance.py)\n7. [Get Previous Transaction](./examples/v3/get_prev_tx.py)\n8. [Get Next Transaction](./examples//v3/get_next_tx.py)\n9. [Wait message exists](./examples/v3//wait_message_exists.py)\n\n## Examples (V2)\n1. [Get Transaction Traces](./examples/v2/transaction_trace.py)\n2. [Decode Jetton Get Method Result](./examples/v2/decode_jetton_data.py)\n3. [Decode Custom Get Method Result](./examples/v2/decode_custom_data.py)\n4. [Execute Parallelly](./examples/v2/multicall.py)\n5. [Subscribe transactions for address](./examples/v2/subscribe_jetton_wallet.py)\n\n## Examples (Address)\n1. [Address Parser](./examples/v2/address.py)\n\n## Usecase\n1. [Subscription and handle on event](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/c30c80e89636ab63933332bc6cc7517ce6666c15/ticton/client.py#L682)\n2. [Custom Decoder With Singleton Pattern](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/main/ticton/decoder.py)\n3. [Custom Message Payload Parser](https://github.com/Ton-Dynasty/ticton-python-sdk/blob/main/ticton/parser.py)\n\n## Development Guide\n\nPlease refer to the [Development Guide](./docs/dev.md) for more information on how to contribute to this project.\n",
"bugtrack_url": null,
"license": "",
"summary": "",
"version": "0.0.13",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "88df53314a4f41eff53ed361a718e57c5ae6f973744d54d63d4128ecf0bd3150",
"md5": "7c8c22741943b8778e72adf2d360f295",
"sha256": "5808e927454304aaa739332d94f7f303ba5058b658012f446c163cbdd681d3b5"
},
"downloads": -1,
"filename": "pytoncenter-0.0.13-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7c8c22741943b8778e72adf2d360f295",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<3.12",
"size": 35310,
"upload_time": "2024-02-19T20:10:16",
"upload_time_iso_8601": "2024-02-19T20:10:16.226848Z",
"url": "https://files.pythonhosted.org/packages/88/df/53314a4f41eff53ed361a718e57c5ae6f973744d54d63d4128ecf0bd3150/pytoncenter-0.0.13-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d257653df33b7ba93a391b724439de62319c254184c2f237eb0ce300044a3b03",
"md5": "79d1157a081270af6bbe4b07fb03e368",
"sha256": "d63b49dd098656fd20950917521fd155c1f3abcf91fd9765249c9928d98c27f0"
},
"downloads": -1,
"filename": "pytoncenter-0.0.13.tar.gz",
"has_sig": false,
"md5_digest": "79d1157a081270af6bbe4b07fb03e368",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<3.12",
"size": 32603,
"upload_time": "2024-02-19T20:10:17",
"upload_time_iso_8601": "2024-02-19T20:10:17.796622Z",
"url": "https://files.pythonhosted.org/packages/d2/57/653df33b7ba93a391b724439de62319c254184c2f237eb0ce300044a3b03/pytoncenter-0.0.13.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-19 20:10:17",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pytoncenter"
}