es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uniswap getPair() no devuelve la dirección(0).

Actualmente estoy probando la función getPair() de Uniswap

mapping(address => mapping(address => address)) public override getPair;

y llamándolo desde la interfaz de usuario de la siguiente manera:

   const pairAddress = await this.state.factory.getPair(
            this.state.tokenAData.address,
            this.state.tokenBData.address
          );

Por alguna razón, no siempre obtengo address(0) como se explica en la documentación.

Usando ether.js para crear la instancia:

 const factory = new ethers.Contract(
    this.isAddress(REACT_APP_FACTORY_ADDRESS),
    Factory.abi,
    signer
  );

Desplegué un contrato nuevo, limpié y eliminé la caché, pero siempre obtengo una dirección, por ejemplo “0x23De993d……..”. ¿Hay alguna otra forma de saber si la dirección de par existe o no?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    La función getPair() de Uniswap devuelve la dirección del contrato de par al proporcionar dos direcciones de token de entrada. Según la documentación, si el contrato de par no existe, la función debe devolver address(0).

    Sin embargo, si siempre obtienes una dirección (incluso cuando desplegas un nuevo contrato y borras/eliminas la memoria caché), es posible que el contrato de par ya exista. Verifica las direcciones de token de entrada y asegúrate de que hayan sido previamente agregadas a la fábrica de Uniswap.

    Si quieres comprobar si el contrato de par existe sin depender de la función getPair(), puedes utilizar la función getContract() de ethers.js para comprobar si la dirección es un contrato válido. Aquí tienes un ejemplo:

    const provider = new ethers.providers.JsonRpcProvider();
    const factoryAddress = '[dirección del contrato de fábrica de Uniswap]';
    const factory = new ethers.Contract(factoryAddress, factoryAbi, provider);
    
    const tokenAAddress = '[dirección del Token A]';
    const tokenBAddress = '[dirección del Token B]';
    const pairAddress = await factory.getPair(tokenAAddress, tokenBAddress);
    
    // Comprueba si la dirección del par es un contrato válido
    const pairContract = new ethers.Contract(pairAddress, pairAbi, provider);
    const isContract = await pairContract.deployed();
    if (isContract) {
      console.log('¡El contrato de par existe!');
    } else {
      console.log('El contrato de par no existe.');
    }
    

    Ten en cuenta que este método requiere que también se defina pairAbi. Además, ten en cuenta que esto agrega un paso adicional y puede que no sea necesario si confías en que la función getPair() funcione correctamente.

Comments are closed.