Skip to main content

Autonomous Futures Protocol Python SDK

Project description

Autonomous Futures Protocol Python SDK

Installation

This library is published on PyPI as the afp-sdk package. It can be installed in a virtualenv with:

pip install afp-sdk

Overview

The afp package consists of the following:

  • afp top-level module: High-level API for interacting with the Clearing System and the AutEx exchange.
  • afp.bindings submodule: Low-level API that provides typed Python bindings for the Clearing System smart contracts.

Usage

Preparation

In order to use the AFP system, traders need to prepare the following:

  • The ID of a product to be traded.
  • The address of the product's collateral token.
  • An Autonity account for managing the margin account. It needs to hold a balance in ATN (for paying gas fee) and in the product's collateral token.
  • An Autonity account for signing intents. The two accounts can be the same.
  • The address of an Autonity RPC provider. They can be found on Chainlist.

We can store those in the following constants (using random example IDs):

import os

PRODUCT_ID = "0x38d502bb683f53ec7c3d7a14b4aa47ac717659e121426131c0189c15bf4b9460"
COLLATERAL_ASSET = "0xD1A1e4035a164cF42228A8aAaBC2c0Ac9e49687B"
MARGIN_ACCOUNT_PRIVATE_KEY = os.environ["MARGIN_ACCOUNT_PRIVATE_KEY"]
INTENT_ACCOUNT_PRIVATE_KEY = os.environ["INTENT_ACCOUNT_PRIVATE_KEY"]
AUTONITY_RPC_URL = "https://bakerloo.autonity-apis.com"

Account IDs (addresses) may be retrieved from the private keys with eth_account:

from eth_account import Account

MARGIN_ACCOUNT_ID = Account.from_key(MARGIN_ACCOUNT_PRIVATE_KEY).address
INTENT_ACCOUNT_ID = Account.from_key(INTENT_ACCOUNT_PRIVATE_KEY).address

Clearing API

Functions of the Clearing API can be accessed via the afp.Clearing session object. It connects to the specified Autonity RPC provider and communicates with the Clearing System smart contracts.

import afp

clearing = afp.Clearing(MARGIN_ACCOUNT_PRIVATE_KEY, AUTONITY_RPC_URL)

Collateral can be deposited into the margin account with clearing.deposit_into_margin_account().

from decimal import Decimal

clearing.deposit_into_margin_account(COLLATERAL_ASSET, Decimal("100.00"))
print(clearing.capital(COLLATERAL_ASSET))

The intent account should be authorized to submit orders. This is only required if the intent account and the margin account are different.

clearing.authorize(COLLATERAL_ASSET, INTENT_ACCOUNT_ID)

Trading API

The functions of the trading API can be accessed via the afp.Trading session object. It communicates with the AutEx exchange and authenticates on creation with the intent account's private key.

trading = afp.Trading(INTENT_ACCOUNT_PRIVATE_KEY)

To start trading a product, its parameters shall be retrieved from the server.

product = trading.product(PRODUCT_ID)

Intents can be created with trading.create_intent(). Intent creation involves hashing and signing the intent data. (The intent account's address is derived from the private key specified in the Trading constructor.)

from datetime import datetime, timedelta
from decimal import Decimal

intent = trading.create_intent(
    margin_account_id=MARGIN_ACCOUNT_ID,
    product=product,
    side="bid",
    limit_price=Decimal("1.23"),
    quantity=2,
    max_trading_fee_rate=Decimal("0.1"),
    good_until_time=datetime.now() + timedelta(hours=1),
)

The intent expressing a limit order can then be submitted to the exchange with trading.submit_limit_order() that returns the created order object.

order = trading.submit_limit_order(intent)
print(order)

The exchange then performs various checks to ensure that the order is valid. To ensure that the order has been accepted, its state can be polled with trading.order().

order = trading.order(order.id)
print(order.state)

Fills of orders submitted by the authenticated intent account can be queried with trading.order_fills().

fills = trading.order_fills(product_id=PRODUCT_ID)
print(fills)

See further code examples in the examples directory.

Development

The package uses uv as project manager.

  • Dependecies can be installed with the uv sync command.
  • Linters can be executed with the uv run poe lint command.
  • Tests can be executed with the uv run poe test command.
  • Distributions can be checked before release with the uv run poe check-dist command.
  • Markdown API documentation can be generated with the uv run poe doc-gen command.

Project details


Download files

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

Source Distribution

afp_sdk-0.1.2.tar.gz (125.8 kB view details)

Uploaded Source

Built Distribution

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

afp_sdk-0.1.2-py3-none-any.whl (49.3 kB view details)

Uploaded Python 3

File details

Details for the file afp_sdk-0.1.2.tar.gz.

File metadata

  • Download URL: afp_sdk-0.1.2.tar.gz
  • Upload date:
  • Size: 125.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.4

File hashes

Hashes for afp_sdk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f9e5c852c3f4fa538d815853d2b5e55e527e883e9602659792924e58b045f543
MD5 32261cda33ee8f872e011d96a46bc3eb
BLAKE2b-256 0c3759a302f6a67ac9d771e6257f84ce451e7699af7d6542566fa3ff2a1ede58

See more details on using hashes here.

File details

Details for the file afp_sdk-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: afp_sdk-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 49.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.4

File hashes

Hashes for afp_sdk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 74547129c7cd8d07773da31b738ada25d904fc0977f433c90a942c2fbd768538
MD5 924b66418dd028cf8fc8b75889671663
BLAKE2b-256 5eaa6f62550c2ac05fc7cc06dab3b6be960964e117cd47c4aeed17fb127a7100

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page