Links

Discovery

To find servers that support a token pair, clients call the getURLsForToken function on the Registry contract for each token and then intersect the results. For example, if the resulting URLs for token A are [maker1.com, maker2.com] and for token B are [maker2.com, maker3.com] then the only server supporting swapping token A for B is maker2.com.
See getURLsForToken on the Registry contract:
function getURLsForToken(address token) external view returns (string[] memory urls);
Check deployments for latest contract addresses for Registry.

Fetching URLs via CLI

Ensure the AirSwap CLI is installed.
$ yarn global add airswap
Use airswap chain to set your chain to Goerli or Mainnet.
$ airswap chain
AirSwap CLI 4.0.1 — https://www.airswap.io/
set the active ethereum chain
Current chain: 5 (GOERLI)
New chain id: (5) 1
Set active chain to ETHEREUM.
Use registry:get to fetch server URLs for a token pair.
$ airswap registry:get
AirSwap CLI 4.0.1 — https://www.airswap.io/
get urls from the registry ETHEREUM
Registry 0x8F9DA6d38939411340b19401E8c54Ea1f51B8f95
Token pair (e.g. WETH/USDT): dai/weth
Server
----------------------------------------
https://maker.example.com/

Example: Take an Order

Try airswap rfq:get with a server URL from the previous command.

TypeScript

Using the Registry library from @airswap/libraries returns Server instances that you can interact with.
import { Protocols } from "@airswap/constants";
import { Registry } from '@airswap/libraries'
const servers = await Registry.getServers(
provider,
chainId,
Protocols.RequestForQuoteERC20,
signerToken,
senderToken
)
Calling the Registry directly using ethers
import { ethers } from 'ethers'
import { chainNames } from '@airswap/constants'
import * as RegistryContract from '@airswap/registry/build/contracts/Registry.sol/Registry.json'
import * as registryDeploys from '@airswap/registry/deploys.js'
const RegistryInterface = new ethers.utils.Interface(
JSON.stringify(RegistryContract.abi),
)
new ethers.Contract(
registryDeploys[chainId],
RegistryInterface,
ethers.getDefaultProvider(chainNames[chainId].toLowerCase()),
)
const signerTokenURLs = await this.contract.getURLsForToken(signerToken)
const senderTokenURLs = await this.contract.getURLsForToken(senderToken)
const serverURLs = signerTokenURLs.filter((value) =>
senderTokenURLs.includes(value),
)

Example: Take an Order

import { Registry, SwapERC20 } from '@airswap/libraries'
import { chainNames } from '@airswap/constants'
const servers = await Registry.getServers(
provider,
chainId,
Protocols.RequestForQuoteERC20,
signerToken,
senderToken
)
const order = servers[0].getSignerSideOrderERC20(
senderAmount,
signerToken,
senderToken,
senderWallet
)
const tx = await new SwapERC20(chainId, provider).swapLight(order)