Metadata-Version: 2.5
Name: tronpy
Version: 0.7.0
Summary: TRON Python client library
Project-URL: Homepage, https://github.com/bitcart/tronpy
Project-URL: Source, https://github.com/bitcart/tronpy
Project-URL: Changelog, https://github.com/bitcart/tronpy/blob/master/CHANGELOG.md
Project-URL: Documentation, https://tronpy.bitcart.ai
Author-email: andelf <andelf@gmail.com>, MrNaif2018 <chuff184@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: api,blockchain,tron
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Requires-Dist: base58
Requires-Dist: cryptography>=50.0.2
Requires-Dist: eth-abi<7.0.0,>=5.0.0
Requires-Dist: eth-utils
Requires-Dist: httpx
Requires-Dist: pycryptodome<5
Requires-Dist: requests
Provides-Extra: mnemonic
Requires-Dist: mnemonic==0.21; extra == 'mnemonic'
Provides-Extra: offline
Requires-Dist: protobuf; extra == 'offline'
Description-Content-Type: text/markdown

# tronpy

[![CI](https://github.com/bitcart/tronpy/actions/workflows/ci.yml/badge.svg)](https://github.com/bitcart/tronpy/actions/workflows/ci.yml)
[![Codecov](https://img.shields.io/codecov/c/github/bitcart/tronpy?style=flat-square)](https://codecov.io/gh/bitcart/tronpy)
[![PyPI version](https://img.shields.io/pypi/v/tronpy.svg?style=flat-square)](https://pypi.python.org/pypi/tronpy/)
[![Docs](https://github.com/bitcart/tronpy/actions/workflows/docs.yml/badge.svg)](https://tronpy.bitcart.ai)

TRON Python Client Library. [Documentation](https://tronpy.bitcart.ai)

> Note: in case you want to use cryptocurrency functions in an universal way or e.g. reliably calculate transaction fees for BTC, ETH, Tron and many others, check out the [Bitcart project](https://bitcart.ai)

## How to use

```python
from tronpy import Tron
from tronpy.keys import PrivateKey

client = Tron(network="nile")
# Private key of TJzXt1sZautjqXnpjQT4xSCBHNSYgBkDr3
priv_key = PrivateKey(bytes.fromhex("8888888888888888888888888888888888888888888888888888888888888888"))

txn = (
    client.trx.transfer("TJzXt1sZautjqXnpjQT4xSCBHNSYgBkDr3", "TVjsyZ7fYF3qLF6BQgPmTEZy1xrNNyVAAA", 1_000)
    .memo("test memo")
    .build()
    .inspect()
    .sign(priv_key)
    .broadcast()
)

print(txn)
# > {'result': True, 'txid': '5182b96bc0d74f416d6ba8e22380e5920d8627f8fb5ef5a6a11d4df030459132'}
print(txn.wait())
# > {'id': '5182b96bc0d74f416d6ba8e22380e5920d8627f8fb5ef5a6a11d4df030459132', 'blockNumber': 6415370, 'blockTimeStamp': 1591951155000, 'contractResult': [''], 'receipt': {'net_usage': 283}}
```

### Async Client

```python
import asyncio

from tronpy import AsyncTron
from tronpy.keys import PrivateKey

# private key of TMisHYBVvFHwKXHPYTqo8DhrRPTbWeAM6z
priv_key = PrivateKey(bytes.fromhex("8888888888888888888888888888888888888888888888888888888888888888"))


async def transfer():
    async with AsyncTron(network="nile") as client:
        print(client)

        txb = (
            client.trx.transfer("TJzXt1sZautjqXnpjQT4xSCBHNSYgBkDr3", "TVjsyZ7fYF3qLF6BQgPmTEZy1xrNNyVAAA", 1_000)
            .memo("test memo")
            .fee_limit(100_000_000)
        )
        txn = await txb.build()
        print(txn)
        txn_ret = await txn.sign(priv_key).broadcast()
        print(txn_ret)
        # > {'result': True, 'txid': 'edc2a625752b9c71fdd0d68117802860c6adb1a45c19fd631a41757fa334d72b'}
        print(await txn_ret.wait())
        # > {'id': 'edc2a625752b9c71fdd0d68117802860c6adb1a45c19fd631a41757fa334d72b', 'blockNumber': 10163821, 'blockTimeStamp': 1603368072000, 'contractResult': [''], 'receipt': {'net_usage': 283}}


if __name__ == "__main__":
    asyncio.run(transfer())
```

Or close async client manually:

```python
from httpx import AsyncClient, Timeout
from tronpy.providers.async_http import AsyncHTTPProvider
from tronpy.defaults import CONF_NILE


async def transfer():
    _http_client = AsyncClient(
        limits=Limits(max_connections=100, max_keepalive_connections=20), timeout=Timeout(timeout=10, connect=5, read=5)
    )
    provider = AsyncHTTPProvider(CONF_NILE, client=_http_client)
    client = AsyncTron(provider=provider)
    print(client)

    priv_key = PrivateKey(bytes.fromhex("8888888888888888888888888888888888888888888888888888888888888888"))
    txb = (
        client.trx.transfer("TJzXt1sZautjqXnpjQT4xSCBHNSYgBkDr3", "TVjsyZ7fYF3qLF6BQgPmTEZy1xrNNyVAAA", 1_000)
        .memo("test memo")
        .fee_limit(100_000_000)
    )
    txn = await txb.build()
    print(txn)
    txn_ret = await txn.sign(priv_key).broadcast()

    print(txn_ret)
    print(await txn_ret.wait())
    await client.close()


if __name__ == "__main__":
    asyncio.run(transfer())
```
