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:
afptop-level module: High-level API for interacting with the Clearing System and the AutEx exchange.afp.bindingssubmodule: 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 synccommand. - Linters can be executed with the
uv run poe lintcommand. - Tests can be executed with the
uv run poe testcommand. - Distributions can be checked before release with the
uv run poe check-distcommand. - Markdown API documentation can be generated with the
uv run poe doc-gencommand.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file afp_sdk-0.2.0.tar.gz.
File metadata
- Download URL: afp_sdk-0.2.0.tar.gz
- Upload date:
- Size: 126.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54b3f1cb773736f1786611b553fbedacac438bb9f3ff236437e4a5c6029734a8
|
|
| MD5 |
c175d2c9ea7b599aa9d38157c4b2cc89
|
|
| BLAKE2b-256 |
a12011e278be062e1992c581e5ed4b9088c124e85e8fc28eca10750a8995b552
|
File details
Details for the file afp_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: afp_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 50.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
322c0565de3f52cb58206cf26c450bdbe1d8964a993c770d8f2abe7d5212aa90
|
|
| MD5 |
b6e019234e961ed1e1404374b314c902
|
|
| BLAKE2b-256 |
d70e6eca9f518e1f7cb27cf0bbea8269b77b5c908321ec8e674b38cf11abd28e
|