Created
September 19, 2023 15:41
-
-
Save diegoxter/f3c53a538abff3f92dfb5f7ffd1c0f6e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
// Importa las interfaces de Uniswap Router y Factory | |
//import './UniswapRouterV2ABI.sol'; // Reemplaza con el ABI del Router | |
//import './UniswapFactoryV2ABI.sol'; // Reemplaza con el ABI de la Factory | |
import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; | |
contract PoolCreator { | |
// Dirección del Uniswap V2 Router | |
address public uniswapRouterAddress; // Reemplaza con la dirección del Router | |
// Dirección de la Uniswap V2 Factory | |
address public uniswapFactoryAddress; // Reemplaza con la dirección de la Factory | |
// Direcciones de los tokens que quieres emparejar | |
address public token1; | |
address public token2; | |
// Dirección del nuevo par de tokens (pool) creado | |
address public lpToken; | |
constructor( | |
) { | |
uniswapRouterAddress = 0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008; | |
uniswapFactoryAddress = 0x7E0987E5b3a30e3f2828572Bb659A548460a3003; | |
} | |
function crearPoolCon(address _token1, address _token2) external { | |
token1 = _token1; | |
token2 = _token2; | |
require(recibir1EtherDeCadaToken()); | |
// Crea una instancia del Uniswap Router | |
IUniswapV2Router02 router = IUniswapV2Router02(uniswapRouterAddress); | |
// Obtén la dirección del WETH (Wrapped Ether) para usarlo en el emparejamiento | |
//address weth = router.WETH(); | |
// Aprobación de los tokens por parte del contrato para el Router | |
IERC20(token1).approve(uniswapRouterAddress, type(uint256).max); | |
IERC20(token2).approve(uniswapRouterAddress, type(uint256).max); | |
// Obtén el par (pool) si ya existe | |
address pair = IUniswapV2Factory(uniswapFactoryAddress).getPair(token1, token2); | |
// Si el par aún no existe, créalo | |
if (pair == address(0)) { | |
pair = IUniswapV2Factory(uniswapFactoryAddress).createPair(token1, token2); | |
} | |
// Asegúrate de que el contrato tenga suficiente liquidez para hacer el emparejamiento | |
uint256 amountToken1 = 1 ether; // Cantidad de Token 1 | |
uint256 amountToken2 = 1 ether; // Cantidad de Token 2 | |
require(IERC20(token1).balanceOf(address(this)) >= amountToken1, "Insufficient balance of Token 1"); | |
require(IERC20(token2).balanceOf(address(this)) >= amountToken2, "Insufficient balance of Token 2"); | |
// Agrega liquidez al par | |
router.addLiquidity( | |
token1, | |
token2, | |
amountToken1, | |
amountToken2, | |
0, // slippage tolerancia (0 para ninguno) | |
0, // slippage tolerancia (0 para ninguno) | |
address(this), | |
block.timestamp + 60 // tiempo de expiración en segundos | |
); | |
// Obtén la dirección del nuevo par de tokens (pool) | |
lpToken = pair; | |
} | |
function recibir1EtherDeCadaToken() internal returns (bool success){ | |
uint256 cantidadTokens = 1000000000000000000; // 1 seguido de 18 ceros | |
// Transfiere las tokens al contrato | |
IERC20(token1).transferFrom(msg.sender, address(this), cantidadTokens); | |
IERC20(token2).transferFrom(msg.sender, address(this), cantidadTokens); | |
return true; | |
} | |
} | |
interface IUniswapV2Factory { | |
function getPair(address token0, address token1) external view returns (address pair); | |
function createPair(address tokenA, address tokenB) external returns (address pair); | |
} | |
interface IUniswapV2Router02 { | |
function WETH() external pure returns (address); | |
function addLiquidity( | |
address tokenA, | |
address tokenB, | |
uint256 amountADesired, | |
uint256 amountBDesired, | |
uint256 amountAMin, | |
uint256 amountBMin, | |
address to, | |
uint256 deadline | |
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
0xb39FD6717f3271aBfC9b13f399037367D00A7493