You are viewing an archive of the Piccadilly Circus Games Competition. Join our Discord for the latest information.
Use the CAX
Recipes for how to interact with the Centralized Auton Exchange (CAX). Create an account on CAX with your participant key and transact on the exchange in the round’s On-chain Tasks!
Synopsis
This page details:
- resources for how to get set up and interact with the off-chain exchange CAX
- how to get an API Key to access your CAX account (using your participant account private key to create an API Signature)
- how to deposit your mock USDC to CAX for trading in ATN and NTN
- how to submit a trade to purchase a protocol asset (i.e. ATN or NTN)
Exchange resource links
- Centralized Auton Exchange (CAX):
- Exchange API URL/Endpoint for API calls: https://cax.piccadilly.autonity.org/api/
- Exchange address:
0x11F62c273dD23dbe4D1713C5629fc35713Aa5a94 - API Docs: https://cax.piccadilly.autonity.org/docs/
- Mock USDC ERC20 Token Proxy Contract Address:
0x3a60C03a86eEAe30501ce1af04a6C04Cf0188700 - Tooling for sending HTTP Requests to the CAX API. This quick start uses the HTTPie command-line client which is easy to install and use.
You need to have installed HTTPie version >=3.0.0 for the command syntax in the guide to work. Run httpie --version to verify your version. Install by pipx is recommended.
Other tooling options for an HTTP client include:
For formatting JSON in responses try the ./jq utility for JSON processing. See the ./jq docs for how to download and install.
Get setup to access your CAX account
Your account on CAX is automatically created when you register for the Games. It is associated with your registered participant account so you can move assets between on- and off-chain easily.
The exchange uses API Keys for authentication so you need to create an API key for your account before calling authenticated endpoints.
The API Key is then simply included as an HTTP Header to your HTTP request.
API requests exceeding 5 requests per second are rate limited up to a maximum of 20 requests per second.
Create your API Key
To create an API key, make a POST request to the /apikeys endpoint providing a signed message, which must be a UTF-8 encoded string representation of a JSON object containing a nonce key and a unique value. Creating the signature is easy, just use the aut tool you setup in the quick start.
When you submit the request include an API-Sig header that represents the signature of the message using the account’s private key. The request body must consist of the exact UTF-8 message text that was signed.
The response will provide the apikey value. This should be included as the API-Key header value in subsequent authenticated requests.
Just call the same endpoint with a new nonce value. A new API key is generated, which will replace the existing key.
Create the message to sign as an environment variable. For example, use the current timestamp as a nonce:
MESSAGE=$(jq -nc --arg nonce "$(date +%s%N)" '$ARGS.named')Printing this
envvariable should produce something like this:MESSAGE={"nonce":"1698772244N"}Sign the message with
autand write signature to a file. Configureautto use your participant account key and run thesign-messagecommand to create the signature. Pass in the value created in Step 1. and write output to a file:aut account sign-message $MESSAGE message.sigPOST using HTTPie CLI to receive the new API key. Call the
/apikeysendpoint passing in the signed message as theapi-sigvalue:echo -n $MESSAGE | https https://cax.piccadilly.autonity.org/api/apikeys api-sig:@message.sigYour participant account address and your API key are returned as a JSON object. For example:
{ "account": "0xF6e02381184E13Cbe0222eEDe0D12B61E2DF8bE5", "apikey": "o7JESIcMBgH7sfc7piRkZuqT7HgCW7hPiU3GpbaiSVoqBcYqGByQ7LvIqm0GNI/DLvdfAkWxKLUdpc/VfpcyuRw=" }
Verify access - check your balance
To verify access, check your CAX account balances. This will return your mock USDC balance and ATN and NTN balances (which are zero).
Call the CAX API
/balancesendpoint, where<APIKEY>is theapikeygenerated in step 3 above:https GET https://cax.piccadilly.autonity.org/api/balances API-Key:<APIKEY>Your exchange balances are returned:
[ { "available": "0.000000000000000000", "balance": "0.000000000000000000", "symbol": "ATN" }, { "available": "0.000000000000000000", "balance": "0.000000000000000000", "symbol": "NTN" }, { "available": "1000000.00", "balance": "0.00", "symbol": "USDC" } ]
Fund your account on CAX with mock USDC to trade
Once you have bridged your mock USDC to your participant account on Piccadilly, you need to deposit it to your CAX account to fund trading in the exchange’s ATN-USDC and NTN-USDC markets off-chain.
For how to do this, see the guide deposit mock USDC to off-chain on this page.
You are ready to trade!
Purchase ATN and NTN
To fund your participant account with ATN and NTN, submit a limit order to buy these using your mock USDC funding.
Get the CAX orderbooks. Call the CAX API
/orderbooksendpoint:https GET https://cax.piccadilly.autonity.org/api/orderbooks API-Key:<APIKEY>This will return ATN and NTN orderbooks, providing you with:
- trading pairs and base and quote currencies
- minimum amount of an order
- tick size, i.e. the minimum amount the pair price can move by in the exchange
You will see orderbook information for ATN and NTN:
[ { "base": "ATN", "min_amount": "0.01", "pair": "ATN-USDC", "quote": "USDC", "tick_size": "0.01" }, { "base": "NTN", "min_amount": "0.01", "pair": "NTN-USDC", "quote": "USDC", "tick_size": "0.01" } ]Get the current quote price. Call the CAX API
/quoteendpoint where{pair}isATN-USDCorNTN-USDC:https GET https://cax.piccadilly.autonity.org/api/orderbooks/{pair}/quote API-Key:<APIKEY>This will return ATN and NTN orderbooks, providing you with:
- for buy and sell side, ask and bid price and amounts available
- timestamp of the quote
Prices and amounts depend on the market of course, but you could see something like this for
ATN-USDC:{ "ask_amount": "16.74", "ask_price": "1.00", "bid_amount": "1.50", "bid_price": "1.00", "timestamp": "2023-11-02T11:28:00.840248+00:00" }And something like this for
NTN-USDC:{ "ask_amount": "2.56", "ask_price": "10.45", "bid_amount": "11.92", "bid_price": "10.27", "timestamp": "2023-11-02T11:35:04.964810+00:00" }Trade ATN and NTN. Submit a limit order to make your trades, calling the CAX API
/ordersendpoint. Specify:pair: orderbook pair,ATN-USDCorNTN-USDCside:bidoraskdepending on the direction of your tradeprice: your trade price to 2 decimal placesamount: how muchATNorNTNyou are trading to 2 decimal places
https POST https://cax.piccadilly.autonity.org/api/orders API-Key:$KEY pair=<VALUE> side=<VALUE> price=<VALUE> amount=<VALUE>For example, an order to purchase ATN for the quote price returned in Step 2 above could look like:
https POST https://cax.piccadilly.autonity.org/api/orders API-Key:$KEY pair=ATN-USDC side=bid price=1.00 amount=10This will return order details, including order ID and the status, which will be
pending:{ "amount": "10.00", "order_id": 70, "pair": "ATN-USDC", "price": "1.00", "remain": "10.00", "side": "bid", "status": "pending", "timestamp": "2023-11-02T11:48:50.811765+00:00", "type": "limit" }Verify order completed. Get order information to verify your trade is closed, calling the CAX API
/orders/{order_id}endpoint. Pass in the order ID returned in Step 3 (70in this example):https GET https://cax.piccadilly.autonity.org/api/orders/70 API-Key:$KEYThis will return order info, including status, which will show
closedwhen done. For the order example in Step 3 above it returns:{ "amount": "10.00", "order_id": 70, "pair": "ATN-USDC", "price": "1.00", "remain": "0.00", "side": "bid", "status": "closed", "timestamp": "2023-11-02T11:48:50.811765", "type": "limit" }That’s it!
You can do this by calling the CAX /trades endpoint.
See CAX API docs Get withdraws.
Transfer ATN, NTN, mock USDC on- and off- chain
To transfer Auton and Newton simply deposit and withdraw to the CAX:
- deposit from your on-chain participant account by sending to the CAX exchange address
- withdraw from your off-chain account to send to your participant account address
The exchange credits/debits your CAX account balances immediately.
You can do this:
- off-chain by calling the CAX
/balancesendpoint. See CAX API docs Get balances and Get balance for symbol. - on-chain by using
aut. Use theaut account balancecommand for ATN and theaut account balance --ntncommand for NTN.
Withdraw from off-chain
To transfer funds on-chain to your participant account address call the CAX API /withdraws endpoint.
The minimum withdrawal amount in CAX is 1 ATN or 1 NTN.
There is no charge for withdrawing from CAX to your on-chain account.
Specify:
symbol: of the asset. One ofATN,NTN, or mockUSDCamount: how much of the asset you are transferring, to 2 decimal places
https POST https://cax.piccadilly.autonity.org/api/withdraws API-Key:$KEY symbol=<VALUE> amount=<VALUE>For example, to withdraw 10 ATN:
https POST https://cax.piccadilly.autonity.org/api/withdraws API-Key:$KEY symbol=ATN amount=10This will return transfer details:
{
"amount": "10.000000000000000000",
"status": "accepted",
"symbol": "ATN",
"timestamp": "2023-11-02T17:12:33.436809+00:00",
"txhash": null,
"txid": 8
}CAX will transfer the funds to your participant account on-chain.
To check the status of your withdraw, you can query the /withdraws/<TXID> endpoint, here for example with 8 as the <TXID>:
https GET https://cax.piccadilly.autonity.org/api/withdraws/8 API-Key:$KEYThis will return the current status of your withdraw with txid 8:
{
"amount": "10.000000000000000000",
"status": "completed",
"symbol": "ATN",
"timestamp": "2023-11-02T17:12:33.436809+00:00",
"txhash": "0xc871bf5eb5e3f37ea01619ec4193fd7fb65a8ec3a59c1bf0577b159515ec65dd",
"txid": 8
}You can do this by calling the CAX /withdraws endpoint.
See CAX API docs Get withdraws.
If your withdraw request has status error or failed, then you may be entitled to a refund.
Open a support ticket in Autonity Discord channel #user-support to request an investigation.
Funds lost by a failed withdrawal from off- to on-chain will be refunded to your CAX account.
You can see the history of refunds to your account by calling the CAX /refunds endpoint.
See CAX API docs Get refunds.
Deposit ATN or NTN to off-chain
To transfer funds from on- to off-chain, deposit to the exchange by sending to the CAX exchange address from your participant account address. Transfer using aut tx, specifying:
<RECIPIENT_ADDRESS>: the CAX Exchange address, given on this page in the Exchange resource links section--valueflag: amount to transfer--ntnflag: if transferring NTN. Without the flag ATN is transferred
aut tx make --to <RECIPIENT_ADDRESS> --value <AMOUNT> --ntn | aut tx sign - | aut tx send -You can do this by calling the CAX /deposits endpoint.
See CAX API docs Get deposits.
Deposit mock USDC to off-chain
To transfer mock USDC funds from on- to off-chain, deposit to the exchange by sending to the CAX exchange address from your participant account address. Mock USDC is an ERC 20 token contract so transfer using aut token transfer. Specify:
--tokenflag: the contract address of the mock USDC ERC20 token proxy contract on Piccadilly, given on this page in the Exchange resource links section<RECIPIENT_ADDRESS>: the CAX Exchange address, given on this page in the Exchange resource links sectionAMOUNT: amount to transfer
aut token transfer --token <TOKEN_ADDRESS> <RECIPIENT_ADDRESS> <AMOUNT> | aut tx sign - | aut tx send -Retrieve trading data
Fetch historical trading data
You can obtain historical trading data for further analysis directly from the CAX. This is available at the /orderbooks/<PAIR>/trades endpoint for every order book. Check the Get trade history documentation for reference.
The endpoint returns 24 hours of trading data at a time. To obtain trading data for a previous day, pass the date as query parameter date with format YYYY-MM-DD. For example, to query trading data for the 11th March, run:
https GET https://cax.piccadilly.autonity.org/api/orderbooks/NTN-USDC/trades date==2024-03-11This will return an array of trade data:
[
{
"timestamp": "2024-03-11T00:00:02.321875",
"price": "10.96",
"amount": "192592.59"
},
{
"timestamp": "2024-03-11T00:00:03.204852",
"price": "10.96",
"amount": "462.97"
},
{
"timestamp": "2024-03-11T00:00:19.572395",
"price": "10.97",
"amount": "218518.52"
},
...
]To obtain 24 hours of trading data ending now, just omit the date query parameter:
https GET https://cax.piccadilly.autonity.org/api/orderbooks/NTN-USDC/tradesThis will return an array of trade data starting 24 hours ago and ending at the current time:
[
{
"timestamp": "2024-03-11T19:51:22.546196",
"price": "10.81",
"amount": "1000.00"
},
{
"timestamp": "2024-03-11T19:59:26.446290",
"price": "10.80",
"amount": "10000.00"
},
{
"timestamp": "2024-03-11T19:59:30.989938",
"price": "10.80",
"amount": "10000.00"
},
...
]Subscribe to live Websocket feeds
The CAX has a Websocket endpoint for each order book at /orderbooks/<PAIR>/feed:
wss://cax.piccadilly.autonity.org/api/orderbooks/ATN-USDC/feedwss://cax.piccadilly.autonity.org/api/orderbooks/NTN-USDC/feed
Each endpoint streams any new trades in that order book as a JSON object.
You can subscribe to an order book feed using your favourite Websocket client. For example, this is how you can subscribe to the trades feed using the websocat command-line client:
$ websocat wss://cax.piccadilly.autonity.org/api/orderbooks/NTN-USDC/feed
{"timestamp":"2024-03-12T19:39:39.818585","price":"10.44","amount":"40000.00"}
{"timestamp":"2024-03-12T19:48:38.095183","price":"10.39","amount":"111111.11"}
{"timestamp":"2024-03-12T19:53:50.810511","price":"10.36","amount":"1000.00"}
...