Report

Report provides method to retrieve historical transactions and current balances/positions.

Method reference: Methods. Per-venue specifics: Implementations.

Accounts & providers

ReportSDK has no built-in default accounts (unlike MarketSDK/WalletSDK/EarnSDK) — every account must be listed explicitly. Both record types carry a Provenance (api/tabular/manual/derived) tracing where they came from. providers (BigQuery/Alchemy/Etherscan/Moralis credentials) are only needed by chain-based venues that use them.

Example

from tribulnation.sdk import ReportSDK, accounts
from dotenv import load_dotenv

load_dotenv()

report = ReportSDK(
  {
    'ethereum': accounts.Evm('ethereum'),
    'polygon': accounts.Evm('polygon'),
    'hyperevm': accounts.Evm('hyperevm'),
  }
)

for account, sdk in report.all.items():
  async with sdk:
    result = await sdk.snapshot()
  snapshot = result.snapshot
  print(
    f'[{account}] ({snapshot.time:%Y-%m-%d %H:%M:%S}) from {result.provenance["source"]}'
  )
  for subaccount in snapshot.subaccounts:
    print(f'> account: {subaccount.subaccount}')
    for asset, balance in subaccount.balances.items():
      print(f'> {asset}: {balance}')
    for instrument, position in subaccount.positions.items():
      print(f'> {instrument}: {position.size} @ {position.avg_price}')
  print()

report.all is eager: it resolves every configured account at once, so a single venue without reporting wired raises and you get nothing. Reach for report.venue(id) when the workspace may contain one — see the support matrix for which venues are wired.

Reports own network clients, so use them as async context managers. Entering one enters everything it owns and releases it on exit; see Async Usage.