✨Hola a todos, soy Momo. He estado aprendiendo sobre Ethereum recientemente y he recopilado algunas notas del proceso de aprendizaje en artículos para compartir con ustedes. Esta serie 0x1 es un conocimiento básico para principiantes. Espero que amigos con ideas afines puedan aprenderlo y discutirlo juntos. También pido consejo a los expertos.

#Uniswp

# 0x00 Prefacio

Hemos visto los principios y la lógica subyacente de Uniswap V2 antes. Los amigos interesados ​​pueden leer los artículos anteriores primero.

Uniswap V2 se divide en dos partes principales:

  • Núcleo: incluyendo fábrica, par, par ERC20

  • Periferia: contiene enrutadores

Dirección de implementación del contrato de red principal

  • Dirección del contrato de fábrica: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

  • Dirección del contrato V2Router02: 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

Entre ellos, Core es principalmente responsable de la lógica central y del procesamiento de un solo swap; Periphery es un servicio periférico que construye servicios basados ​​en todos los swaps.

# 0x01 Análisis del núcleo de Uniswap V2

## UniswapV2Factory: Creación y gestión de pares comerciales

El contrato «UniswapV2Factory» es uno de los componentes principales del protocolo Uniswap V2, responsable de crear y gestionar todos los pares comerciales. Proporciona varias funciones clave, incluidas `createPair`, `allPairs` y `getPair`.

Nota: Puede ver la información de la función del contrato consultando la dirección del contrato UniswapV2Factory en el navegador de blockchain

🦄### allPairs 与 allPairsLength

`allPairs` es una matriz utilizada para almacenar las direcciones de contrato de todos los pares de transacciones creados. A través de la matriz `allPairs`, los usuarios pueden consultar la información de dirección de todos los pares de transacciones.

• Función `allPairsLength`

Esta función devuelve la longitud de la matriz `allPairs`, que es el número total de pares comerciales creados actualmente.

Esta función proporciona a los usuarios una forma rápida de obtener la cantidad de pares comerciales, lo que facilita que los desarrolladores y usuarios comprendan la cantidad total de pares comerciales disponibles en el protocolo actual.

• Uso de `allPairs`

Al acceder a la matriz `allPairs` a través del índice, puede obtener la dirección del par de transacciones en una posición de índice específica.

Esta función permite a los usuarios consultar direcciones de pares de transacciones específicas a través de índices, lo que facilita el recorrido o la consulta en la cadena.

🦄### obtenerPar

`getPair` es un mapeo utilizado para consultar rápidamente las direcciones de pares de transacciones entre dos tokens. Utiliza las direcciones de `tokenA` y `tokenB` como claves y devuelve las direcciones de contrato del par de transacciones correspondientes.

• función `getPair`

La implementación de esta función se basa en un mapeo bidimensional, y la dirección del par de transacciones se consulta a través de la combinación de direcciones de `tokenA` y `tokenB`. Si el par comercial no existe, devuelve `0x00000000000000000000000000000000000000000000000`.

• lógica de creación de `getPair`

En la función `createPair`, `getPair` se utiliza para registrar la dirección del par de transacciones recién creado.

La ventaja de este diseño es que sin importar cuál sea el orden de `tokenA` y `tokenB`, la dirección del par de transacciones correspondiente se puede consultar rápidamente a través de `getPair`.

🦄### crearPar

La función `createPair` es una de las funciones principales de `UniswapV2Factory` y se utiliza para crear nuevos pares comerciales. Recibe dos direcciones de token `tokenA` y `tokenB` como entrada y devuelve la dirección de contrato del par de transacciones creado.

  • Crear lógica

  • Primero, la función verifica si `tokenA` y `tokenB` son iguales y los ordena, asegurándose de que la dirección de `token0` sea menor que la de `token1`.

  • Luego, se crea un nuevo contrato de par comercial a través del código de operación `create2` y la dirección del contrato se registra en la asignación `getPair` y en la matriz `allPairs`.

  • Finalmente, se activa el evento «PairCreated» para notificar a los oyentes externos que se ha creado un nuevo par comercial.

# 0x02 Análisis de periferia de Uniswap V2

UniswapV2Router02: Un puente para la interacción del usuario

`UniswapV2Router02` es la interfaz de interacción principal entre los usuarios y el contrato principal. Encapsula las funciones del contrato principal y ofrece a los usuarios funciones de gestión de liquidez y operaciones más convenientes. Entre sus principales funciones se encuentran:

🦄### Gestión de liquidez

  • Las funciones `addLiquidity` y `addLiquidityETH` permiten a los usuarios agregar liquidez.

  • Las funciones `removeLiquidity` y `removeLiquidityETH` se utilizan para eliminar liquidez.

🦄### Funciones comerciales

  • Las funciones `swapExactTokensForTokens` y `swapTokensForExactTokens` permiten a los usuarios intercambiar tokens.

  • Las funciones `swapExactETHForTokens` y `swapTokensForExactETH` admiten el intercambio entre tokens ETH y ERC20.

🦄### Compatibilidad con Flash Swaps

`UniswapV2Router02` admite Flash Swaps, que permiten a los usuarios tomar prestados tokens y completar una serie de operaciones en la misma transacción y finalmente devolver los tokens.

## Bibliotecas: extensión funcional de las bibliotecas de herramientas

La parte Periferia también incluye varias bibliotecas de herramientas para proporcionar soporte funcional adicional:

🦄### Biblioteca UniswapV2

  • Proporciona la función de cálculo `pairFor` para direcciones de pares de transacciones.

  • Proporciona funciones de cálculo de precios `getAmountOut` y `getAmountIn` para calcular las cantidades de tokens de entrada y salida de una transacción.

🦄### Biblioteca Oracle UniswapV2

  • Proporciona la función de cálculo TWAP, que permite a los usuarios obtener datos de precios basados ​​en el precio promedio ponderado en el tiempo.

# 0x03 Resumen

Uniswap V2 implementa las funciones principales del comercio descentralizado a través de Core y Periphery.

El contrato `UniswapV2Factory` gestiona eficientemente la creación y consulta de pares comerciales a través de funciones como `createPair`, `allPairs` y `getPair`.

`UniswapV2Router02` proporciona a los usuarios una interfaz interactiva conveniente que encapsula la lógica central del comercio y la gestión de liquidez. Este diseño en capas no solo mejora la flexibilidad del protocolo, sino que también mejora su escalabilidad.

--Ya sea desde el código hasta el diseño general, ¡es realmente asombroso! ¡Es digno de ser el forjador de almas en Defi!

$UNI

$BNB