Una variable immutable
:
immutable
.
immutable
1. Eficiencia de gas:
2. Seguridad:
3. Optimización:
immutable
pragma solidity ^0.8.0;
contract EjemploImmutable {
address public immutable propietario;
// Constructor para inicializar la variable `immutable`
constructor(address _propietario) {
propietario = _propietario;
}
function obtenerPropietario() public view returns (address) {
return propietario;
}
}
En este ejemplo:
propietario
es una variable immutable
que se inicializa en el constructor.
immutable
y constant
Atributo |
immutable
|
constant
|
---|---|---|
Asignación | Durante el constructor | Durante la declaración |
Flexibilidad | Permite valores calculados o dinámicos | Solo valores constantes y conocidos en tiempo de compilación |
Eficiencia de gas | Menor costo que variables normales |
Más eficiente que immutable
|
contract Comparacion {
uint256 public constant TASA = 100; // Asignada durante la compilación
address public immutable propietario; // Asignada en el constructor
constructor(address _propietario) {
propietario = _propietario;
}
}
contract Propietario {
address public immutable owner;
constructor() {
owner = msg.sender; // Asigna la dirección del despliegue como propietario
}
function esPropietario() public view returns (bool) {
return msg.sender == owner;
}
}
owner
nunca cambiará después de su inicialización.
contract Marketplace {
uint public immutable tarifa;
address public immutable administrador;
constructor(uint _tarifa, address _administrador) {
require(_tarifa > 0, "La tarifa debe ser mayor a 0");
tarifa = _tarifa;
administrador = _administrador;
}
}
tarifa
y administrador
sean valores fijos que no cambien después de inicializarlos.
contract Token {
string public immutable nombre;
string public immutable simbolo;
uint8 public immutable decimales;
constructor(string memory _nombre, string memory _simbolo, uint8 _decimales) {
nombre = _nombre;
simbolo = _simbolo;
decimales = _decimales;
}
}
nombre
, simbolo
y decimales
son configurados durante el despliegue y no pueden ser modificados posteriormente.
1. Direcciones iniciales:
2. Parámetros de configuración:
3. Identificadores estáticos:
immutable
1. Usa immutable para valores iniciales fijos:
immutable
es ideal.
2. Evita mutabilidad innecesaria:
immutable
para mayor seguridad.
3. Usa en conjunto con validaciones en el constructor:
immutable
sean válidos.
immutable
1. Asignación única:
2. No admite cálculos complejos:
3. No se pueden usar con constant:
immutable
y constant
.
contract Configuracion {
uint public immutable tarifaBase;
address public immutable administrador;
uint public immutable fechaInicio;
constructor(uint _tarifaBase, address _administrador) {
require(_tarifaBase > 0, "La tarifa base debe ser mayor a 0");
require(_administrador != address(0), "El administrador debe ser una direccion valida");
tarifaBase = _tarifaBase;
administrador = _administrador;
fechaInicio = block.timestamp; // Registra el tiempo de despliegue
}
function esAdministrador() public view returns (bool) {
return msg.sender == administrador;
}
}
En este contrato:
tarifaBase
, administrador
y fechaInicio
son inicializados en el constructor.
Para más detalles sobre las variables immutable
, consulta la documentación oficial de Solidity.
Jorge García
Fullstack developer