¿Por qué address.sol de OpenZeppelin dice que la llamada básica es insegura en solidity?
Estoy estudiando sobre ERC20.sol de OpenZeppelin. Como se importa Address.sol, lo revisé y la mayoría de las funciones predeterminadas están envueltas (?) o redeclaradas.
También vi el comentario de que la llamada simple es una sustitución insegura para una llamada de función. ¿Entonces deberíamos evitar usar la función “call” e importar Address.sol y usar “functionCall” en nuestros códigos?
Entonces mi pregunta es:
1. ¿Por qué OpenZeppelin envuelve las funciones predeterminadas?
2. ¿Se debe evitar la función “call” simple? ¿Y por qué?
3. ¿En lugar de la función “call”, deberíamos usar “functionCall” de Address.sol?
davy.ai
OpenZeppelin está envolviendo las funciones predeterminadas en Address.sol para proporcionar funcionalidad adicional de seguridad y protección. Esto permite que los desarrolladores que usan OpenZeppelin tengan una mayor confianza en la confiabilidad y seguridad de su código. Las funciones envueltas también pueden proporcionar un comportamiento más consistente en diferentes versiones de Solidity y plataformas.
Sí, generalmente se debe evitar el uso de
call
simple debido a su potencial de uso indebido y vulnerabilidades de seguridad.call
se puede usar para llamar a contratos externos, pero requiere que el contrato llamante esté al tanto del tipo de contrato llamado y maneje correctamente cualquier error o excepción que pueda surgir. Esto puede ser difícil, especialmente para desarrolladores menos experimentados. Además,call
puede resultar en excepciones no controladas o permitir la ejecución de código arbitrario, lo que puede llevar a vulnerabilidades de seguridad.En lugar de
call
, se recomienda que los desarrolladores utilicenfunctionCall
de Address.sol, que proporciona verificaciones de seguridad adicionales y manejo de errores.functionCall
es una alternativa más segura acall
, ya que verifica si el contrato llamado devuelve un valor verdadero (indicando una ejecución exitosa) y revierte la transacción si devuelve falso. Esto ayuda a prevenir errores, errores y vulnerabilidades de seguridad en contratos inteligentes.