Always practice solid risk management rules when experimenting with swaps: use the correct slippage values and trusted currency pairs, double-check the numbers before confirming, and compare external price sources.
Throughout this guide, we will use Router and try to swap Aptos coins to test BTC.
Let's create a new module and import the router into it:
As you try to compile the code above, you will get a warning; don't worry, it's fine.
Now let's add the dependencies we will need for this experiment, as well as a basic entry function that we can call in a transaction later:
Let's withdraw 1000 Aptos coins from an account and see how many BTC we can get in exchange:
The provided code above wouldn't still compile as we can't drop Aptos coins; at the same time, it already shows how much BTC we can get back for 1000 Aptos coins because of get_amount_out function.
Now let's indeed do a swap and finally deposit the swapped coins on our account:
Everything worked out well; using swap_exact_coin_for_coin, we have swapped Aptos coins for BTC.
This looks simple, but what if someone decided to front-run us? Let's add some basic slippage checks for the minimum amount of BTC we want to receive (afterwards we can remove get_amount_out).
All done. In the same way, you can try another function: router::swap_coin_for_exact_coin (see Router docs).
An important note regarding decentralized AMM securities and user transactions:
Always use safety checks.
Never swap tokens without a slippage value provided offline.
Use external price feeds or oracles (even the Basic Oracle can be a good option).