DEV Community

Cover image for Swap / Intercambiar tokens desde Solidity
Ahmed Castro
Ahmed Castro

Posted on

Swap / Intercambiar tokens desde Solidity

Cuando lanzamos un contrato en DeFi no queremos que sea una isla. Al contrario, queremos que sea parte de un ecosistema. Nosotros mismos podemos lograr esto gracias a la decentralización del blockchain. En este tutorial vamos a lanzar un contrato que se comunica con un DEX. En este caso usaremos Quickswap de Polygon Mainnet Layer 2 de Ethereum pero este código aplica para Ethereum Mainnet, Binance Smart Chain o cualquier otra red que desees siempre y cuando actualices los Smart Contracts que detallo a continuación.

1. Lanzamos el contrato

Nota que debes seleccionar el address del contrato Router dependiendo de dónde deseas lanzar el contrato:

  • Polygon Quickswap: 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
  • Ethereum Uniswap V2: 0x10ED43C718714eb63d5aA57B78B54704E256024E
  • BSC Mainnet Pancake: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
  • BSC Testnet Pancake: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1

En este ejemplo usamos los addresses 0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 y 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 para DAI y USDC respectivamente. Modifícalos con los tokens que desees.

// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import '@openzeppelin/contracts/token/ERC20/ERC20.sol';

contract Router {
  function swapExactTokensForTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external returns (uint[] memory amounts)  {}
}

contract Swapper
{
  Router router = Router(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
  ERC20 DAI_token  = ERC20(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);
  ERC20 USDC_token = ERC20(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);

  function swapDAIToUSDC(uint amount) public
  {
    DAI_token.transferFrom(
      msg.sender,
      address(this),
      amount
    );

    address[] memory path = new address[](2);
    path[0] = address(DAI_token);
    path[1] = address(USDC_token);

    DAI_token.approve(address(router), amount);

    router.swapExactTokensForTokens(
      amount,
      0,
      path,
      msg.sender,
      block.timestamp
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Aprobar y probar

Una vez lanzado el contrato nos dirigimos al explorador del primer token, en este caso DAI. Y utilizamos la función approve pasando el address del contrato que recién lanzamos y un número grande de tokens.

Ahora estamos listos para usar nuestro contrato y swapear fondos.

Documentación oficial

Gracias por ver este tutorial!

Sígueme en dev.to y en Youtube para todo lo relacionado al desarrollo en Blockchain en Español.

Discussion (0)