Skip to main content

AIO Substrate Interface

This project provides an asynchronous interface for interacting with Substrate-based blockchains. Its API is based on the py-substrate-interface project, but is not fully compatible.

This is the successor to async-substrate-interface, which was archived

Additionally, this project uses cyscale instead of py-scale-codec for faster SCALE decoding. Since v2.0, because cyscale and py-scale-codec share the same namespace, we require that only cyscale is installed to be able to use this. If you run into a runtime error stating that both cannot be installed at the same time, simply remove them both, and reinstall cyscale:

pip uninstall cyscale scalecodec -y
pip install cyscale

Installation

To install the package, use the following command:

pip install aio-substrate-interface

Usage

import asyncio
from async_substrate_interface import AsyncSubstrateInterface


async def main():
    substrate = AsyncSubstrateInterface(
        url="wss://rpc.polkadot.io"
    )
    async with substrate:
        result = await substrate.query(
            module='System',
            storage_function='Account',
            params=['5CZs3T15Ky4jch1sUpSFwkUbYEnsCfe1WCY51fH3SPV6NFnf']
        )

        print(result)


asyncio.run(main())

The library works on the standard asyncio event loop, but we recommend running your application under uvloop when it is available for your platform:

pip install uvloop
import uvloop

uvloop.run(main())  # instead of asyncio.run(main())

In our benchmarks against a local node (benchmarks/BENCHMARKS.md), uvloop made concurrent multiplexed calls (many asyncio.gather-ed queries over the single websocket connection) dramatically faster, and was at worst neutral everywhere else.

Caching

Caching is used to improve the overall performance of this library. It is applied only on methods whose results cannot change — such as the block hash for a given block number (small, 512 default max size), or the runtime for a given runtime version (large, 16 default max size). These cache sizes are user-configurable using the respective env vars, SUBSTRATE_CACHE_METHOD_SIZE and SUBSTRATE_RUNTIME_CACHE_SIZE.

Because of the asynchronous nature of the library, rather than something like functools.lru_cache, we developed our own asyncio-friendly LRU cache, CachedFetcher. The key difference here is that each request is assigned a future that is returned when the initial request completes. So, if you were to do:

bn = 5000
bh1, bh2 = await asyncio.gather(
    asi.get_block_hash(bn),
    asi.get_block_hash(bn)
)

it would actually only make one single network call, and return the result to both requests.

ENV VARS

The following environment variables are used within aio-substrate-interface

  • SUBSTRATE_CACHE_METHOD_SIZE (default 512): the cache size of the smaller return-size methods (see the Caching section for more info)
  • SUBSTRATE_RUNTIME_CACHE_SIZE (default 16): the cache size of the larger return-size methods (see the Caching section for more info)
  • SUBSTRATE_EXTRINSIC_RECOVERY_SCAN_DEPTH (default 16): how many blocks are walked back per check when recovering a watched extrinsic whose subscription was severed by a websocket reconnection
  • SUBSTRATE_EXTRINSIC_RECOVERY_TIMEOUT (default 120): seconds to wait for inclusion/finalization of an already-submitted extrinsic when its watch subscription is being recovered by polling
  • SUBSTRATE_EXTRINSIC_RECOVERY_POLL_INTERVAL (default 1): seconds between chain polls while recovering a watched extrinsic

Contributing

Contributions are welcome! Please open an issue or submit a pull request to the staging branch.

Signed Commits

All commits in pull requests must be signed. We require signed commits to verify the authenticity of contributions and ensure code integrity.

To sign your commits, you must have GPG signing configured in Git:

git commit -S -m "your commit message"

Or configure Git to sign all commits automatically:

git config --global commit.gpgsign true

For instructions on setting up GPG key signing, see GitHub's documentation on signing commits.

Note: Pull requests containing unsigned commits will not be merged.

Cyscale Installation Issue

Because cyscale uses the same namespace as py-scale-codec (scalecodec), there can be some difficulties with upgrades.

pip uninstall scalecodec cyscale -y
pip install -U cyscale --force-reinstall

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contact

For any questions or inquiries, please open an issue in this repo.

Metadata

Release files for aio-substrate-interface 3.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aio-substrate-interface 3.2.2
File Size Uploaded
aio_substrate_interface-3.2.2.tar.gz 88.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aio-substrate-interface 3.2.2
File Interpreter ABI Platform
aio_substrate_interface-3.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 184.5 kB

Release files / aio_substrate_interface-3.2.2.tar.gz

Download URL aio_substrate_interface-3.2.2.tar.gz
Size 88.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5aa0216719f4e99ae5860a96d7fe59848b9bc811e8566e9428bf48084dfcd865
BLAKE2b-256 checksum
How to use checksums
203de214f0a138c2fa9fb75f7d8b9ac10b83e4477dd8da68fccb1c6988962640
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / aio_substrate_interface-3.2.2-py3-none-any.whl

Download URL aio_substrate_interface-3.2.2-py3-none-any.whl
Size 96.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
19e8ef5274b8499c86a6358762f94ccf2e99bca4b5e671a060ba4d39cbbb59bf
BLAKE2b-256 checksum
How to use checksums
6c9ee6892290e10c67705935bda91b91e47bcf8d277f9f4318381893b5d9ffac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.2.2 This release

2 release files

3.2.1

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.2.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page