6. Funciones Avanzadas en Solidity
En Solidity, además de las funciones básicas, existen características avanzadas que permiten a los desarrolladores escribir contratos inteligentes más robustos y seguros. En esta sección, profundizaremos en varias técnicas avanzadas para el manejo de funciones.
Visibilidad de las funciones
Las funciones en Solidity pueden tener diferentes niveles de visibilidad, determinados por los modificadores:
- public: La función puede ser llamada internamente (dentro del contrato) y externamente (por fuera del contrato).
- private: La función solo puede ser llamada dentro del contrato actual.
- internal: La función puede ser llamada dentro del contrato actual y por contratos derivados.
- external: La función solo puede ser llamada desde fuera del contrato.
pragma solidity ^0.8.0 contract VisibilityExample { uint private data // Función pública function setData(uint _data) public { data = _data } // Función privada function _getData() private view returns (uint) { return data } // Función interna function internalFunction() internal pure returns (string memory) { return Internal function } // Función externa function externalFunction() external view returns (uint) { return _getData() } // Llamando la función interna desde una función pública function callInternalFunction() public pure returns (string memory) { return internalFunction() } }
Funciones de fallback y receive
Solidity permite definir funciones especiales llamadas fallback y receive para manejar Ether recibido en el contrato:
- fallback: Se ejecuta cuando una función no existente es llamada o cuando Ether es enviado sin datos. Puede tener la palabra clave
payable
si debe aceptar Ether. - receive: Se ejecuta específicamente cuando el contrato recibe Ether sin ningún dato. Debe ser declarada con la palabra clave
payable
.
pragma solidity ^0.8.0 contract FallbackReceiveExample { event FundsReceived(address sender, uint amount) // La función receive receive() external payable { emit FundsReceived(msg.sender, msg.value) } // La función fallback fallback() external payable { emit FundsReceived(msg.sender, msg.value) } // Ver el balance del contrato function getBalance() public view returns (uint) { return address(this).balance } }
Funciones y revertir
En Solidity puedes revertir el estado de una transacción usando las funciones require
, assert
y revert
. Esto es útil para validar condiciones o manejar errores:
- require: Valida condiciones. Si la condición es falsa, la transacción es revertida y se puede especificar un mensaje de error.
- assert: Similar a
require
, pero normalmente se usa para validar condiciones internas y de bajo nivel. Si la condición es falsa, la transacción es revertida sin mensaje de error. - revert: Reversa la ejecución explicitamente y opcionalmente se puede colocar un mensaje de error.
pragma solidity ^0.8.0 contract RevertExample { uint public value function setValue(uint _value) public { require(_value > 0, Value must be greater than zero.) value = _value } function checkValue() public view { assert(value != 0) } function resetValue() public { value = 0 revert(Value has been reset.) } }
Deja una respuesta