Solidity.

Publicación

Comparte tu conocimiento.

Serpent0x.
May 31, 2024
Discusión

Vulnerabilidad de reingreso

Hola a todos, he notado que la función de oferta utiliza el método .call {value: amount} («») para enviar Ether a la dirección del destinatario.

¿Alguien podría darnos una idea de si esta función es realmente vulnerable al reingreso y sugerir alguna de las mejores prácticas o modificaciones para mitigar dichos riesgos?

function _offer(address to, uint256 amount) internal {

      balance -= amount;

      (bool success, ) = to.call{value: amount}("");
      if (!success) {
          revert TransferFailed(address(0), address(this), to, amount);
      }
  }
  • Smart Contract
  • Solidity
  • Solidity Compiler
0
1
Cuota
Comentarios
.

Respuestas

1
0x0304...a958.
Aug 11 2024, 15:15

Una de las mejores prácticas en Solidity es el CEI (comprobaciones, efectos, interacciones). Describe el orden en el que se estructura el código para evitar comportamientos inesperados o ejecuciones malintencionadas.

Comprobacionesconsistiría requireen implementar algunas para garantizar que los parámetros de tu función sean correctos. No hay ninguno en tu _offer()función, pero puedes añadirlo, por ejemplo require(balance >= amount);(no es necesario) al principio de la función para asegurarte de que el usuario no gaste más de lo que posee.

Losefectosconsisten básicamente en cambiar las variables de estado de tu contrato para adaptarlo a lo que quieres que sea ahora. Aquí está la línea, que balance -= amount;reduce el saldo de los usuarios.

Las interaccionesson llamadas a otros contratos o direcciones que pueden activar algún código desconocido (por ejemplo, cuando callenvías dinero, puede activar una receive()función del contrato inteligente que llame a tu función).

Como sigues esta regla en este código, no debería ser posible volver a entrar.

0
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.

Usamos cookies para asegurarnos de que obtenga la mejor experiencia en nuestro sitio web.
Más información