✨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.
# 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!

