¿Cuál es la lógica por la cual se ordenan los tokens al crear un nuevo par Uniswap V2?

Al crear un nuevo contrato de par a través del contrato UniswapV2Factory , el autor de la llamada no puede establecer arbitrariamente el orden en que se asignan los tokens en el almacenamiento (es decir, the token0y token1vars) :

(address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);

¿Qué hace tokenA < tokenBen Solidity? Los vars son addresstipos.

Respuestas (1)

Es fácil ver lo que hace esa comparación con un enfoque práctico en Remix :

pragma solidity =0.5.16;

contract AddressComparison {
    function cmp(address token0, address token1) external pure returns (bool) {
        return token0 < token1;
    }
}

Digamos que está pasando las siguientes dos direcciones como entradas:

  • token0 = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
  • token1 = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

La función devuelve true:

Captura de pantalla de remezcla n.º 1

Parece que Solidity compara el valor numérico de las direcciones (es decir, sus valores hexadecimales). Dado que token1el primer dígito de es mayor en valor que el token0dígito de ( 0xAversus 0x2), la comparación da como resultado true.

Veamos otro ejemplo para aclarar el punto:

  • token0 = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
  • token1 = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

Esta vez, la función devuelve false:

Captura de pantalla de remezcla n.º 2

Probablemente puedas adivinar por qué: 0xCes más grande que 0xA.

Lo más probable es que Uniswap haya hecho esto para reducir los costos de integración. Si todo el mundo sabe que los tokens siempre se ordenan por su valor hexadecimal en un par Uniswap v2, los clientes no tienen que consultar la cadena de bloques para averiguar el orden de los tokens en el grupo, siempre que conozcan las direcciones de los tokens.

Gracias por esta gran respuesta, pero quiero agregar esto. ¿Podría ayudarme a verificar este problema, están un poco relacionados? ethereum.stackexchange.com/questions/137654/…