Skip to main content

oasis-privana

Python SDK for Privana - manage deposits, withdrawals, locks, and transfers on the accounting module.

Installation

pip install oasis-privana

Quick Start

import asyncio
from oasis_privana import PrivanaClient, DepositCheckRequest

async def main():
    async with PrivanaClient(base_url="https://api.example.com") as client:
        # Get per-user deposit address
        addr = await client.get_deposit_address()
        print(f"Deposit to: {addr.deposit_address}")

        # After sending tokens to the deposit address, verify the deposit
        result = await client.check_deposit(
            DepositCheckRequest(
                chain_id=84532,
                tx_hash="0xYourTxHash",
                amount=1000000,
            )
        )
        print(f"Deposit status: {result.status}")

asyncio.run(main())

Direct SIWE Private Reads

Private read endpoints such as balances, history, and locked funds use the backend's direct SIWE flow. The Python SDK exposes the raw helpers and token setters rather than a hosted auth-code wrapper. get_history(offset=-1, limit=50) returns one page; non-negative offsets count pages from the oldest entries, negative offsets count from the end, each page is oldest-to-newest, and limit must be between 0 and 100. History entries include lock-lifecycle kinds (modifyLock, unlockLock) and directional transfer kinds (transferFromLockOut/transferFromLockIn, transferBalanceOut/transferBalanceIn). On the outbound (Out) kinds counterparty is the recipient, and on the inbound (In) kinds it is the sender.

import asyncio
from oasis_privana import PrivanaClient

async def main():
    async with PrivanaClient(base_url="https://api.example.com") as client:
        domains = await client.get_siwe_domain()
        nonce = await client.get_siwe_nonce("0xYourAddress")

        # Build and sign the SIWE message in your app, then submit it here.
        login = await client.authenticate_private_reads(
            siwe_message="your signed-in message",
            signature="0xYourSignature",
        )

        balance = await client.get_balance("0xTokenId")
        history = await client.get_history()
        print(domains.domains, nonce.nonce, login.address, balance.balance, history.total)

asyncio.run(main())

EIP-712 Signing

from eth_account import Account
from oasis_privana import (
    sign_lock_message,
    LockNonceResponse,
    SignLockParams,
    LockMessage,
    get_accounting_contract,
    create_lock_expiry,
)

account = Account.from_key("0xYourPrivateKey")

signature = sign_lock_message(
    SignLockParams(
        account=account,
        network="testnet",
        verifying_contract=get_accounting_contract("testnet"),
        message=LockMessage(
            service_address="0xServiceAddress",
            token_id="0xTokenId",
            amount=1000000,
            expiry=create_lock_expiry(60),
            nonce=0,
        ),
    )
)

API Reference

Client

  • PrivanaClient(base_url, timeout=30.0, headers=None) - Main API client
    • get_deposit_address(request=None) - Get per-user deposit address
    • check_deposit(request) - Verify a deposit and trigger credit
    • get_balance(token_id) - Get token balance for the authenticated user
    • get_batch_balances(request) - Get multiple token balances
    • get_history(offset=-1, limit=50) - Get one authenticated history page
    • get_token_info(token_id) - Get token information
    • lock_funds(request) - Lock funds for a service
    • get_lock_nonce(user_address) - Get next create-lock nonce
    • get_modify_lock_nonce(user_address) - Get next modify-lock nonce
    • modify_lock(request) - Modify an existing lock (add funds and/or extend expiry)
    • unlock_funds(request) - Unlock specific lock
    • unlock_all_expired(request) - Unlock all expired locks
    • get_locked_funds(service_address=None) - Get locked funds for the authenticated user
    • get_total_locked_balance(token_id) - Get total locked balance for the authenticated user
    • get_expired_locks() - Get expired locks for the authenticated user
    • transfer_funds(request) - Transfer tokens (requires nonce)
    • get_transfer_nonce(user_address) - Get next transfer nonce
    • transfer_locked_funds(request) - Transfer locked tokens
    • get_transfer_locked_nonce(service_address) - Get next transfer-from-lock nonce
    • request_withdrawal(request) - Request withdrawal
    • get_withdrawal_nonce(user_address) - Get next withdrawal nonce
    • get_pending_withdrawals(user_address) - Get pending withdrawals
    • get_withdrawal_info(index) - Get withdrawal info
    • get_siwe_domain() - Get the SIWE auth domain allow-list
    • get_siwe_nonce(user_address) - Get a SIWE login nonce
    • login_with_siwe(siwe_message, signature) - Exchange a signed SIWE message for tokens
    • authenticate_private_reads(siwe_message, signature) - Login and store X-SIWE-Token
    • set_private_read_token(token) / clear_private_read_token() - Manage X-SIWE-Token
    • set_bearer_token(token) / clear_bearer_token() - Manage bearer auth headers

Signing

  • sign_lock_message(params) - Sign lock message
  • sign_modify_lock_message(params) - Sign modify lock message
  • sign_transfer_message(params) - Sign transfer message
  • sign_transfer_locked_message(params) - Sign transfer locked message
  • sign_withdraw_message(params) - Sign withdrawal message
  • create_lock_expiry(minutes_from_now=60) - Create expiry timestamp

Utilities

  • format_token_amount(amount, decimals=18) - Format wei to human-readable
  • parse_token_amount(amount, decimals=18) - Parse human-readable to wei
  • shorten_address(address, chars=4) - Shorten Ethereum address
  • format_timestamp(timestamp) - Format Unix timestamp to readable string
  • is_expired(expiry) - Check if timestamp is expired
  • format_time_remaining(expiry_timestamp) - Format time remaining
  • format_relative_time(timestamp) - Format relative time (e.g., "5m ago")

License

Apache-2.0

Download files

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

Source Distribution

oasis_privana-0.3.0.tar.gz (109.3 kB view details)

Uploaded Source

Built Distribution

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

oasis_privana-0.3.0-py3-none-any.whl (27.8 kB view details)

Uploaded Python 3

File details

Details for the file oasis_privana-0.3.0.tar.gz.

File metadata

  • Download URL: oasis_privana-0.3.0.tar.gz
  • Upload date:
  • Size: 109.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for oasis_privana-0.3.0.tar.gz
Algorithm Hash digest
SHA256 595f6b2634f3be29be09def84ecc4f1f21fa75c54c7c8b98f47ed8e393a4059b
MD5 97575690779121a3195aa810477e2603
BLAKE2b-256 c423c664aaea4454350308dd2d68651126e497c0e4b7d7407428f2b6910f40bf

See more details on using hashes here.

File details

Details for the file oasis_privana-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: oasis_privana-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 27.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for oasis_privana-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 97d7e75b37c647c6096c772fda585523135dc7b91aa632de748d43ace91612a9
MD5 bd95bb7aebc5bdc3ba3f9fd2b9284866
BLAKE2b-256 b1354d1dca34474c7236ff7ba41c42e7a10f8df5c92d5971353d60cb5e5c6c87

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.16

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page