.. 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:
py-stellar-base's documentation can be found at https://stellar-sdk.readthedocs.io.
.. 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.
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)
.. 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())
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 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.
Apache License 2.0 <https://github.com/StellarCN/py-stellar-base/blob/master/LICENSE>
_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
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
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.
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
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
``` 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
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
PyPi Package: https://pypi.org/project/stellar-sdk/8.2.0/ Documentation: https://stellar-sdk.readthedocs.io/en/8.2.0/
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/
stellar_sdk.client.requests_client.RequestsClient
. (#600, thank you @RohitK89!)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/
PyPi Package: https://pypi.org/project/stellar-sdk/8.0.1/ Documentation: https://stellar-sdk.readthedocs.io/en/8.0.1/
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).
Transaction.time_bounds
has been removed, please use Transaction.preconditions.time_bounds
instead.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])
stellar_sdk.sep.txrep
.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.
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/
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 Homepagestellar horizon lumen blockchain sdk