Skip to main content

Accumulate Python SDK (V2/V3 unified) with DevNet-first flows

Project description

OpenDLT Accumulate Python SDK

Python License

Production-ready Python SDK for the Accumulate blockchain protocol. Supports all signature types, V2/V3 API endpoints, and provides a high-level signing API with automatic version tracking.

Features

  • Multi-Signature Support: Ed25519, RCD1, BTC, ETH, RSA-SHA256, ECDSA-SHA256
  • Smart Signing: Automatic signer version tracking with SmartSigner
  • Complete Protocol: All 33 transaction types and account operations
  • Cross-Platform: Pure Python implementation
  • Network Ready: Mainnet, Testnet (Kermit), and local DevNet support

Installation

pip install accumulate-sdk-opendlt

Or install from source:

git clone https://github.com/opendlt/accumulate-python-sdk.git
cd accumulate-python-sdk/unified
pip install -e ".[dev]"

Quick Start

from accumulate_client import Accumulate
from accumulate_client.crypto.ed25519 import Ed25519KeyPair

# Connect to Kermit testnet
client = Accumulate(
    "https://kermit.accumulatenetwork.io/v2",
    v3_endpoint="https://kermit.accumulatenetwork.io/v3",
)

# Generate key pair and derive lite account URLs
kp = Ed25519KeyPair.generate()
lid = kp.derive_lite_identity_url()
lta = kp.derive_lite_token_account_url("ACME")

print(f"Lite Identity: {lid}")
print(f"Lite Token Account: {lta}")

# Query account
account = client.query(lta)
print(f"Account: {account}")

Smart Signing API

The SmartSigner class handles version tracking automatically:

from accumulate_client import Accumulate
from accumulate_client.crypto.ed25519 import Ed25519KeyPair
from accumulate_client.convenience import SmartSigner, TxBody

# Connect to Kermit testnet
client = Accumulate(
    "https://kermit.accumulatenetwork.io/v2",
    v3_endpoint="https://kermit.accumulatenetwork.io/v3",
)
kp = Ed25519KeyPair.generate()
lid = kp.derive_lite_identity_url()
lta = kp.derive_lite_token_account_url("ACME")

# Create SmartSigner - automatically queries and tracks signer version
signer = SmartSigner(
    client=client,
    keypair=kp,
    signer_url=f"{lid}/1",
)

# Sign, submit, and wait for delivery in one call
result = signer.sign_submit_and_wait(
    principal=lta,
    body=TxBody.send_tokens_single(
        to_url="acc://recipient.acme/tokens",
        amount="100000000",  # 1 ACME
    ),
    memo="Payment",
)

if result.success:
    print(f"Transaction delivered: {result.txid}")

Supported Signature Types

Type Signer Class Use Case
Ed25519 Ed25519Signer Default, recommended
Legacy Ed25519 LegacyEd25519Signer Pre-signed message format
RCD1 RCD1Signer Factom compatibility
BTC BTCSigner Bitcoin/Secp256k1 ecosystem
ETH ETHSigner Ethereum/Secp256k1 ecosystem

Signer classes are in accumulate_client.signers.

Transaction Builders

Build transactions using the TxBody class:

from accumulate_client.convenience import TxBody

# Send tokens
TxBody.send_tokens_single(to_url="acc://...", amount="100000000")

# Add credits
TxBody.add_credits(recipient="acc://...", amount=1000000, oracle=oracle_price)

# Create ADI
TxBody.create_identity(url="acc://my-adi.acme", key_book_url="acc://my-adi.acme/book", public_key_hash=key_hash)

# Create token account
TxBody.create_token_account(url="acc://my-adi.acme/tokens", token_url="acc://ACME")

# Create custom token
TxBody.create_token(url="acc://my-adi.acme/mytoken", symbol="MTK", precision=8)

# Write data
TxBody.write_data(entries_hex=[data_hex])

Network Endpoints

from accumulate_client import Accumulate

# Public networks
mainnet = Accumulate.mainnet()
testnet = Accumulate.testnet()

# Kermit testnet (explicit endpoints)
kermit = Accumulate(
    "https://kermit.accumulatenetwork.io/v2",
    v3_endpoint="https://kermit.accumulatenetwork.io/v3",
)

# Local development
devnet = Accumulate.devnet()

Examples

See examples/v3/ for complete working examples:

Example Description
example_01_lite_identities.py Lite identity and token account operations
example_02_accumulate_identities.py ADI creation and credit purchasing
example_03_adi_token_accounts.py ADI token account management
example_04_data_accounts_entries.py Data account creation and WriteData
example_05_adi_to_adi_transfer.py ADI-to-ADI token transfers
example_06_custom_tokens.py Custom token issuer creation
example_08_query_tx_signatures.py Transaction and signature queries
example_09_key_management.py Key page and key book management
example_10_update_key_page_threshold.py Multi-sig threshold updates
example_11_multi_signature_types.py Ed25519, RCD1, BTC, ETH signatures
example_12_quickstart_demo.py Complete zero-to-hero workflow
example_13_adi_to_adi_transfer_with_header_options.py Memo, metadata, expire, hold_until

Run any example:

python examples/v3/example_01_lite_identities.py

Project Structure

src/accumulate_client/
├── facade.py          # Accumulate unified client (V2/V3)
├── api_client.py      # Low-level API client
├── convenience.py     # SmartSigner, TxBody, QuickStart, Wallet, ADI
├── crypto/            # Key pair implementations (Ed25519, Secp256k1)
├── signers/           # Signature type classes (Ed25519, RCD1, BTC, ETH)
├── tx/                # Transaction builders and header options
├── types.py           # Protocol types (103 types)
├── enums.py           # Protocol enums (14 enums)
└── runtime/           # URL handling, codecs, validation
examples/
└── v3/                # V3 API examples with SmartSigner (12 examples)
tests/
├── unit/              # Unit tests
├── integration/       # Network integration tests
└── conformance/       # Cross-implementation compatibility

Development

Running Tests

pytest tests/                    # All tests
pytest tests/unit/               # Unit tests only
pytest tests/integration/        # Integration tests (requires network)

Code Quality

ruff check src/
mypy src/
ruff format src/

Self-Check

python tooling/scripts/selfcheck.py

Expected output:

Status: PASS
Checks: 11/11 passed (100.0%)
Enums=14, Types=103, Signatures=16, Transactions=33, API methods=35

Error Handling

from accumulate_client.api_client import (
    AccumulateAPIError,
    AccumulateNetworkError,
    AccumulateValidationError,
)

try:
    result = client.submit(envelope)
except AccumulateValidationError as e:
    print(f"Validation error: {e}")
except AccumulateNetworkError as e:
    print(f"Network error: {e}")
except AccumulateAPIError as e:
    print(f"API error: {e.code} - {e}")

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

accumulate_sdk_opendlt-2.0.3.tar.gz (230.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

accumulate_sdk_opendlt-2.0.3-py3-none-any.whl (271.5 kB view details)

Uploaded Python 3

File details

Details for the file accumulate_sdk_opendlt-2.0.3.tar.gz.

File metadata

  • Download URL: accumulate_sdk_opendlt-2.0.3.tar.gz
  • Upload date:
  • Size: 230.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for accumulate_sdk_opendlt-2.0.3.tar.gz
Algorithm Hash digest
SHA256 1bc34b6121f2483f37e58a4468d4a2b02a5435ecde617f3b1e7a0668bd7fe1bb
MD5 52dc9856a7ae94a98737d3cf996b3bd3
BLAKE2b-256 7904fae39018c8e8312f6e8f38768655e67a90291e4eb99d9bc35bd5388e6594

See more details on using hashes here.

File details

Details for the file accumulate_sdk_opendlt-2.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for accumulate_sdk_opendlt-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d6f3ff8a944121ae8bb2935819d4c11f529f408e1e5f34e908d6021e46b01051
MD5 ee8c49499bce9b99e02c51b2fa220c3b
BLAKE2b-256 6210ba35c85b640f2dcb4466fc3628977da0890edabbda95a0edbc75faae2f06

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page