Registry: Exchanges
The registry exchange contract is used to find pools and query exchange rates for token swaps. It also provides a unified exchange API that can be useful for on-chain integrators.
Source code for this contract is available on Github.
Deployment Address
The exchange contract is registered in the address provider with ID 2
. To get the current address:
>>> provider = Contract('0x0000000022D53366457F9d5E68Ec105046FC4383') >>> provider.get_address(2) '0xD1602F68CC7C4c7B59D686243EA35a9C73B0c6a2'
Finding Pools and Swap Rates
- Swaps.get_best_rate(_from: address, _to: address, _amount: uint256, _exclude_pools: address[8]) (address, uint256): view
Find the pool offering the best rate for a given swap.
_from
: Address of coin being sent._to
: Address of coin being received._amount
: Quantity of _from being sent._exclude_pools
: [optional] A list of up to 8 addresses which should be excluded from the query.
Returns the address of the pool offering the best rate, and the expected amount received in the swap.
- Swaps.get_exchange_amount(_pool: address, _from: address, _to: address, _amount: uint256) uint256: view
Get the current number of coins received in an exchange.
_pool
: Pool address._from
: Address of coin to be sent._to
: Address of coin to be received._amount
: Quantity of_from
to be sent.
Returns the quantity of
_to
to be received in the exchange.
Swapping Tokens
- Swaps.exchange(_pool: address, _from: address, _to: address, _amount: uint256, _expected: uint256, _receiver: address = msg.sender) uint256: payable
Perform an token exchange using a specific pool.
_pool
: Address of the pool to use for the swap._from
: Address of coin being sent._to
: Address of coin being received._amount
: Quantity of_from
being sent._expected
: Minimum quantity of_to
received in order for the transaction to succeed._receiver
: Optional address to transfer the received tokens to. If not specified, defaults to the caller.
Returns the amount of
_to
received in the exchange.
- Swaps.exchange_with_best_rate(_from: address, _to: address, _amount: uint256, _expected: uint256, _receiver: address = msg.sender) uint256: payable
Perform an exchange using the pool that offers the best rate.
_from
: Address of coin being sent._to
: Address of coin being received._amount
: Quantity of _from being sent._expected
: Minimum quantity of_to
received in order for the transaction to succeed._receiver
: Optional address to transfer the received tokens to. If not specified, defaults to the caller.
Returns the amount of
_to
received in the exchange.Warning
This function queries the exchange rate for every pool where a swap between
_to
and_from
is possible. For pairs that can be swapped in many pools this will result in very significant gas costs!