MIP25: Módulo de Acuñación Flash

MIP25: Módulo de Acuñación Flash

Preámbulo

MIP#: 25
Título: Acuñación del Módulo Flash
Autor(es): Sam MacPherson (@hexonaut)
Colaboradores: Chris Mooney (@godsflaw), Brian McMichael (@brianmcmichael), Gonzalo Balabasquer (@gbalabasquer)
Tipo: Técnica
Status: Presentación Formal
Fecha de la Propuesta: 2020-09-25
Fecha de Ratificación: <yyyy-mm-dd>
Dependencias: n/a
Reemplaza: n/a
Licencia: AGPL3+

Referencias

Sumario Abreviado

Esta propuesta proporciona la implementación del contrato inteligente para Flash, un módulo que habilita a cualquier usuario a ejecutar una acuñación flash de Dai.

Sumario Extendido

Las acuñaciones flash le permiten a cualquiera acuñar tanto Dai como necesite con la única condición de que lo pague todo en la misma transacción con una tarifa. Esto le permite a cualquiera explotar las oportunidades de arbitraje en el espacio DeFi sin tener que comprometer capital por adelantado. Esta implementación se ajusta a la descripción establecida en el [MIP13c3-SP2 9]

Sumario de Componentes

MIP25c1: Definiciones: define el Techo de Deuda (line) y las Tarifas de Acuñación (toll).

MIP25c2: Código Propuesto: contiene un fragmento de la implementación propuesta.

MIP25c3: Casos de Prueba: enumera los casos de prueba existentes, incluida la prueba de integración.

MIP25c4: Consideraciones de Seguridad: hace observaciones sobre la naturaleza limitada de las implicaciones de seguridad de agregar el Flash.

MIP25c5: Verificación formal/información de auditoría: comenta acerca de la susceptibilidad del código propuesto a ser objeto de una verificación formal, aunque todavía no se hayan realizado especificaciones, auditorías o revisiones del código.

MIP25c6: Licencia: declara la licencia bajo la cuál la propuesta y el código son distribuidos.

Motivación

Flash puede proporcionar muchos beneficios al ecosistema Dai, entre ellos:

  • Una mejora en las eficiencias de mercado para Dai.
  • Democratización del arbitraje: todos pueden participar.
  • Las vulnerabilidades que requieren una gran cantidad de capital se descubrirán más rápidamente, lo que hace que el espacio de DeFi sea más seguro en general.
  • Las tarifas proporcionan una fuente de ingresos para el protocolo.

Especificación

MIP25c1: Definiciones

  • Techo de Deuda: La máxima cantidad de Dai que se puede tomar prestado por transacción. Codificado como line en unidades rad.
  • Tarifas de Acuñación: Cuánto Dai adicional debe ser devuelto al módulo Flash al finalizar la transacción. La tarifa es transferida al vow al finalizar una mint exitosa. Codificado como toll en unidades wad.

MIP25c2: Código Propuesto

Ver flash.sol. La funcionalidad de acuñación central es simple:

function mint(
    address _receiver,      // dirección de conformant IFlashMintReceiver
    uint256 _amount,        // cantidad para realizar la acuñación flash [wad]
    bytes calldata _data    // información arbitraria para pasarle al _reciever
) external lock {
    uint256 arad = rad(_amount);

    require(arad > 0, "DssFlash/amount-zero");
    require(arad <= line, "DssFlash/ceiling-exceeded");

    vat.suck(address(this), _receiver, arad);

    uint256 fee = mul(_amount, toll) / WAD;
    uint256 bal = vat.dai(address(this));

    IFlashMintReceiver(_receiver).execute(_amount, fee, _data);

    uint256 frad = rad(fee);
    require(vat.dai(address(this)) == add(bal, add(arad, frad)), "DssFlash/invalid-payback");

    vat.heal(arad);
    vat.move(address(this), vow, frad);
    emit Mint(_receiver, _amount, fee);
}

La interfaz IFlashMintReceiver:

interface IFlashMintReceiver {

    /**
    * Debe transferir _amount + _fee devuelta al contrato de acuñación flash cuando este completada. 
    */function execute(uint256 _amount, uint256 _fee, bytes calldata _params) external;

}

MIP25c3: Casos de Prueba

Ver flash.t.sol

  • test_dex_trade
  • test_mint_with_fee
  • testFail_mint_zero_amount
  • testFail_mint_amount_over_line
  • testFail_mint_insufficient_dai
  • testFail_mint_too_much_dai
  • testFail_mint_line_zero
  • testFail_mint_unauthorized_suck
  • testFail_mint_reentrancy
  • test_mint_data
  • test_mint_no_fee_payback
  • test_preexisting_dai_in_flash

MIP25c4: Consideraciones de Seguridad

La solución propuesta es sencilla y no invasiva; interactúa únicamente con un solo componente del sistema (el Vat) a través de un método existente para suck. Un modificador lock ha sido agregado a mint para prevenir cualquier posible bug de reentrada.

MIP25c5: Verificación formal/Información de auditoría

El contrato propuesto está escrito de modo que es susceptible de especificación formal y verificación, de acuerdo con el estilo y las prácticas de los principales contratos de DAI multicolaterales, aunque no haya sido especificado formalmente. Ninguna auditoría o revisión del código ha tenido lugar aún.

MIP25c6: Licencias

Esto es una traducción del artículo original en inglés, gracias a @JoseFerrari y @blimpa por la traducción.

1 Like