# PyTonConnect
[![PyPI](https://img.shields.io/pypi/v/pytonconnect?color=blue)](https://pypi.org/project/pytonconnect/)
Python SDK for TON Connect 2.0
Analogue of the [@tonconnect/sdk](https://github.com/ton-connect/sdk/tree/main/packages/sdk) library.
Use it to connect your app to TON wallets via TonConnect protocol. You can find more details and the protocol specification in the [docs](https://github.com/ton-connect/docs).
# Installation
Install Python 3 package: `pip3 install pytonconnect`
# Examples
## Add the tonconnect-manifest
App needs to have its manifest to pass meta information to the wallet. Manifest is a JSON file named as `tonconnect-manifest.json` following format:
```json
{
"url": "<app-url>", // required
"name": "<app-name>", // required
"iconUrl": "<app-icon-url>", // required
"termsOfUseUrl": "<terms-of-use-url>", // optional
"privacyPolicyUrl": "<privacy-policy-url>" // optional
}
```
Make sure that manifest is available to GET by its URL.
## Init connector and call `restore_connection`.
If user connected his wallet before, connector will restore the connection
```python
import asyncio
from pytonconnect import TonConnect
async def main():
connector = TonConnect(
manifest_url='https://raw.githubusercontent.com/XaBbl4/pytonconnect/main/pytonconnect-manifest.json',
# api_tokens={'tonapi': 'key'},
)
is_connected = await connector.restore_connection()
print('is_connected:', is_connected)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
```
## Fetch wallets list
You can fetch all supported wallets list
```python
wallets_list = connector.get_wallets()
# wallets_list is
# [
# {
# name: str,
# image: str,
# about_url: str,
# bridge_url: str,
# universal_url: str,
# },
# ]
```
You also can get wallets list using `get_wallets` static method:
```python
wallets_list = TonConnect.get_wallets()
```
## Subscribe to the connection status changes
```python
def status_changed(wallet_info):
# update state/reactive variables to show updates in the ui
print('wallet_info:', wallet_info)
unsubscribe()
unsubscribe = connector.on_status_change(status_changed)
# call unsubscribe() later to save resources when you don't need to listen for updates anymore.
```
## Initialize a wallet connection via universal link
```python
generated_url = await connector.connect(wallets_list[0])
print('generated_url:', generated_url)
```
Then you have to show this link to user as QR-code, or use it as a deep_link. You will receive an update in `connector.on_status_change` when user approves connection in the wallet.
## Send transaction
```python
transaction = {
'valid_until': 1681223913,
'messages': [
{
'address': '0:0000000000000000000000000000000000000000000000000000000000000000',
'amount': '1',
# 'stateInit': 'base64_YOUR_STATE_INIT' # just for instance. Replace with your transaction state_init or remove
},
{
'address': '0:0000000000000000000000000000000000000000000000000000000000000000',
'amount': '1',
# 'payload': 'base64_YOUR_PAYLOAD' # just for instance. Replace with your transaction payload or remove
}
]
}
try:
result = await connector.send_transaction(transaction)
print('Transaction was sent successfully')
except Exception as e:
if isintance(e, UserRejectsError):
print('You rejected the transaction. Please confirm it to send to the blockchain')
else:
print('Unknown error:', e)
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pytonconnect",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "TON, TON Connect, TON Connect SDK",
"author": "XaBbl4",
"author_email": "xabbl4@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/85/3c/83a47df8d8650406d2a07237f07e8eb376b4c7b3f55a2818870cea28909c/pytonconnect-0.3.2.tar.gz",
"platform": null,
"description": "# PyTonConnect\r\n\r\n[![PyPI](https://img.shields.io/pypi/v/pytonconnect?color=blue)](https://pypi.org/project/pytonconnect/)\r\n\r\nPython SDK for TON Connect 2.0\r\n\r\nAnalogue of the [@tonconnect/sdk](https://github.com/ton-connect/sdk/tree/main/packages/sdk) library.\r\n\r\nUse it to connect your app to TON wallets via TonConnect protocol. You can find more details and the protocol specification in the [docs](https://github.com/ton-connect/docs).\r\n\r\n# Installation\r\n\r\nInstall Python 3 package: `pip3 install pytonconnect`\r\n\r\n# Examples\r\n## Add the tonconnect-manifest\r\n\r\nApp needs to have its manifest to pass meta information to the wallet. Manifest is a JSON file named as `tonconnect-manifest.json` following format:\r\n\r\n```json\r\n{\r\n \"url\": \"<app-url>\", // required\r\n \"name\": \"<app-name>\", // required\r\n \"iconUrl\": \"<app-icon-url>\", // required\r\n \"termsOfUseUrl\": \"<terms-of-use-url>\", // optional\r\n \"privacyPolicyUrl\": \"<privacy-policy-url>\" // optional\r\n}\r\n```\r\n\r\nMake sure that manifest is available to GET by its URL.\r\n\r\n## Init connector and call `restore_connection`.\r\n\r\nIf user connected his wallet before, connector will restore the connection\r\n\r\n```python\r\nimport asyncio\r\nfrom pytonconnect import TonConnect\r\n\r\nasync def main():\r\n connector = TonConnect(\r\n manifest_url='https://raw.githubusercontent.com/XaBbl4/pytonconnect/main/pytonconnect-manifest.json',\r\n # api_tokens={'tonapi': 'key'},\r\n )\r\n is_connected = await connector.restore_connection()\r\n print('is_connected:', is_connected)\r\n\r\nif __name__ == '__main__':\r\n asyncio.get_event_loop().run_until_complete(main())\r\n```\r\n\r\n## Fetch wallets list\r\n\r\nYou can fetch all supported wallets list\r\n\r\n```python\r\nwallets_list = connector.get_wallets()\r\n\r\n# wallets_list is \r\n# [\r\n# {\r\n# name: str,\r\n# image: str,\r\n# about_url: str,\r\n# bridge_url: str,\r\n# universal_url: str,\r\n# },\r\n# ]\r\n```\r\n\r\nYou also can get wallets list using `get_wallets` static method:\r\n```python\r\nwallets_list = TonConnect.get_wallets()\r\n```\r\n\r\n## Subscribe to the connection status changes\r\n\r\n```python\r\ndef status_changed(wallet_info):\r\n # update state/reactive variables to show updates in the ui\r\n print('wallet_info:', wallet_info)\r\n unsubscribe()\r\n\r\nunsubscribe = connector.on_status_change(status_changed)\r\n# call unsubscribe() later to save resources when you don't need to listen for updates anymore.\r\n```\r\n\r\n## Initialize a wallet connection via universal link\r\n```python\r\ngenerated_url = await connector.connect(wallets_list[0])\r\nprint('generated_url:', generated_url)\r\n```\r\n\r\nThen you have to show this link to user as QR-code, or use it as a deep_link. You will receive an update in `connector.on_status_change` when user approves connection in the wallet.\r\n\r\n## Send transaction\r\n\r\n```python\r\ntransaction = {\r\n 'valid_until': 1681223913,\r\n 'messages': [\r\n {\r\n 'address': '0:0000000000000000000000000000000000000000000000000000000000000000',\r\n 'amount': '1',\r\n # 'stateInit': 'base64_YOUR_STATE_INIT' # just for instance. Replace with your transaction state_init or remove\r\n },\r\n {\r\n 'address': '0:0000000000000000000000000000000000000000000000000000000000000000',\r\n 'amount': '1',\r\n # 'payload': 'base64_YOUR_PAYLOAD' # just for instance. Replace with your transaction payload or remove\r\n }\r\n ]\r\n}\r\n\r\ntry:\r\n result = await connector.send_transaction(transaction)\r\n print('Transaction was sent successfully')\r\nexcept Exception as e:\r\n if isintance(e, UserRejectsError):\r\n print('You rejected the transaction. Please confirm it to send to the blockchain')\r\n else:\r\n print('Unknown error:', e)\r\n```\r\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Python SDK for TON Connect 2.0",
"version": "0.3.2",
"project_urls": {
"Github": "https://github.com/XaBbl4/pytonconnect"
},
"split_keywords": [
"ton",
" ton connect",
" ton connect sdk"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9453b8b9edddf7926a5f2a55da6e1ff31b995986ac346eed03ec69f47a3299c2",
"md5": "4508b390bbbf0489b3c70e6d4b273668",
"sha256": "05d17680c4653b561bd2ac68dc348d9ff1f405717e6682d7693962e7fdc46962"
},
"downloads": -1,
"filename": "pytonconnect-0.3.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4508b390bbbf0489b3c70e6d4b273668",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 24747,
"upload_time": "2024-12-06T19:39:53",
"upload_time_iso_8601": "2024-12-06T19:39:53.165256Z",
"url": "https://files.pythonhosted.org/packages/94/53/b8b9edddf7926a5f2a55da6e1ff31b995986ac346eed03ec69f47a3299c2/pytonconnect-0.3.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "853c83a47df8d8650406d2a07237f07e8eb376b4c7b3f55a2818870cea28909c",
"md5": "26d7faae136f660f8c4df5a439cbcd4b",
"sha256": "578b214d30d5e271123f3e59f1ca230ae2ef1b50dad1729bd1148158b156665c"
},
"downloads": -1,
"filename": "pytonconnect-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "26d7faae136f660f8c4df5a439cbcd4b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 20708,
"upload_time": "2024-12-06T19:39:54",
"upload_time_iso_8601": "2024-12-06T19:39:54.860115Z",
"url": "https://files.pythonhosted.org/packages/85/3c/83a47df8d8650406d2a07237f07e8eb376b4c7b3f55a2818870cea28909c/pytonconnect-0.3.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-06 19:39:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "XaBbl4",
"github_project": "pytonconnect",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "PyNaCl",
"specs": []
},
{
"name": "httpx",
"specs": []
},
{
"name": "httpx-sse",
"specs": []
}
],
"lcname": "pytonconnect"
}