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);
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/
Try
airswap rfq:get
with a server URL from the previous command.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),
)
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)
Last modified 19d ago