DEV Community

Cover image for Agregar liquidez desde un Smart Contract
Ahmed Castro
Ahmed Castro

Posted on

Agregar liquidez desde un Smart Contract

La liquidez es el punto de entrada de nuestro token ERC-20 o ERC-777 con el resto del ecosistema DeFi. En este video agregamos liquidez desde un smart contract que funciona de la misma manera que la interfaz gráfica pero nos abre la puerta a una infinidad de posibilidades de automatización, decentralización y transparencia.

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.7;

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

contract Router {
  function addLiquidity(
   address tokenA,
   address tokenB,
   uint amountADesired,
   uint amountBDesired,
   uint amountAMin,
   uint amountBMin,
   address to,
   uint deadline
  ) external returns(uint amountA, uint amountB, uint liquidity) {}
}

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

  function addLiquidityDAIAndUSDC(uint amount_DAI, uint amount_USDC) public
  {
    IERC20(DAI_token).transferFrom(msg.sender, address(this), amount_DAI);
    IERC20(USDC_token).transferFrom(msg.sender, address(this), amount_USDC);

    IERC20(DAI_token).approve(address(router), amount_DAI);
    IERC20(USDC_token).approve(address(router), amount_USDC);

    router.addLiquidity(
       address(DAI_token),
       address(USDC_token),
       amount_DAI,
       amount_USDC,
       0,
       0,
       msg.sender,
       block.timestamp
    );
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Aprobar y probar

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

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)