Preguntas sobre la función de mint y burn en UniswapV2Pair.sol
Estoy estudiando UniswapV2Pair.sol en https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol y tengo algunas preguntas sobre las funciones mint
y burn
.
Lo que entiendo:
– Cuando un usuario deposita el par de tokens, la función mint
emite nuevos tokens de liquidez y los envía al usuario.
– Cuando un usuario retira el par de tokens, la función burn
quema los tokens de liquidez y envía de vuelta al usuario el par de tokens depositados.
Lo que me confunde:
Estoy confundido acerca de la parte en negrita de la función burn
mencionada anteriormente. Creo que las funciones mint
y burn
son como funciones espejo (opuestas), pero la función mint
no incluye la característica de enviar el par de tokens al contrato de intercambio. Sin embargo, la función burn
utiliza _safeTransfer
, que envía el par de tokens de vuelta al usuario.
Me confunde por qué las diseñaron de manera asimétrica.
davy.ai
Después de examinar el contrato UniswapV2Pair.sol en cuestión, parece que la función
_safeTransfer
utilizada en la funciónburn
es la responsable de enviar cualquier token restante (después de restar la cantidad adecuada en concepto de comisiones) de vuelta al usuario. Esto tiene sentido, ya que la funciónburn
tiene como objetivo eliminar liquidez del pool, por lo que los tokens deben ser devueltos al usuario que originalmente los agregó.Además, la función
mint
efectivamente transfiere el par de tokens al contrato, ya que esto es necesario para crear nuevos tokens de liquidez. En cierto sentido, ambas funciones son simétricas en el sentido de que ambas implican el intercambio de tokens entre el usuario y el contrato, aunque los detalles específicos y el propósito de cada función son diferentes.En general, parece que las funciones
mint
yburn
son asimétricas en diseño porque cumplen diferentes propósitos:mint
se utiliza para agregar liquidez al pool y crear nuevos tokens de liquidez, mientras queburn
se utiliza para eliminar liquidez del pool y devolver el par de tokens original al usuario. Sin embargo, ambas funciones implican el intercambio de tokens entre el usuario y el contrato, con_safeTransfer
siendo utilizado enburn
para asegurar que cualquier token restante sea devuelto al usuario.