Stellar client library for the Python language

StellarCN, updated πŸ•₯ 2023-03-29 02:36:19

Stellar Python SDK

.. image:: https://img.shields.io/github/actions/workflow/status/StellarCN/py-stellar-base/continuous-integration-workflow.yml?branch=main :alt: GitHub Workflow Status :target: https://github.com/StellarCN/py-stellar-base/actions

.. image:: https://img.shields.io/readthedocs/stellar-sdk.svg :alt: Read the Docs :target: https://stellar-sdk.readthedocs.io/en/latest/

.. image:: https://static.pepy.tech/personalized-badge/stellar-sdk?period=total&units=abbreviation&left_color=grey&right_color=brightgreen&left_text=Downloads :alt: PyPI - Downloads :target: https://pypi.python.org/pypi/stellar-sdk

.. image:: https://img.shields.io/codeclimate/maintainability/StellarCN/py-stellar-base :alt: Code Climate maintainability :target: https://codeclimate.com/github/StellarCN/py-stellar-base/maintainability

.. image:: https://img.shields.io/codecov/c/github/StellarCN/py-stellar-base/v2 :alt: Codecov :target: https://codecov.io/gh/StellarCN/py-stellar-base

.. image:: https://img.shields.io/pypi/v/stellar-sdk.svg :alt: PyPI :target: https://pypi.python.org/pypi/stellar-sdk

.. image:: https://img.shields.io/badge/python-%3E%3D3.7-blue :alt: Python - Version :target: https://pypi.python.org/pypi/stellar-sdk

.. image:: https://img.shields.io/badge/implementation-cpython%20%7C%20pypy-blue :alt: PyPI - Implementation :target: https://pypi.python.org/pypi/stellar-sdk

.. image:: https://img.shields.io/badge/Stellar%20Protocol-19-blue :alt: Stellar Protocol :target: https://developers.stellar.org/docs/glossary/scp/

py-stellar-base is a Python library for communicating with a Stellar Horizon server_. It is used for building Stellar apps on Python. It supports Python 3.7+ as well as PyPy 3.7+.

It provides:

  • a networking layer API for Horizon endpoints.
  • facilities for building and signing transactions, for communicating with a Stellar Horizon instance, and for submitting transactions or querying network history.

Documentation

py-stellar-base's documentation can be found at https://stellar-sdk.readthedocs.io.

Installing

.. code-block:: text

pip install -U stellar-sdk

We follow Semantic Versioning 2.0.0 <https://semver.org/>_, and I strongly recommend that you specify its major version number in the dependency file to avoid the unknown effects of breaking changes.

A Simple Example

You can find more examples here <https://github.com/StellarCN/py-stellar-base/tree/main/examples>__.

Building transaction with synchronous server

.. code-block:: python

# Alice pay 10.25 XLM to Bob
from stellar_sdk import Asset, Server, Keypair, TransactionBuilder, Network

alice_keypair = Keypair.from_secret("SBFZCHU5645DOKRWYBXVOXY2ELGJKFRX6VGGPRYUWHQ7PMXXJNDZFMKD")
bob_address = "GA7YNBW5CBTJZ3ZZOWX3ZNBKD6OE7A7IHUQVWMY62W2ZBG2SGZVOOPVH"

server = Server("https://horizon-testnet.stellar.org")
alice_account = server.load_account(alice_keypair.public_key)
base_fee = 100
transaction = (
    TransactionBuilder(
        source_account=alice_account,
        network_passphrase=Network.TESTNET_NETWORK_PASSPHRASE,
        base_fee=base_fee,
    )
    .add_text_memo("Hello, Stellar!")
    .append_payment_op(bob_address, Asset.native(), "10.25")
    .set_timeout(30)
    .build()
)
transaction.sign(alice_keypair)
response = server.submit_transaction(transaction)
print(response)
  • Building transaction with asynchronous server

.. code-block:: python

# Alice pay 10.25 XLM to Bob
import asyncio

from stellar_sdk import Asset, ServerAsync, Keypair, TransactionBuilder, Network
from stellar_sdk.client.aiohttp_client import AiohttpClient

alice_keypair = Keypair.from_secret("SBFZCHU5645DOKRWYBXVOXY2ELGJKFRX6VGGPRYUWHQ7PMXXJNDZFMKD")
bob_address = "GA7YNBW5CBTJZ3ZZOWX3ZNBKD6OE7A7IHUQVWMY62W2ZBG2SGZVOOPVH"


async def payment():
    async with ServerAsync(
        horizon_url="https://horizon-testnet.stellar.org", client=AiohttpClient()
    ) as server:
        alice_account = await server.load_account(alice_keypair.public_key)
        base_fee = 100
        transaction = (
            TransactionBuilder(
                source_account=alice_account,
                network_passphrase=Network.TESTNET_NETWORK_PASSPHRASE,
                base_fee=base_fee,
            )
            .add_text_memo("Hello, Stellar!")
            .append_payment_op(bob_address, Asset.native(), "10.25")
            .set_timeout(30)
            .build()
        )
        transaction.sign(alice_keypair)
        response = await server.submit_transaction(transaction)
        print(response)


if __name__ == "__main__":
    asyncio.run(payment())

Soroban support

As Soroban <https://soroban.stellar.org/docs> is still under active development, I have not merged it into the main branch. You can obtain support for it in the soroban branch <https://github.com/StellarCN/py-stellar-base/tree/soroban>, but please note that there may be breaking updates at any time before the stable release.

stellar-model

stellar-model allows you to parse the JSON returned by Stellar Horizon into the Python models, click here <https://github.com/StellarCN/stellar-model>__ for more information.

Links

  • Document: https://stellar-sdk.readthedocs.io
  • Code: https://github.com/StellarCN/py-stellar-base
  • Examples: https://github.com/StellarCN/py-stellar-base/tree/main/examples
  • Issue tracker: https://github.com/StellarCN/py-stellar-base/issues
  • License: Apache License 2.0 <https://github.com/StellarCN/py-stellar-base/blob/master/LICENSE>_
  • Releases: https://pypi.org/project/stellar-sdk/

Thank you to all the people who have already contributed to py-stellar-base!

.. _Stellar Horizon server: https://github.com/stellar/go/tree/master/services/horizon

Issues

Option in build to increment account sequence optionally

opened on 2023-02-10 01:52:12 by overcat

See: - https://github.com/stellar/js-stellar-base/issues/574 - https://github.com/StellarCN/py-stellar-base/blob/b4cdc45a30472ecfdcec4e11dbc7ae403bc9711d/examples/soroban_deploy_contract.py#L68

XDR processing using BytesIO class

opened on 2022-10-17 14:54:13 by ReidMcLaughlinSecurrency

Is your feature request related to a problem? Please describe. As a team we are processing large sets of stellar operations by decoding the XDR packages available from the public dataset that Stellar has made available via Big Query. Using the current XDR unpacking routines, we are seeing long processing times for large datasets. Based on our tests we have seen the current SDK takes 100ms to perform extraction. We have tested with 50,000,000 rows (1 year of data for one most used token on Stellar) from the BigQuery table for our extractions. The current SDK decoding would take over 2.5 hours.

Describe the solution you'd like We suggest that the SDK is updated to use the Python BytesIO class for XDR decoding. This would operates on the data completely in memory and will dramatically increase the throughput of the XDR processing task. This change would also bring better compatability to future Python versions.

Additional context On some prototype code we have tested the processing time has been reduced to around 15 minutes for the same dataset.

Add support for Soboran RPC server

opened on 2022-10-13 14:04:20 by overcat None

Remove support for Python 3.6

opened on 2022-07-12 03:01:56 by overcat

We have decided to remove support for Python 3.6 in 9.x due to the following considerations. - Python 3.6 is no longer maintained: https://endoflife.date/python - In download statistics, Python 3.6 has only ~1% share: https://pypistats.org/packages/stellar-sdk

async offers stream return 406 error

opened on 2022-04-19 21:40:17 by minherc

As I read in the documentation, everything seems to be supported: https://stellar-sdk.readthedocs.io/en/stable/api.html?highlight=server.offers().for_seller().cursor#id9 There is almost no search for information on 406 errors in the SDK. Thanks in advance for replies and advice.

ps: tried both on the local horizon server and on the main code: ``` HORIZON_URL = "https://horizon.stellar.org" async def offers(acc1): async with ServerAsync(HORIZON_URL, AiohttpClient()) as server: async for offers in server.offers().for_seller(acc1).cursor(cursor=last_cursor).stream(): ofr2df(offers) ## acc_offers

print(f"\nacc: {acc}\n offers len: {len(offers)}")

``` error:

ConnectionError: fetch https://horizon.stellar.org/offers failed: 406 the function is called like this: async def listen(): global acc await asyncio.gather( await asyncio.get_running_loop().run_in_executor(None, offers, acc[1]) ) if __name__ == "__main__": asyncio.run(listen()) pps: sdk update 8.0 beta

Make example setup script

opened on 2020-12-11 15:49:08 by antb123

Many of the examples have hard coded testnet example addresses. So they may or may not run after a testnet upgrade.

Describe the solution you'd like Have it so a new user cold download the examples directory and then fully explore the scripts one by one for all common tasks

They may need to run a setup script (which creates accounts and asset codes beforehand).

Refactor the scripts so they can all be run unmodified after running a setup script.

Describe alternatives you've considered Leave as is

Releases

8.2.0 2023-03-15 04:03:43

Add

  • feat: add support for SEP-0035. (#711)

Note

  • Python 3.6 is no longer supported.

PyPi Package: https://pypi.org/project/stellar-sdk/8.2.0/ Documentation: https://stellar-sdk.readthedocs.io/en/8.2.0/

8.1.1 2022-10-12 10:33:00

Update

  • docs: correct the horizon address of the public network (#611)
  • deps: update dependencies.
Note

The default branch of this repository was changed to main.

PyPi Package: https://pypi.org/project/stellar-sdk/8.1.1/ Documentation: https://stellar-sdk.readthedocs.io/en/8.1.1/

8.1.0 2022-06-13 14:46:42

Add

  • feat: allow custom headers to be set in stellar_sdk.client.requests_client.RequestsClient. (#600, thank you @RohitK89!)
  • feat: allow custom headers to be set in stellar_sdk.client.aiohttp_client.AiohttpClient. (#601)

PyPi Package: https://pypi.org/project/stellar-sdk/8.1.0/ Documentation: https://stellar-sdk.readthedocs.io/en/8.1.0/

8.0.1 2022-06-04 06:12:55

Update

  • Make some amount fields accept Decimal. (#597)
  • Regenerate xdr files with the latest xdrgen. (#595)

PyPi Package: https://pypi.org/project/stellar-sdk/8.0.1/ Documentation: https://stellar-sdk.readthedocs.io/en/8.0.1/

8.0.0 2022-05-07 07:39:22

This release includes breaking changes.

This release adds support for Protocol 19.

It includes CAP-21 (new transaction preconditions) and CAP-40 (signed payload signers).

Breaking changes

  • Transaction.time_bounds has been removed, please use Transaction.preconditions.time_bounds instead.
  • No longer sets "now" as the default cursor for AiohttpClient.stream (#591)
  • Some breaking updates are included in XDR, you can check the changes here.

Add

  • Support for converting signed payloads (CAP-40) to and from their StrKey (P...) representation, you can find the example here.

  • Support for creating transactions with the new preconditions (CAP-21) via TransactionBuilder, you can find the example here.

  • TransactionBuilder.set_ledger_bounds(min_ledger: int, max_ledger: int)

  • TransactionBuilder.set_min_sequence_number(min_sequence_number: int)

  • TransactionBuilder.set_min_sequence_age(min_sequence_age: int)

  • TransactionBuilder.set_min_sequence_ledger_gap(min_sequence_ledger_gap: int)

  • TransactionBuilder.add_extra_signer(signer_key: Union[SignerKey, SignedPayloadSigner, str])

  • Support for Signing transactions containing the ed25519 payload extra signer, you can find the example here.

  • Keypair.sign_payload_decorated(data: bytes)

  • TransactionEnvelope.sign_extra_signers_payload(signer: Union[Keypair, str])
  • Support for CAP-21 has been added to stellar_sdk.sep.txrep.

Update

  • feat: you can turn off runtime type checking by configuring STELLAR_SDK_RUNTIME_TYPE_CHECKING=0 in environment variables. (#589)

In order to make the program more rigorous and novice friendly, we previously introduced runtime type checking, but this would cause a significant performance penalty, so now we allow users to turn it off.

  • refactor: remove runtime type checking in stellar_sdk.xdr package (#584)

PyPi Package: https://pypi.org/project/stellar-sdk/8.0.0/ Documentation: https://stellar-sdk.readthedocs.io/en/8.0.0/

8.0.0-beta4 2022-04-24 11:55:22

Breaking changes

  • refactor: no longer sets "now" as the default cursor for AiohttpClient.stream (#591)

PyPi Package: https://pypi.org/project/stellar-sdk/8.0.0b4/ Documentation: https://stellar-sdk.readthedocs.io/en/8.0.0-beta4/

ζ’ζ˜ŸδΈ­ε›½

ζ˜Ÿζ˜ŸδΉ‹η«οΌŒε―δ»₯η‡ŽεŽŸβ€”β€”θ‡΄εŠ›δΊŽStellarηš„δΈ­ζ–‡ζŽ¨εΉΏ

GitHub Repository Homepage

stellar horizon lumen blockchain sdk