shadowpay


Nameshadowpay JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryPython SDK for ShadowPay - Privacy-preserving payments on Solana
upload_time2025-11-01 04:34:06
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords solana payments zk-proofs blockchain crypto
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ShadowPay Python SDK

[![PyPI version](https://badge.fury.io/py/shadowpay.svg)](https://badge.fury.io/py/shadowpay)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**Production-ready Python SDK for ShadowPay** - Privacy-preserving automated payments on Solana using Zero-Knowledge proofs.

Perfect for AI/ML developers, data scientists, and automation engineers who need seamless payment integration.

## โœจ Features

- ๐Ÿค– **Automated Payments** - No user confirmation needed after authorization
- ๐Ÿ”’ **Privacy-Preserving** - Zero-knowledge proofs protect sensitive data
- โšก **Async Support** - High-throughput concurrent payments
- ๐ŸŽฏ **Simple API** - Working example in 10 lines of code
- ๐Ÿ›ก๏ธ **Safe Spending Limits** - Per-transaction and daily limits
- ๐Ÿ **Pythonic** - Type hints, context managers, decorators
- ๐Ÿงช **Testing Tools** - Mock clients for easy unit testing

## ๐Ÿš€ Quick Start

### Installation

```bash
pip install shadowpay
```

### 10-Line Example

```python
from shadowpay import AutomatedPaymentBot

# Create bot
bot = AutomatedPaymentBot(
    settler_url='https://shadow.radr.fun/shadowpay',
    user_wallet='YOUR_WALLET_ADDRESS',
    service_key='My Service'
)

# Make payment (automated - no user confirmation!)
tx_hash = bot.make_payment(
    amount_sol=0.001,
    resource='/api/service'
)

print(f"Payment settled: {tx_hash}")
```

## ๐Ÿ“‹ Prerequisites

### 1. Start the Prover Service

The SDK requires a Node.js prover service for ZK proof generation:

```bash
cd prover-service
npm install
npm start
```

The prover service will run on `http://localhost:3001`.

**Docker:**
```bash
cd prover-service
docker build -t shadowpay-prover .
docker run -d -p 3001:3001 shadowpay-prover
```

### 2. User Authorization

Before your bot can make payments, users must authorize it:

```python
from shadowpay import ShadowPayClient

client = ShadowPayClient()

# User authorizes your service (requires user signature)
client.authorize_spending(
    user_wallet='USER_WALLET',
    service_name='My Service',
    max_amount_per_tx=0.01,   # Max 0.01 SOL per payment
    max_daily_spend=1.0,       # Max 1 SOL per day
    valid_days=365,            # Valid for 1 year
    user_signature='USER_SIGNATURE'
)
```

## ๐Ÿ’ก Usage Examples

### Basic Payment Bot

```python
from shadowpay import AutomatedPaymentBot

bot = AutomatedPaymentBot(
    settler_url='https://shadow.radr.fun/shadowpay',
    user_wallet='USER_WALLET',
    service_key='ChatGPT Bot',
    prover_url='http://localhost:3001'
)

# Check authorization
auth = bot.check_authorization()
print(f"Daily limit: {auth.max_daily_spend_sol} SOL")
print(f"Remaining: {auth.remaining_today_sol} SOL")

# Make payment
tx_hash = bot.make_payment(
    amount_sol=0.001,
    resource='/api/chat',
    metadata={'message_id': '12345'}
)
```

### Async Batch Payments

```python
import asyncio
from shadowpay import AsyncAutomatedPaymentBot

async def main():
    async with AsyncAutomatedPaymentBot(
        settler_url='https://shadow.radr.fun/shadowpay',
        user_wallet='USER_WALLET',
        service_key='Batch Processor'
    ) as bot:
        # Make 100 concurrent payments
        tasks = [
            bot.make_payment_async(0.0001, f'/api/item_{i}')
            for i in range(100)
        ]
        
        results = await asyncio.gather(*tasks)
        print(f"Processed {len(results)} payments")

asyncio.run(main())
```

### Decorator Pattern

```python
from shadowpay import requires_payment, set_global_bot

# Set up bot once
bot = AutomatedPaymentBot(...)
set_global_bot(bot)

# Automatic payment before function execution
@requires_payment(amount_sol=0.001)
def expensive_api_call(data):
    # Payment already settled!
    return process_data(data)

result = expensive_api_call({"query": "..."})
```

### Error Handling

```python
from shadowpay import (
    AutomatedPaymentBot,
    DailyLimitExceededError,
    InvalidAuthorizationError
)

bot = AutomatedPaymentBot(...)

try:
    tx = bot.make_payment(0.001, '/api/service')
except InvalidAuthorizationError:
    print("Not authorized! User needs to authorize service.")
except DailyLimitExceededError as e:
    print(f"Daily limit exceeded. Spent: {e.spent}, Limit: {e.limit}")
```

## ๐Ÿ“š Examples

See the `examples/` directory for complete working examples:

- **[chatgpt_bot.py](examples/chatgpt_bot.py)** - ChatGPT billing bot
- **[data_api_bot.py](examples/data_api_bot.py)** - Premium data API with rate limiting
- **[async_batch_payments.py](examples/async_batch_payments.py)** - High-throughput async payments
- **[decorator_example.py](examples/decorator_example.py)** - Using the @requires_payment decorator

Run examples:
```bash
python examples/chatgpt_bot.py
python examples/data_api_bot.py
```

## ๐Ÿงช Testing

### Mock Client

```python
from shadowpay.testing import MockShadowPayClient

# Create mock client
client = MockShadowPayClient()
client.set_balance('wallet', 1.0)  # 1 SOL
client.authorize_service('wallet', 'TestBot', max_daily=10.0)

# Make mock payments
tx = client.make_payment('wallet', 'TestBot', 0.001, '/test')
assert tx.startswith('mock_tx_')

# Verify spending
spent = client.get_spent_today('wallet', 'TestBot')
assert spent == 1000000  # lamports
```

## ๐Ÿ—๏ธ Architecture

```
Python App
    โ†“
ShadowPayClient / AutomatedPaymentBot
    โ†“
ProverClient โ†’ Node.js Prover Service (snarkjs)
    โ†“
ShadowPay Settler API
    โ†“
Solana Blockchain
```

## ๐Ÿ”ง Configuration

### Environment Variables

```bash
SHADOWPAY_SETTLER_URL=https://shadow.radr.fun/shadowpay
SHADOWPAY_NETWORK=solana-mainnet
SHADOWPAY_USER_WALLET=YOUR_WALLET
SHADOWPAY_SERVICE_KEY=YOUR_SERVICE
```

### Configuration File

Create `shadowpay.toml`:

```toml
[shadowpay]
settler_url = "https://shadow.radr.fun/shadowpay"
network = "solana-mainnet"
user_wallet = "YOUR_WALLET"
service_key = "YOUR_SERVICE"

[limits]
max_per_transaction = 0.01
max_daily_spend = 1.0
retry_attempts = 3
timeout_seconds = 30
```

## ๐Ÿ“– API Reference

### ShadowPayClient

Main client for API interactions:

```python
client = ShadowPayClient(
    settler_url='https://shadow.radr.fun/shadowpay',
    network='solana-mainnet',
    api_key=None,
    timeout=30
)

# API Key Management
client.generate_api_key()
client.get_api_key_by_wallet(wallet)
client.rotate_api_key(current_key)

# Escrow
client.get_escrow_balance(wallet)
client.deposit_to_escrow(wallet, amount_sol, signature)

# Authorization
client.authorize_spending(...)
client.revoke_authorization(...)
client.list_authorizations(wallet)

# Payments
client.settle_payment(proof, amount, resource, metadata)
```

### AutomatedPaymentBot

Bot for making automated payments:

```python
bot = AutomatedPaymentBot(
    settler_url='...',
    user_wallet='...',
    service_key='...',
    prover_url='http://localhost:3001'
)

# Check authorization
auth = bot.check_authorization()

# Make payment
tx_hash = bot.make_payment(amount_sol, resource, metadata)

# Get spending info
spent = bot.get_spending_today()
remaining = bot.get_remaining_limit()
```

### AsyncAutomatedPaymentBot

Async version for concurrent payments:

```python
async with AsyncAutomatedPaymentBot(...) as bot:
    # Single payment
    tx = await bot.make_payment_async(amount_sol, resource)
    
    # Batch payments
    tx_hashes = await bot.make_batch_payments([
        {'amount_sol': 0.001, 'resource': '/api/1'},
        {'amount_sol': 0.002, 'resource': '/api/2'},
    ])
```

## ๐Ÿ› ๏ธ Development

### Setup

```bash
git clone https://github.com/Lukey372/ShadowPay.git
cd ShadowPay/python-sdk
pip install -e ".[dev]"
```

### Run Tests

```bash
pytest
pytest --cov=shadowpay --cov-report=html
```

### Code Quality

```bash
black shadowpay/
ruff check shadowpay/
mypy shadowpay/
```

## ๐Ÿ”’ Security

- โœ… Zero-knowledge proofs protect transaction privacy
- โœ… Daily spending limits prevent abuse
- โœ… Per-transaction limits for safety
- โœ… User authorization required before any payment
- โœ… Authorizations can be revoked anytime

## ๐Ÿ“Š Performance

- **Sync client**: ~100ms overhead per payment (excluding proof generation)
- **Async client**: 50-100+ concurrent payments per second
- **Proof generation**: 1-30 seconds (depends on circuit complexity)

## ๐Ÿค Contributing

Contributions welcome! Please read our [Contributing Guide](CONTRIBUTING.md).

## ๐Ÿ“„ License

MIT License - see [LICENSE](LICENSE) file for details.

## ๐Ÿ”— Links

- **API Documentation**: https://editor.scalar.com/@radr/apis/shadowpay-api/latest
- **GitHub**: https://github.com/Lukey372/ShadowPay
- **Test Page**: https://shadow.radr.fun/shadowpay/test-automated-payment.html

## ๐Ÿ’ฌ Support

- GitHub Issues: https://github.com/Lukey372/ShadowPay/issues
- Email: contact@radr.fun

## ๐ŸŽฏ Use Cases

Perfect for:
- ๐Ÿค– AI API billing (ChatGPT, Anthropic, OpenAI proxies)
- ๐Ÿ“Š Data science APIs (price feeds, analytics, ML models)
- ๐Ÿ”„ Automation scripts and bots
- ๐ŸŒ IoT device payments
- ๐Ÿ’ณ Subscription services
- ๐Ÿค Trading bot marketplaces

## โšก Quick Links

- [Examples](examples/) - Working code examples
- [API Reference](docs/api_reference.md) - Complete API documentation
- [Prover Service](prover-service/) - ZK proof generation service
- [Testing Guide](docs/testing.md) - How to test your integration

---

**Made with โค๏ธ by [RADR](https://radr.fun)**

**Let's make payments private and automated! ๐Ÿš€**


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "shadowpay",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "solana, payments, zk-proofs, blockchain, crypto",
    "author": null,
    "author_email": "RADR <contact@radr.fun>",
    "download_url": "https://files.pythonhosted.org/packages/f7/e4/94de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5/shadowpay-1.0.0.tar.gz",
    "platform": null,
    "description": "# ShadowPay Python SDK\n\n[![PyPI version](https://badge.fury.io/py/shadowpay.svg)](https://badge.fury.io/py/shadowpay)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Production-ready Python SDK for ShadowPay** - Privacy-preserving automated payments on Solana using Zero-Knowledge proofs.\n\nPerfect for AI/ML developers, data scientists, and automation engineers who need seamless payment integration.\n\n## \u2728 Features\n\n- \ud83e\udd16 **Automated Payments** - No user confirmation needed after authorization\n- \ud83d\udd12 **Privacy-Preserving** - Zero-knowledge proofs protect sensitive data\n- \u26a1 **Async Support** - High-throughput concurrent payments\n- \ud83c\udfaf **Simple API** - Working example in 10 lines of code\n- \ud83d\udee1\ufe0f **Safe Spending Limits** - Per-transaction and daily limits\n- \ud83d\udc0d **Pythonic** - Type hints, context managers, decorators\n- \ud83e\uddea **Testing Tools** - Mock clients for easy unit testing\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\npip install shadowpay\n```\n\n### 10-Line Example\n\n```python\nfrom shadowpay import AutomatedPaymentBot\n\n# Create bot\nbot = AutomatedPaymentBot(\n    settler_url='https://shadow.radr.fun/shadowpay',\n    user_wallet='YOUR_WALLET_ADDRESS',\n    service_key='My Service'\n)\n\n# Make payment (automated - no user confirmation!)\ntx_hash = bot.make_payment(\n    amount_sol=0.001,\n    resource='/api/service'\n)\n\nprint(f\"Payment settled: {tx_hash}\")\n```\n\n## \ud83d\udccb Prerequisites\n\n### 1. Start the Prover Service\n\nThe SDK requires a Node.js prover service for ZK proof generation:\n\n```bash\ncd prover-service\nnpm install\nnpm start\n```\n\nThe prover service will run on `http://localhost:3001`.\n\n**Docker:**\n```bash\ncd prover-service\ndocker build -t shadowpay-prover .\ndocker run -d -p 3001:3001 shadowpay-prover\n```\n\n### 2. User Authorization\n\nBefore your bot can make payments, users must authorize it:\n\n```python\nfrom shadowpay import ShadowPayClient\n\nclient = ShadowPayClient()\n\n# User authorizes your service (requires user signature)\nclient.authorize_spending(\n    user_wallet='USER_WALLET',\n    service_name='My Service',\n    max_amount_per_tx=0.01,   # Max 0.01 SOL per payment\n    max_daily_spend=1.0,       # Max 1 SOL per day\n    valid_days=365,            # Valid for 1 year\n    user_signature='USER_SIGNATURE'\n)\n```\n\n## \ud83d\udca1 Usage Examples\n\n### Basic Payment Bot\n\n```python\nfrom shadowpay import AutomatedPaymentBot\n\nbot = AutomatedPaymentBot(\n    settler_url='https://shadow.radr.fun/shadowpay',\n    user_wallet='USER_WALLET',\n    service_key='ChatGPT Bot',\n    prover_url='http://localhost:3001'\n)\n\n# Check authorization\nauth = bot.check_authorization()\nprint(f\"Daily limit: {auth.max_daily_spend_sol} SOL\")\nprint(f\"Remaining: {auth.remaining_today_sol} SOL\")\n\n# Make payment\ntx_hash = bot.make_payment(\n    amount_sol=0.001,\n    resource='/api/chat',\n    metadata={'message_id': '12345'}\n)\n```\n\n### Async Batch Payments\n\n```python\nimport asyncio\nfrom shadowpay import AsyncAutomatedPaymentBot\n\nasync def main():\n    async with AsyncAutomatedPaymentBot(\n        settler_url='https://shadow.radr.fun/shadowpay',\n        user_wallet='USER_WALLET',\n        service_key='Batch Processor'\n    ) as bot:\n        # Make 100 concurrent payments\n        tasks = [\n            bot.make_payment_async(0.0001, f'/api/item_{i}')\n            for i in range(100)\n        ]\n        \n        results = await asyncio.gather(*tasks)\n        print(f\"Processed {len(results)} payments\")\n\nasyncio.run(main())\n```\n\n### Decorator Pattern\n\n```python\nfrom shadowpay import requires_payment, set_global_bot\n\n# Set up bot once\nbot = AutomatedPaymentBot(...)\nset_global_bot(bot)\n\n# Automatic payment before function execution\n@requires_payment(amount_sol=0.001)\ndef expensive_api_call(data):\n    # Payment already settled!\n    return process_data(data)\n\nresult = expensive_api_call({\"query\": \"...\"})\n```\n\n### Error Handling\n\n```python\nfrom shadowpay import (\n    AutomatedPaymentBot,\n    DailyLimitExceededError,\n    InvalidAuthorizationError\n)\n\nbot = AutomatedPaymentBot(...)\n\ntry:\n    tx = bot.make_payment(0.001, '/api/service')\nexcept InvalidAuthorizationError:\n    print(\"Not authorized! User needs to authorize service.\")\nexcept DailyLimitExceededError as e:\n    print(f\"Daily limit exceeded. Spent: {e.spent}, Limit: {e.limit}\")\n```\n\n## \ud83d\udcda Examples\n\nSee the `examples/` directory for complete working examples:\n\n- **[chatgpt_bot.py](examples/chatgpt_bot.py)** - ChatGPT billing bot\n- **[data_api_bot.py](examples/data_api_bot.py)** - Premium data API with rate limiting\n- **[async_batch_payments.py](examples/async_batch_payments.py)** - High-throughput async payments\n- **[decorator_example.py](examples/decorator_example.py)** - Using the @requires_payment decorator\n\nRun examples:\n```bash\npython examples/chatgpt_bot.py\npython examples/data_api_bot.py\n```\n\n## \ud83e\uddea Testing\n\n### Mock Client\n\n```python\nfrom shadowpay.testing import MockShadowPayClient\n\n# Create mock client\nclient = MockShadowPayClient()\nclient.set_balance('wallet', 1.0)  # 1 SOL\nclient.authorize_service('wallet', 'TestBot', max_daily=10.0)\n\n# Make mock payments\ntx = client.make_payment('wallet', 'TestBot', 0.001, '/test')\nassert tx.startswith('mock_tx_')\n\n# Verify spending\nspent = client.get_spent_today('wallet', 'TestBot')\nassert spent == 1000000  # lamports\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\n```\nPython App\n    \u2193\nShadowPayClient / AutomatedPaymentBot\n    \u2193\nProverClient \u2192 Node.js Prover Service (snarkjs)\n    \u2193\nShadowPay Settler API\n    \u2193\nSolana Blockchain\n```\n\n## \ud83d\udd27 Configuration\n\n### Environment Variables\n\n```bash\nSHADOWPAY_SETTLER_URL=https://shadow.radr.fun/shadowpay\nSHADOWPAY_NETWORK=solana-mainnet\nSHADOWPAY_USER_WALLET=YOUR_WALLET\nSHADOWPAY_SERVICE_KEY=YOUR_SERVICE\n```\n\n### Configuration File\n\nCreate `shadowpay.toml`:\n\n```toml\n[shadowpay]\nsettler_url = \"https://shadow.radr.fun/shadowpay\"\nnetwork = \"solana-mainnet\"\nuser_wallet = \"YOUR_WALLET\"\nservice_key = \"YOUR_SERVICE\"\n\n[limits]\nmax_per_transaction = 0.01\nmax_daily_spend = 1.0\nretry_attempts = 3\ntimeout_seconds = 30\n```\n\n## \ud83d\udcd6 API Reference\n\n### ShadowPayClient\n\nMain client for API interactions:\n\n```python\nclient = ShadowPayClient(\n    settler_url='https://shadow.radr.fun/shadowpay',\n    network='solana-mainnet',\n    api_key=None,\n    timeout=30\n)\n\n# API Key Management\nclient.generate_api_key()\nclient.get_api_key_by_wallet(wallet)\nclient.rotate_api_key(current_key)\n\n# Escrow\nclient.get_escrow_balance(wallet)\nclient.deposit_to_escrow(wallet, amount_sol, signature)\n\n# Authorization\nclient.authorize_spending(...)\nclient.revoke_authorization(...)\nclient.list_authorizations(wallet)\n\n# Payments\nclient.settle_payment(proof, amount, resource, metadata)\n```\n\n### AutomatedPaymentBot\n\nBot for making automated payments:\n\n```python\nbot = AutomatedPaymentBot(\n    settler_url='...',\n    user_wallet='...',\n    service_key='...',\n    prover_url='http://localhost:3001'\n)\n\n# Check authorization\nauth = bot.check_authorization()\n\n# Make payment\ntx_hash = bot.make_payment(amount_sol, resource, metadata)\n\n# Get spending info\nspent = bot.get_spending_today()\nremaining = bot.get_remaining_limit()\n```\n\n### AsyncAutomatedPaymentBot\n\nAsync version for concurrent payments:\n\n```python\nasync with AsyncAutomatedPaymentBot(...) as bot:\n    # Single payment\n    tx = await bot.make_payment_async(amount_sol, resource)\n    \n    # Batch payments\n    tx_hashes = await bot.make_batch_payments([\n        {'amount_sol': 0.001, 'resource': '/api/1'},\n        {'amount_sol': 0.002, 'resource': '/api/2'},\n    ])\n```\n\n## \ud83d\udee0\ufe0f Development\n\n### Setup\n\n```bash\ngit clone https://github.com/Lukey372/ShadowPay.git\ncd ShadowPay/python-sdk\npip install -e \".[dev]\"\n```\n\n### Run Tests\n\n```bash\npytest\npytest --cov=shadowpay --cov-report=html\n```\n\n### Code Quality\n\n```bash\nblack shadowpay/\nruff check shadowpay/\nmypy shadowpay/\n```\n\n## \ud83d\udd12 Security\n\n- \u2705 Zero-knowledge proofs protect transaction privacy\n- \u2705 Daily spending limits prevent abuse\n- \u2705 Per-transaction limits for safety\n- \u2705 User authorization required before any payment\n- \u2705 Authorizations can be revoked anytime\n\n## \ud83d\udcca Performance\n\n- **Sync client**: ~100ms overhead per payment (excluding proof generation)\n- **Async client**: 50-100+ concurrent payments per second\n- **Proof generation**: 1-30 seconds (depends on circuit complexity)\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Please read our [Contributing Guide](CONTRIBUTING.md).\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## \ud83d\udd17 Links\n\n- **API Documentation**: https://editor.scalar.com/@radr/apis/shadowpay-api/latest\n- **GitHub**: https://github.com/Lukey372/ShadowPay\n- **Test Page**: https://shadow.radr.fun/shadowpay/test-automated-payment.html\n\n## \ud83d\udcac Support\n\n- GitHub Issues: https://github.com/Lukey372/ShadowPay/issues\n- Email: contact@radr.fun\n\n## \ud83c\udfaf Use Cases\n\nPerfect for:\n- \ud83e\udd16 AI API billing (ChatGPT, Anthropic, OpenAI proxies)\n- \ud83d\udcca Data science APIs (price feeds, analytics, ML models)\n- \ud83d\udd04 Automation scripts and bots\n- \ud83c\udf10 IoT device payments\n- \ud83d\udcb3 Subscription services\n- \ud83e\udd1d Trading bot marketplaces\n\n## \u26a1 Quick Links\n\n- [Examples](examples/) - Working code examples\n- [API Reference](docs/api_reference.md) - Complete API documentation\n- [Prover Service](prover-service/) - ZK proof generation service\n- [Testing Guide](docs/testing.md) - How to test your integration\n\n---\n\n**Made with \u2764\ufe0f by [RADR](https://radr.fun)**\n\n**Let's make payments private and automated! \ud83d\ude80**\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python SDK for ShadowPay - Privacy-preserving payments on Solana",
    "version": "1.0.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/Lukey372/ShadowPay/issues",
        "Documentation": "https://shadow.radr.fun/shadowpay",
        "Homepage": "https://github.com/Lukey372/ShadowPay",
        "Repository": "https://github.com/Lukey372/ShadowPay"
    },
    "split_keywords": [
        "solana",
        " payments",
        " zk-proofs",
        " blockchain",
        " crypto"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "23494003557f7df1a0b3a5228454cdd109d6d00a743c980d1c58577e43c25fea",
                "md5": "f8e1465c59814a42a3a7676a3876a4c3",
                "sha256": "9898ccd78cc27aa7a5fa7ff5d7d90db41a9dfd120c90fe01cd811caae30d4604"
            },
            "downloads": -1,
            "filename": "shadowpay-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f8e1465c59814a42a3a7676a3876a4c3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 25291,
            "upload_time": "2025-11-01T04:34:05",
            "upload_time_iso_8601": "2025-11-01T04:34:05.388515Z",
            "url": "https://files.pythonhosted.org/packages/23/49/4003557f7df1a0b3a5228454cdd109d6d00a743c980d1c58577e43c25fea/shadowpay-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f7e494de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5",
                "md5": "1f94928e3da6fcf15d4a261b2030f411",
                "sha256": "d72d6db35fd030714405c2696c048bce29cbf616398d59d5854731b3eae4b562"
            },
            "downloads": -1,
            "filename": "shadowpay-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "1f94928e3da6fcf15d4a261b2030f411",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 24138,
            "upload_time": "2025-11-01T04:34:06",
            "upload_time_iso_8601": "2025-11-01T04:34:06.814016Z",
            "url": "https://files.pythonhosted.org/packages/f7/e4/94de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5/shadowpay-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-01 04:34:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Lukey372",
    "github_project": "ShadowPay",
    "github_not_found": true,
    "lcname": "shadowpay"
}
        
Elapsed time: 2.41862s