# Accumulate Python Client

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\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"
}