accumulate-python-client


Nameaccumulate-python-client JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/opendlt/accumulate-python-client
SummaryA Python client for interacting with the Accumulate Protocol.
upload_time2025-03-14 16:08:07
maintainerNone
docs_urlNone
authorJKG
requires_python>=3.8
licenseMIT
keywords blockchain accumulate cryptocurrency
VCS
bugtrack_url
requirements ecdsa eth-keys pycryptodome cryptography bitcoin base58 PyNaC websockets requests protobuf jsonschema msgpack croniter base58 typing-extensions async-timeout pytest
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Accumulate Python Client

![Accumulate](./accumulate_logo.png)

The **Accumulate Python Client** is a robust library designed for developers to interact seamlessly with the [Accumulate Protocol](https://accumulatenetwork.io/). This library simplifies working with accounts, transactions, signatures, querying blockchain data, and more within the Accumulate blockchain ecosystem.

---

## Key Features

- **Account Management**: Effortlessly manage token accounts, lite accounts, and keybooks.
- **Transaction Handling**: Construct, sign, and submit blockchain transactions with ease.
- **Event and Data Querying**: Fetch and process data from the Accumulate blockchain.
- **Cryptographic Utilities**: Tools for signing, verifying, and working with keys and addresses.
- **Blockchain Utilities**: Support for URL parsing, data encoding, and validation.

---

## Full Documentation

Full documentation, including **usage instructions, examples, and API references**, is available here:

👉 **[View Full Documentation](https://opendlt.github.io/accumulate-python-client/)**

### Key Sections:
- [API Reference](https://opendlt.github.io/accumulate-python-client/api_reference/)
- [Getting Started](https://opendlt.github.io/accumulate-python-client/getting_started/)
- [Examples](https://opendlt.github.io/accumulate-python-client/examples/)
- [Contributing](https://opendlt.github.io/accumulate-python-client/contributing/)
- [Changelog](https://opendlt.github.io/accumulate-python-client/changelog/)

---

## Installation

Prerequisites
```bash
Python 3.8+
pip (Python package manager)
(Optional) git (to clone the repo)
(Optional) virtualenv (recommended for isolated environments)
```
Option 1: Install via PyPI (Recommended for most users)
```bash
pip install accumulate-python-client
```

Option 2: Install from Source (for development or latest updates)
Clone the repository
```bash
git clone https://github.com/opendlt/accumulate-python-client.git
cd accumulate-python-client
```

(Recommended) Create and activate a virtual environment
Windows:
```bash
python -m venv venv
venv\Scripts\activate
```
macOS/Linux:
```bash
python3 -m venv venv
source venv/bin/activate
```

Install dependencies
```bash
pip install -r requirements.txt
```
---

## Quick Start & Usage

### End points: 
```bash
- Testnet: https://testnet.accumulatenetwork.io/v3
- Mainnet: https://mainnet.accumulatenetwork.io/v3
```

### Quick Start Examples for accumulate-python-client:

Below sample code demonstrates library use to:
- Create a Lite Token Account
- Testnet Faucet for testnet ACME tokens
- Purchase credits
- Transfer tokens between Lite Token Accounts
- Create a human readable Accumulate Digitial Identifer (ADI) 

```python
import asyncio
import logging
import json
from accumulate.api.client import AccumulateClient
from accumulate.utils.hash_functions import LiteAuthorityForKey
from accumulate.utils.address_from import generate_ed25519_keypair
from accumulate.models.queries import Query
from accumulate.models.enums import QueryType
from accumulate.models.base_transactions import TransactionHeader
from accumulate.signing.signer import Signer
from accumulate.models.transactions import AddCredits, Transaction, SendTokens, CreateIdentity
from accumulate.models.signature_types import SignatureType
from accumulate.utils.url import URL

logging.basicConfig(level=logging.INFO)

# Global constants
ACME_TO_CREDITS = 6  # Amount of ACME to convert into credits
SEND_AMOUNT = 2      # Tokens to send from Account 1 to Account 2
ACCUMULATE_RPC_URL = "https://testnet.accumulatenetwork.io"

async def run_full_workflow():
    client = AccumulateClient(ACCUMULATE_RPC_URL)
    query = Query(query_type=QueryType.DEFAULT)
    
    ### 1. Create Lite Token Account 1 ###
    print("\n=== Step 1: Create Lite Token Account 1 ===")
    priv1, pub1 = generate_ed25519_keypair()
    lite_identity_url1 = LiteAuthorityForKey(pub1, "ED25519")
    account1 = f"{lite_identity_url1}/ACME"
    print("Account 1 (Lite Token Account):", account1)
    
    ### 2. Faucet: Fund Account 1 & Query Token Balance ###
    print("\n=== Step 2: Faucet & Query Token Balance ===")
    for i in range(2):
        print(f"Requesting faucet transaction {i+1} for Account 1...")
        await client.faucet(account1)
        await asyncio.sleep(20)  # Wait for transaction settlement

    # Query initial token balance for Account 1
    initial = await client.query(account1, query=query)
    balance_acme = int(initial.balance)
    print("LTA 1 balance after faucet:", initial.balance)

    await asyncio.sleep(5)  # Wait before next step

    ### 3. Purchase Credits for Lite Identity & Query Credit Balance ###
    print("\n=== Step 3: Purchase Credits for Lite Identity ===")

    # First, select the signer
    signer1 = await Signer.select_signer(URL.parse(lite_identity_url1), priv1, client)

    # Now, generate a proper transaction header
    txn_header_credits = await TransactionHeader.create(
        principal=account1,
        public_key=pub1,
        signer=signer1,
    )

    # Build Transaction Body (AddCredits)
    add_credits_txn = AddCredits(
        client=client,
        recipient=URL.parse(lite_identity_url1),
        amount=ACME_TO_CREDITS
    )

    # Initialize oracle value for the transaction
    await add_credits_txn.initialize_oracle()

    # Build the transaction
    txn_credits = Transaction(header=txn_header_credits, body=add_credits_txn)

    # Sign and submit transaction
    response_credits = await signer1.sign_and_submit_transaction(
        client, txn_credits, SignatureType.ED25519
    )

    await asyncio.sleep(25)  # Wait before next step
    # Query credit balance
    credits = await client.query(lite_identity_url1, query=query)
    balance_credits = int(credits.account['creditBalance']) // 100
    print("Lite Identity credit balance:", balance_credits)


    await asyncio.sleep(5)  # Wait before next step
    
    ### 4. Create Lite Token Account 2 & Send Tokens from Account 1 ###
    print("\n=== Step 4: Create Account 2 & Send Tokens ===")

    # Generate keys for Account 2
    priv2, pub2 = generate_ed25519_keypair()
    lite_identity_url2 = LiteAuthorityForKey(pub2, "ED25519")
    account2 = f"{lite_identity_url2}/ACME"
    print("Account 2 (Recipient):", account2)

    await asyncio.sleep(10)  # Optional pause to ensure faucet settled

    # --Build SendTokens Transaction Body--
    send_tx_body = SendTokens()
    send_tx_body.add_recipient(URL.parse(account2), SEND_AMOUNT)  # Add recipient and amount

    # --Build Header--
    txn_header_send = await TransactionHeader.create(
        principal=account1,  # From Account 1
        public_key=pub1,     # Public key of Account 1
        signer=signer1       # Signer associated with Account 1
    )

    # --Combine Header & Body into a Transaction--
    txn_send = Transaction(header=txn_header_send, body=send_tx_body)

    # --Sign and Submit Transaction--
    response_send = await signer1.sign_and_submit_transaction(
        client,
        txn_send,
        SignatureType.ED25519
    )
    await asyncio.sleep(25)  # Wait for transaction to settle

    LTA2_balance = await client.query(account2, query=query)
    balance_acme = int(LTA2_balance.balance)
    print("LTA 2 balance after Send TX:", balance_acme)


    ### 5. Create Accumulate Digital Identity (ADI) ###
    print("\n=== Step 5: Create Accumulate Digital Identity (ADI) ===")

    # Define the new ADI URL and Keybook URL
    new_identity_url = URL.parse("acc://new-identity.acme")
    keybook_url = URL.parse("acc://new-identity.acme/Keybook")

    # Use Account 1's signer and key as the sponsor
    sponsor_account = account1  # This should be your Lite Token Account (acc://<lite>/ACME)

    # --- Build the transaction header ---
    txn_header_adi = await TransactionHeader.create(
        principal=sponsor_account,   # Sponsor account (must have sufficient credits)
        public_key=pub1,             # Public key of the sponsor account
        signer=signer1               # The signer object associated with sponsor
    )

    # --- Build the transaction body (Positional args only, no keyword args) ---
    tx_body_adi = CreateIdentity(
        new_identity_url,    # New ADI's URL
        pub1,               # Public key as raw bytes
        keybook_url          # Keybook URL for ADI's keybook
    )

    # --- Combine Header & Body ---
    txn_adi = Transaction(header=txn_header_adi, body=tx_body_adi)

    # --- Sign and Submit Transaction ---
    response_adi = await signer1.sign_and_submit_transaction(
        client,
        txn_adi,
        SignatureType.ED25519  # Signature type
    )

    await asyncio.sleep(25)  # Wait for transaction to process before querying (adjust as needed)

    # Query back to confirm (although may take more time to appear)
    ADI_Query = await client.query(str(new_identity_url), query=query)
    print("ADI Details:", ADI_Query)

    print("\n=== All exmaple actions completed ===")

asyncio.run(run_full_workflow())
```

---

## Library Structure

```plaintext
accumulate-python-client/
│
├── accumulate/            # Main library package
│   ├── api/               # API client and communication layer
│   ├── models/            # Data models for accounts, signatures, transactions, and responses
│   ├── signing/           # Cryptographic signing utilities
│   └── utils/             # General utilities (e.g., encoding, validation, hashing)
│
├── tests/                 # Unit tests
│   ├── api/               # Tests for components within the library's api directory
│   ├── models/            # Tests for components within the library's models directory
│   ├── signing/           # Tests for components within the library's signing directory
│   └── utils/             # Tests for components within the library's utils directory
├── examples/              # Example  demonstration set of all transaction types
├── docs/                  # Documentation for the library (e.g., enhances UI for docs, API reference)
│
├── LICENSE                # License for the project
├── requirements.txt       # Project dependencies
├── setup.py               # Packaging and installation script
└── pyproject.toml         # Build system configuration
```

---

## Contributing

Contributions are welcome! If you’d like to improve this library, submit a pull request or open an issue.

1. Fork the repository.
2. Create a feature branch: `git checkout -b feature-name`.
3. Commit your changes: `git commit -m "Description of changes"`.
4. Push to the branch: `git push origin feature-name`.
5. Open a pull request.

---

## License

This project is licensed under the terms of the MIT License. See the `LICENSE` file for more information.

---

## Acknowledgements

This library was developed by **Jason Gregoire** for [OpenDLT.org](https://opendlt.org), with a mission to leverage Distributed Ledger Technology (DLT) for enhanced global freedom.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/opendlt/accumulate-python-client",
    "name": "accumulate-python-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "blockchain, accumulate, cryptocurrency",
    "author": "JKG",
    "author_email": "Jason Gregoire <jason.gregoire@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/53/0b/292031849721452ef51f8501e3cf4bf3ea9a50c30b899575bfea86b4b469/accumulate_python_client-0.1.0.tar.gz",
    "platform": null,
    "description": "# Accumulate Python Client\r\n\r\n![Accumulate](./accumulate_logo.png)\r\n\r\nThe **Accumulate Python Client** is a robust library designed for developers to interact seamlessly with the [Accumulate Protocol](https://accumulatenetwork.io/). This library simplifies working with accounts, transactions, signatures, querying blockchain data, and more within the Accumulate blockchain ecosystem.\r\n\r\n---\r\n\r\n## Key Features\r\n\r\n- **Account Management**: Effortlessly manage token accounts, lite accounts, and keybooks.\r\n- **Transaction Handling**: Construct, sign, and submit blockchain transactions with ease.\r\n- **Event and Data Querying**: Fetch and process data from the Accumulate blockchain.\r\n- **Cryptographic Utilities**: Tools for signing, verifying, and working with keys and addresses.\r\n- **Blockchain Utilities**: Support for URL parsing, data encoding, and validation.\r\n\r\n---\r\n\r\n## Full Documentation\r\n\r\nFull documentation, including **usage instructions, examples, and API references**, is available here:\r\n\r\n\ud83d\udc49 **[View Full Documentation](https://opendlt.github.io/accumulate-python-client/)**\r\n\r\n### Key Sections:\r\n- [API Reference](https://opendlt.github.io/accumulate-python-client/api_reference/)\r\n- [Getting Started](https://opendlt.github.io/accumulate-python-client/getting_started/)\r\n- [Examples](https://opendlt.github.io/accumulate-python-client/examples/)\r\n- [Contributing](https://opendlt.github.io/accumulate-python-client/contributing/)\r\n- [Changelog](https://opendlt.github.io/accumulate-python-client/changelog/)\r\n\r\n---\r\n\r\n## Installation\r\n\r\nPrerequisites\r\n```bash\r\nPython 3.8+\r\npip (Python package manager)\r\n(Optional) git (to clone the repo)\r\n(Optional) virtualenv (recommended for isolated environments)\r\n```\r\nOption 1: Install via PyPI (Recommended for most users)\r\n```bash\r\npip install accumulate-python-client\r\n```\r\n\r\nOption 2: Install from Source (for development or latest updates)\r\nClone the repository\r\n```bash\r\ngit clone https://github.com/opendlt/accumulate-python-client.git\r\ncd accumulate-python-client\r\n```\r\n\r\n(Recommended) Create and activate a virtual environment\r\nWindows:\r\n```bash\r\npython -m venv venv\r\nvenv\\Scripts\\activate\r\n```\r\nmacOS/Linux:\r\n```bash\r\npython3 -m venv venv\r\nsource venv/bin/activate\r\n```\r\n\r\nInstall dependencies\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n---\r\n\r\n## Quick Start & Usage\r\n\r\n### End points: \r\n```bash\r\n- Testnet: https://testnet.accumulatenetwork.io/v3\r\n- Mainnet: https://mainnet.accumulatenetwork.io/v3\r\n```\r\n\r\n### Quick Start Examples for accumulate-python-client:\r\n\r\nBelow sample code demonstrates library use to:\r\n- Create a Lite Token Account\r\n- Testnet Faucet for testnet ACME tokens\r\n- Purchase credits\r\n- Transfer tokens between Lite Token Accounts\r\n- Create a human readable Accumulate Digitial Identifer (ADI) \r\n\r\n```python\r\nimport asyncio\r\nimport logging\r\nimport json\r\nfrom accumulate.api.client import AccumulateClient\r\nfrom accumulate.utils.hash_functions import LiteAuthorityForKey\r\nfrom accumulate.utils.address_from import generate_ed25519_keypair\r\nfrom accumulate.models.queries import Query\r\nfrom accumulate.models.enums import QueryType\r\nfrom accumulate.models.base_transactions import TransactionHeader\r\nfrom accumulate.signing.signer import Signer\r\nfrom accumulate.models.transactions import AddCredits, Transaction, SendTokens, CreateIdentity\r\nfrom accumulate.models.signature_types import SignatureType\r\nfrom accumulate.utils.url import URL\r\n\r\nlogging.basicConfig(level=logging.INFO)\r\n\r\n# Global constants\r\nACME_TO_CREDITS = 6  # Amount of ACME to convert into credits\r\nSEND_AMOUNT = 2      # Tokens to send from Account 1 to Account 2\r\nACCUMULATE_RPC_URL = \"https://testnet.accumulatenetwork.io\"\r\n\r\nasync def run_full_workflow():\r\n    client = AccumulateClient(ACCUMULATE_RPC_URL)\r\n    query = Query(query_type=QueryType.DEFAULT)\r\n    \r\n    ### 1. Create Lite Token Account 1 ###\r\n    print(\"\\n=== Step 1: Create Lite Token Account 1 ===\")\r\n    priv1, pub1 = generate_ed25519_keypair()\r\n    lite_identity_url1 = LiteAuthorityForKey(pub1, \"ED25519\")\r\n    account1 = f\"{lite_identity_url1}/ACME\"\r\n    print(\"Account 1 (Lite Token Account):\", account1)\r\n    \r\n    ### 2. Faucet: Fund Account 1 & Query Token Balance ###\r\n    print(\"\\n=== Step 2: Faucet & Query Token Balance ===\")\r\n    for i in range(2):\r\n        print(f\"Requesting faucet transaction {i+1} for Account 1...\")\r\n        await client.faucet(account1)\r\n        await asyncio.sleep(20)  # Wait for transaction settlement\r\n\r\n    # Query initial token balance for Account 1\r\n    initial = await client.query(account1, query=query)\r\n    balance_acme = int(initial.balance)\r\n    print(\"LTA 1 balance after faucet:\", initial.balance)\r\n\r\n    await asyncio.sleep(5)  # Wait before next step\r\n\r\n    ### 3. Purchase Credits for Lite Identity & Query Credit Balance ###\r\n    print(\"\\n=== Step 3: Purchase Credits for Lite Identity ===\")\r\n\r\n    # First, select the signer\r\n    signer1 = await Signer.select_signer(URL.parse(lite_identity_url1), priv1, client)\r\n\r\n    # Now, generate a proper transaction header\r\n    txn_header_credits = await TransactionHeader.create(\r\n        principal=account1,\r\n        public_key=pub1,\r\n        signer=signer1,\r\n    )\r\n\r\n    # Build Transaction Body (AddCredits)\r\n    add_credits_txn = AddCredits(\r\n        client=client,\r\n        recipient=URL.parse(lite_identity_url1),\r\n        amount=ACME_TO_CREDITS\r\n    )\r\n\r\n    # Initialize oracle value for the transaction\r\n    await add_credits_txn.initialize_oracle()\r\n\r\n    # Build the transaction\r\n    txn_credits = Transaction(header=txn_header_credits, body=add_credits_txn)\r\n\r\n    # Sign and submit transaction\r\n    response_credits = await signer1.sign_and_submit_transaction(\r\n        client, txn_credits, SignatureType.ED25519\r\n    )\r\n\r\n    await asyncio.sleep(25)  # Wait before next step\r\n    # Query credit balance\r\n    credits = await client.query(lite_identity_url1, query=query)\r\n    balance_credits = int(credits.account['creditBalance']) // 100\r\n    print(\"Lite Identity credit balance:\", balance_credits)\r\n\r\n\r\n    await asyncio.sleep(5)  # Wait before next step\r\n    \r\n    ### 4. Create Lite Token Account 2 & Send Tokens from Account 1 ###\r\n    print(\"\\n=== Step 4: Create Account 2 & Send Tokens ===\")\r\n\r\n    # Generate keys for Account 2\r\n    priv2, pub2 = generate_ed25519_keypair()\r\n    lite_identity_url2 = LiteAuthorityForKey(pub2, \"ED25519\")\r\n    account2 = f\"{lite_identity_url2}/ACME\"\r\n    print(\"Account 2 (Recipient):\", account2)\r\n\r\n    await asyncio.sleep(10)  # Optional pause to ensure faucet settled\r\n\r\n    # --Build SendTokens Transaction Body--\r\n    send_tx_body = SendTokens()\r\n    send_tx_body.add_recipient(URL.parse(account2), SEND_AMOUNT)  # Add recipient and amount\r\n\r\n    # --Build Header--\r\n    txn_header_send = await TransactionHeader.create(\r\n        principal=account1,  # From Account 1\r\n        public_key=pub1,     # Public key of Account 1\r\n        signer=signer1       # Signer associated with Account 1\r\n    )\r\n\r\n    # --Combine Header & Body into a Transaction--\r\n    txn_send = Transaction(header=txn_header_send, body=send_tx_body)\r\n\r\n    # --Sign and Submit Transaction--\r\n    response_send = await signer1.sign_and_submit_transaction(\r\n        client,\r\n        txn_send,\r\n        SignatureType.ED25519\r\n    )\r\n    await asyncio.sleep(25)  # Wait for transaction to settle\r\n\r\n    LTA2_balance = await client.query(account2, query=query)\r\n    balance_acme = int(LTA2_balance.balance)\r\n    print(\"LTA 2 balance after Send TX:\", balance_acme)\r\n\r\n\r\n    ### 5. Create Accumulate Digital Identity (ADI) ###\r\n    print(\"\\n=== Step 5: Create Accumulate Digital Identity (ADI) ===\")\r\n\r\n    # Define the new ADI URL and Keybook URL\r\n    new_identity_url = URL.parse(\"acc://new-identity.acme\")\r\n    keybook_url = URL.parse(\"acc://new-identity.acme/Keybook\")\r\n\r\n    # Use Account 1's signer and key as the sponsor\r\n    sponsor_account = account1  # This should be your Lite Token Account (acc://<lite>/ACME)\r\n\r\n    # --- Build the transaction header ---\r\n    txn_header_adi = await TransactionHeader.create(\r\n        principal=sponsor_account,   # Sponsor account (must have sufficient credits)\r\n        public_key=pub1,             # Public key of the sponsor account\r\n        signer=signer1               # The signer object associated with sponsor\r\n    )\r\n\r\n    # --- Build the transaction body (Positional args only, no keyword args) ---\r\n    tx_body_adi = CreateIdentity(\r\n        new_identity_url,    # New ADI's URL\r\n        pub1,               # Public key as raw bytes\r\n        keybook_url          # Keybook URL for ADI's keybook\r\n    )\r\n\r\n    # --- Combine Header & Body ---\r\n    txn_adi = Transaction(header=txn_header_adi, body=tx_body_adi)\r\n\r\n    # --- Sign and Submit Transaction ---\r\n    response_adi = await signer1.sign_and_submit_transaction(\r\n        client,\r\n        txn_adi,\r\n        SignatureType.ED25519  # Signature type\r\n    )\r\n\r\n    await asyncio.sleep(25)  # Wait for transaction to process before querying (adjust as needed)\r\n\r\n    # Query back to confirm (although may take more time to appear)\r\n    ADI_Query = await client.query(str(new_identity_url), query=query)\r\n    print(\"ADI Details:\", ADI_Query)\r\n\r\n    print(\"\\n=== All exmaple actions completed ===\")\r\n\r\nasyncio.run(run_full_workflow())\r\n```\r\n\r\n---\r\n\r\n## Library Structure\r\n\r\n```plaintext\r\naccumulate-python-client/\r\n\u2502\r\n\u251c\u2500\u2500 accumulate/            # Main library package\r\n\u2502   \u251c\u2500\u2500 api/               # API client and communication layer\r\n\u2502   \u251c\u2500\u2500 models/            # Data models for accounts, signatures, transactions, and responses\r\n\u2502   \u251c\u2500\u2500 signing/           # Cryptographic signing utilities\r\n\u2502   \u2514\u2500\u2500 utils/             # General utilities (e.g., encoding, validation, hashing)\r\n\u2502\r\n\u251c\u2500\u2500 tests/                 # Unit tests\r\n\u2502   \u251c\u2500\u2500 api/               # Tests for components within the library's api directory\r\n\u2502   \u251c\u2500\u2500 models/            # Tests for components within the library's models directory\r\n\u2502   \u251c\u2500\u2500 signing/           # Tests for components within the library's signing directory\r\n\u2502   \u2514\u2500\u2500 utils/             # Tests for components within the library's utils directory\r\n\u251c\u2500\u2500 examples/              # Example  demonstration set of all transaction types\r\n\u251c\u2500\u2500 docs/                  # Documentation for the library (e.g., enhances UI for docs, API reference)\r\n\u2502\r\n\u251c\u2500\u2500 LICENSE                # License for the project\r\n\u251c\u2500\u2500 requirements.txt       # Project dependencies\r\n\u251c\u2500\u2500 setup.py               # Packaging and installation script\r\n\u2514\u2500\u2500 pyproject.toml         # Build system configuration\r\n```\r\n\r\n---\r\n\r\n## Contributing\r\n\r\nContributions are welcome! If you\u2019d like to improve this library, submit a pull request or open an issue.\r\n\r\n1. Fork the repository.\r\n2. Create a feature branch: `git checkout -b feature-name`.\r\n3. Commit your changes: `git commit -m \"Description of changes\"`.\r\n4. Push to the branch: `git push origin feature-name`.\r\n5. Open a pull request.\r\n\r\n---\r\n\r\n## License\r\n\r\nThis project is licensed under the terms of the MIT License. See the `LICENSE` file for more information.\r\n\r\n---\r\n\r\n## Acknowledgements\r\n\r\nThis library was developed by **Jason Gregoire** for [OpenDLT.org](https://opendlt.org), with a mission to leverage Distributed Ledger Technology (DLT) for enhanced global freedom.\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Python client for interacting with the Accumulate Protocol.",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/opendlt/accumulate-python-client"
    },
    "split_keywords": [
        "blockchain",
        " accumulate",
        " cryptocurrency"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8e17d2ad41627a7bbf133cb917ad883afbe4107dd07b6b8d9a5b02c452513ee6",
                "md5": "5c280b230ebd6e8ad79460a47f64e2d8",
                "sha256": "9f23c252eef4153e5a110201c03de3c2f7a3747c19c2e4f003baa30d5609cdd5"
            },
            "downloads": -1,
            "filename": "accumulate_python_client-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5c280b230ebd6e8ad79460a47f64e2d8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 113565,
            "upload_time": "2025-03-14T16:08:05",
            "upload_time_iso_8601": "2025-03-14T16:08:05.547927Z",
            "url": "https://files.pythonhosted.org/packages/8e/17/d2ad41627a7bbf133cb917ad883afbe4107dd07b6b8d9a5b02c452513ee6/accumulate_python_client-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "530b292031849721452ef51f8501e3cf4bf3ea9a50c30b899575bfea86b4b469",
                "md5": "579279eb9d9e4f5b1c48870512f2afa3",
                "sha256": "74829652a64aa5f943b838bb2f4560c796f3cd7c36d3815b0448b793db27a60f"
            },
            "downloads": -1,
            "filename": "accumulate_python_client-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "579279eb9d9e4f5b1c48870512f2afa3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 92816,
            "upload_time": "2025-03-14T16:08:07",
            "upload_time_iso_8601": "2025-03-14T16:08:07.035614Z",
            "url": "https://files.pythonhosted.org/packages/53/0b/292031849721452ef51f8501e3cf4bf3ea9a50c30b899575bfea86b4b469/accumulate_python_client-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-03-14 16:08:07",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "opendlt",
    "github_project": "accumulate-python-client",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "ecdsa",
            "specs": [
                [
                    "==",
                    "0.18.0"
                ]
            ]
        },
        {
            "name": "eth-keys",
            "specs": [
                [
                    "==",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "pycryptodome",
            "specs": [
                [
                    "==",
                    "3.17.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "44.0.0"
                ]
            ]
        },
        {
            "name": "bitcoin",
            "specs": [
                [
                    "==",
                    "1.1.42"
                ]
            ]
        },
        {
            "name": "base58",
            "specs": [
                [
                    "==",
                    "2.1.1"
                ]
            ]
        },
        {
            "name": "PyNaC",
            "specs": [
                [
                    "==",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "websockets",
            "specs": [
                [
                    "==",
                    "10.4"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "protobuf",
            "specs": [
                [
                    "==",
                    "4.24.3"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.19.0"
                ]
            ]
        },
        {
            "name": "msgpack",
            "specs": [
                [
                    "==",
                    "1.0.5"
                ]
            ]
        },
        {
            "name": "croniter",
            "specs": [
                [
                    "==",
                    "1.4.1"
                ]
            ]
        },
        {
            "name": "base58",
            "specs": [
                [
                    "==",
                    "2.1.1"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.7.1"
                ]
            ]
        },
        {
            "name": "async-timeout",
            "specs": [
                [
                    "==",
                    "4.0.3"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "7.4.0"
                ]
            ]
        }
    ],
    "lcname": "accumulate-python-client"
}
        
JKG
Elapsed time: 4.28771s