Volver a la página principal
lunes 9 diciembre 2024
5

Cómo usar state variables en Solidity para almacenar datos persistentes en la blockchain

Las state variables son variables definidas fuera de cualquier función dentro de un contrato en Solidity. Su valor se almacena de manera permanente en la blockchain, a diferencia de las variables locales que solo existen durante la ejecución de una función. Son ideales para guardar información como balances, direcciones o configuraciones importantes.

Características principales:

  • Persistencia: Sus valores permanecen en la blockchain incluso después de ejecutar una transacción.
  • Acceso: Pueden tener modificadores de visibilidad como public, private, internal o external.
  • Costo: Debido a que se almacenan en la blockchain, actualizar o escribir datos en ellas implica un costo en gas.

Declaración de state variables

Se definen fuera de las funciones y pueden inicializarse directamente o mediante un constructor.

pragma solidity ^0.8.0;

contract Ejemplo {
    // State variables
    uint public numero;          // Variable pública
    address private owner;       // Variable privada
    string internal mensaje;     // Variable interna

    // Constructor para inicializar variables
    constructor() {
        owner = msg.sender;
        mensaje = "Bienvenido";
    }
}

Modificadores de visibilidad:

Modificador Descripción
public La variable puede ser accedida desde dentro y fuera del contrato.
private Solo accesible dentro del contrato donde se define.
internal Accesible dentro del contrato y contratos derivados.
external No aplicable directamente a variables, solo a funciones.

Ejemplos prácticos de state variables

Ejemplo 1: Balance almacenado en una variable

contract Balance {
    uint public balance;

    // Función para actualizar el balance
    function setBalance(uint _balance) public {
        balance = _balance;
    }

    // Función para consultar el balance
    function getBalance() public view returns (uint) {
        return balance;
    }
}

Ejemplo 2: Direcciones autorizadas

contract Autorizacion {
    address public owner;

    constructor() {
        owner = msg.sender; // Dirección del creador del contrato
    }

    // Función para verificar si una dirección es la del propietario
    function esPropietario() public view returns (bool) {
        return msg.sender == owner;
    }
}

Ejemplo 3: Almacenar un mensaje

contract Mensaje {
    string public mensaje;

    // Función para establecer el mensaje
    function setMensaje(string memory _mensaje) public {
        mensaje = _mensaje;
    }

    // Función para obtener el mensaje
    function getMensaje() public view returns (string memory) {
        return mensaje;
    }
}

Consideraciones importantes

1. Costo en gas: Usar state variables para almacenamiento es más costoso que usar variables locales o eventos debido al espacio que ocupan en la blockchain.

2. Actualización: Cada vez que actualices una state variable, se genera una transacción, lo que implica costos adicionales.

3. Optimización: Minimiza el uso de state variables para reducir costos en gas.

Referencias oficiales

Para más información sobre las state variables, consulta la documentación oficial de Solidity.

Etiquetas:
solidity
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer