6. Funciones Avanzadas

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.)
      }
  }
  

AnteriorSiguiente

[mwai_chat]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *