Skip to main content

Autonity Futures Protocol Python SDK

Project description

Autonity 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.0.tar.gz (125.6 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.0-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for afp_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7f196a8b6e0b535eaab95d1b947f92ba8b6fd0ac09e4f209039dc73954cf6e96
MD5 037495605c920cba3d545ce236120426
BLAKE2b-256 fd61573074af2ed4ad6472f57bc1983116dfc7deb29be4eacf3984cce78f6ab3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for afp_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df3f9edbd6bfa3c313934a728bbcb1153388433f63e17a92013a9d0a2fa5ff63
MD5 d235e67f546804a7a58864e65e67396c
BLAKE2b-256 d760ebfaeadee9405137ee47991889e74f75395b4a67edf2c5556b297b0e2655

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