AXIS Docs

Developers

Networks and deployments

Contract addresses, assets, markets and service URLs of every AXIS deployment.

Testnet#

Network#

Item Value
Network passphrase Test SDF Network ; September 2015 (Networks.TESTNET in @stellar/stellar-sdk)
Stellar RPC https://soroban-testnet.stellar.org
Friendbot https://friendbot.stellar.org

Contracts and accounts#

Item Address
AXIS contract CA6P26K4QNNIMTYP22ILTSCXQQDEKNWJIZJPC34YEZYOLBNT7YUPX7XS
Safety admin GBDCULE53LUPK4XHUCXBI35MAZFQHENMZ3JRKAJS2PPYBV646M6XKVHG
Price oracle (Reflector Beam) CDEIQLTE3Y3XQMYPSZFJC2OXIS67F4MURGP73NCE2C2NZZ22RNSPV7ZI

The safety admin can freeze trading and change a few settings, and cannot touch orders or funds. See Safety admin and invariants.

Configuration#

Setting Raw value Meaning
min_trade_size 10000 0.001 USD. A Limit order or an updated order must be worth at least this much at the cached oracle price. USD with 7 decimals.
listing_min_days 90 Days of price feeds the listing fee of a new market buys. 0 would open markets without a fee.
market_listing_fee 180000000000 18,000 XRF burned to open a market. XRF with 7 decimals.
ledger_time 5 Expected ledger close time in seconds, used to convert entry lifetimes into ledgers.
Frozen false Trading is enabled

The safety admin can change every value here, so read the live values, as shown below, instead of hard-coding them. See Minimum order value and Markets and oracle.

Services#

Service URL
AXIS API, REST https://demo-api.axis.markets
AXIS API, WebSocket wss://demo-api.axis.markets/ws
AXIS app https://dex-demo.axis.markets/

The AXIS API is documented in REST API and WebSocket API. The AXIS app is a Testnet trading interface, see Trading with the AXIS app.

Assets#

All four assets are Classic assets used through their Stellar Asset Contract. AXIS identifies them by the SAC address.

Code Issuer SAC contract Decimals
XLM native CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC 7
USDC GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5 CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA 7
EURC GB3Q6QDZYTHWT7E5PVS3W7FUT5GVAFC5KSZFFLPU25GO7VTC3NM2ZTVO CCUUDM434BMZMYWYDITHFXHDMIVTGGD6T2I5UKNX5BSLXLW7HVR4MCGZ 7
CETES GC3CW7EDYRTWQ635VDIGY6S4ZUF5L6TQ7AA4MWS7LEQDBLUSZXV7UPS4 CC72F57YTPX76HAA64JQOEGHQAPSADQWSY5DWVBR66JINPFDLNCQYHIC 7

new Asset(code, issuer).contractId(Networks.TESTNET) computes the SAC address of a Classic asset, and Asset.native().contractId(Networks.TESTNET) the one of XLM.

Markets#

Six markets are open, one for every pair of the four assets, all opened on 2026-10-05. The contract orders the two assets of a market canonically by the XDR bytes of their addresses, not alphabetically: on Testnet the order is USDC, EURC, CETES, XLM.

Market base/quote base quote
USDC/EURC CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA CCUUDM434BMZMYWYDITHFXHDMIVTGGD6T2I5UKNX5BSLXLW7HVR4MCGZ
USDC/CETES CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA CC72F57YTPX76HAA64JQOEGHQAPSADQWSY5DWVBR66JINPFDLNCQYHIC
USDC/XLM CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC
EURC/CETES CCUUDM434BMZMYWYDITHFXHDMIVTGGD6T2I5UKNX5BSLXLW7HVR4MCGZ CC72F57YTPX76HAA64JQOEGHQAPSADQWSY5DWVBR66JINPFDLNCQYHIC
EURC/XLM CCUUDM434BMZMYWYDITHFXHDMIVTGGD6T2I5UKNX5BSLXLW7HVR4MCGZ CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC
CETES/XLM CC72F57YTPX76HAA64JQOEGHQAPSADQWSY5DWVBR66JINPFDLNCQYHIC CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC

Market data keyed by base/quote, such as the 24h ticker, quotes prices in quote per base: the USDC/XLM ticker shows XLM per USDC. Use canonicalPair from the JS client rather than sorting address strings. Opening another market is permissionless, see Opening a market.

Reading the live configuration#

The AXIS API serves the configuration, the freeze flag and the market registry, rebuilt from contract events:

curl "https://demo-api.axis.markets/contract?pretty_print"

The response listed the six markets. The first one is shown:

{
  "address": "CA6P26K4QNNIMTYP22ILTSCXQQDEKNWJIZJPC34YEZYOLBNT7YUPX7XS",
  "frozen": false,
  "config": {
    "safetyAdmin": "GBDCULE53LUPK4XHUCXBI35MAZFQHENMZ3JRKAJS2PPYBV646M6XKVHG",
    "oracle": "CDEIQLTE3Y3XQMYPSZFJC2OXIS67F4MURGP73NCE2C2NZZ22RNSPV7ZI",
    "listingMinDays": 90,
    "marketListingFee": "180000000000",
    "minTradeSize": "10000",
    "ledgerTime": 5
  },
  "markets": [
    {
      "base": "CBIELTK6YBZJU5UP2WWQEUCYKLPU6AUNZ2BQ4WWFEIE3USCIHMXQDAMA",
      "quote": "CCUUDM434BMZMYWYDITHFXHDMIVTGGD6T2I5UKNX5BSLXLW7HVR4MCGZ",
      "created": "2026-10-05 21:12:47",
      "refreshed": "2026-10-05 21:12:47"
    }
  ]
}

The WebSocket contract channel pushes the same body whenever it changes, see WebSocket API.

To read the contract itself without the AXIS API, call its views through any Stellar RPC server: config() returns Config {safety_admin, oracle, listing_min_days, market_listing_fee, min_trade_size, ledger_time}, frozen() the freeze flag and market(selling, buying) the market record of a pair. The contract client wraps them as loadConfig(), isFrozen() and getMarket(), see Contract client. The views are listed in Functions.

Getting Testnet funds#

  1. Create an account in a wallet such as Freighter, Albedo or xBull, or generate a keypair with @stellar/stellar-sdk.

  2. Fund it with Friendbot, which creates the account on Testnet:

    curl "https://friendbot.stellar.org/?addr=<your G... address>"
    
  3. Add a trustline for each of USDC, EURC and CETES that the account should receive, with a Classic changeTrust operation. Each trustline locks a 0.5 XLM base reserve. XLM needs no trustline.

  4. Get USDC, EURC or CETES by selling XLM on AXIS, for example in the Swap view of the AXIS app.

Without the trustline, an account cannot receive the asset: a trade that would pay it fails with CannotReceive (708), and a maker without it is skipped. A code example that funds an account and adds a trustline is in Getting started, and the checks a wallet should run are in Wallet integration.

StellarExpert shows the contracts, their storage and their events:

Mainnet#

AXIS is not deployed on mainnet yet. At launch, this page will list the mainnet contract, safety admin, oracle, configuration, markets and AXIS API URLs.

Important

The JS client defaults to the mainnet passphrase. Until mainnet is live, always pass the Testnet passphrase (Networks.TESTNET) to Axis and AxisContractClient, otherwise every transaction is signed for the wrong network.

Source code#

Repository Contents
https://github.com/axis-markets/orderbook The AXIS Soroban smart contract
https://github.com/axis-markets/js-client The JS client, @axis-markets/client on npm (MIT)
https://github.com/axis-markets/indexer The indexer, @axis-markets/indexer on npm (MIT), see Indexer
https://github.com/axis-markets/demo-dex-bot A tool for testing and a reference bot implementation