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
payablesi 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