janzeer-sdk (Python)
Official Python SDK for the Janzeer blockchain — a stake-free, permissionless Layer-1 with
instant finality. Wallet keys and signing, transaction builders, a REST client, JSON-RPC over HTTP and WebSocket
subscriptions, blocking and asyncio. Non-custodial by construction: keys never leave your process, the node only
verifies.
pip install janzeer-sdk # add [ws] for WebSocket subscriptions: pip install "janzeer-sdk[ws]"
Releases are published to PyPI from this repository's GitHub releases (trusted publishing, no stored token). To install the development head instead:
pip install "janzeer-sdk[ws] @ git+https://github.com/janzeerorg/janzeer-sdk-python"
60-second quickstart
from janzeer import Account, JanzeerClient, JanzeerRpc, TxBuilder, format_jnz, wait_for_finality
client = JanzeerClient("https://onion.janzeer.org") # REST (/api/v1)
rpc = JanzeerRpc("https://onion.janzeer.org") # JSON-RPC (/rpc)
me = Account.from_mnemonic("abandon abandon … about") # 12/24-word BIP39 phrase
print(me.checksum_address, format_jnz(client.balance(me.address)))
tx = me.sign_tx(TxBuilder.transfer(
sender=me.address, to="0x598b1301acef3baba6ce25e38dd17b723f7b98b1",
amount="1.25", data="hello", nonce=client.nonce(me.address),
))
client.submit(tx) # HTTP 201, or a typed error
final = wait_for_finality(rpc, tx.hash) # one or two 15-second slots
print("final in block", final["blockHeight"])
That is the whole integration: derive → nonce → build → sign → submit → wait. A committed block is final (2f+1 BFT commit), so there is no confirmation count.
The same with asyncio: AsyncJanzeerClient, AsyncJanzeerRpc, JanzeerRpcWs and await_finality have the same
methods and return awaitables.
What is in the box
| Area | Entry points | Guide |
|---|---|---|
| Keys & addresses | mnemonic, Account, to_checksum_address, is_valid_address |
wallet-and-keys |
| Transactions | TxBuilder.transfer / register_validator / exit_validator / token.* → UnsignedTx → SignedTx |
sending-transactions |
| Amounts | to_scaled, from_scaled, format_jnz, parse_jnz, add_amounts… |
sending-transactions |
| REST | JanzeerClient / AsyncJanzeerClient: balances, nonces, transactions, blocks, validators, tokens |
reading-chain-data |
| JSON-RPC | JanzeerRpc / AsyncJanzeerRpc (HTTP, batches) and JanzeerRpcWs (WebSocket + newBlocks / addressActivity) |
json-rpc-and-subscriptions |
| Flows | wait_for_finality, send_and_wait, next_nonce (and await_finality, asend_and_wait) |
json-rpc-and-subscriptions |
| Errors | TxRejectedError, NonceMismatchError, RateLimitedError, RpcError… |
errors |
| Vault | encrypt_vault / decrypt_vault (PBKDF2 + AES-GCM, compatible with the other SDKs) |
vault |
Money is never a float
Amounts are decimal strings ("1.25"), int (whole coins) or decimal.Decimal. A float is refused with a
TypeError everywhere — in the builders, in the amount helpers and in request bodies — because 0.1 is not
representable in binary and a payment must not depend on how a float prints. Responses are parsed losslessly:
numbers with a fraction arrive as Decimal, client.balance() returns a decimal string.
Results are plain JSON
Network calls return the node's JSON as dict / list values with the field names the node uses
(blockHeight, senderAddress, …), documented in the
API reference. Keys, transactions and
errors are typed classes; the package ships py.typed.
Requirements
- Python 3.10 – 3.13 on Linux, macOS or Windows.
coincurve(libsecp256k1),pycryptodome(keccak-256, AES-GCM),httpx;websocketsfor subscriptions. Wheels exist for all three systems: no compiler is needed.
Compatibility
| SDK | Node | REST envelope version |
Wire protocol | Vectors |
|---|---|---|---|---|
| 0.1.x | 0.1.3 | 1.1.0 | 3.4.0 | v2 |
SPEC_VERSION exports these values; the e2e test checks them against the node on the first call.
Examples
Runnable scripts in examples/: a transfer to finality, an address-activity subscription, the token
life cycle, a validator registration, and a vault round trip. They read the JANZEER_* environment variables
described in CONTRIBUTING.
Conformance
This SDK reproduces, byte for byte, the public test vectors every Janzeer SDK is tested against (key derivation, addresses, every transaction preimage, hash and signature, the vault fixture) and passes the shared 14-step end-to-end flow: https://github.com/janzeerorg/janzeer-sdk-conformance. See docs/conformance.md.
Other SDKs
TypeScript · Dart / Flutter · Kotlin / JVM / Android · Go
Licence
Apache License 2.0 — see LICENSE. Security reports: see SECURITY.
Metadata
Release files for janzeer-sdk 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| janzeer_sdk-0.1.0.tar.gz | 58.9 kB | With provenance | Details for janzeer_sdk-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| janzeer_sdk-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for janzeer_sdk-0.1.0-py3-none-any.whl |
Total release size: 104.0 kB
Release files / janzeer_sdk-0.1.0.tar.gz
| Download URL | janzeer_sdk-0.1.0.tar.gz |
|---|---|
| Size | 58.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4483a18c168c3992c61a60ebe85f42b68864f620fc9e97ecde21d34de399297
|
|
BLAKE2b-256 checksum How to use checksums |
0af45966c9036f33b3a9581304e730e13cdb15a3bbd0d82ac9027c14b441992f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 28, 2026.
Transparency logRelease files / janzeer_sdk-0.1.0-py3-none-any.whl
| Download URL | janzeer_sdk-0.1.0-py3-none-any.whl |
|---|---|
| Size | 45.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3b7b75a1cee5b9a528260f7bc5ef605048554a73bb77740af41ac4acda651def
|
|
BLAKE2b-256 checksum How to use checksums |
aad90f600f01241167c3a3b0ca7cc0f8cc284aaa71a982f9a6eb1820baa2018c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 28, 2026.
Transparency logSecurity for janzeer-sdk 0.1.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for janzeer_sdk-0.1.0.tar.gz
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 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.