No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Variables privadas

6/15
Recursos

Los diferentes tipos de visibilidades que puedes declarar en un contrato inteligente pueden tener diversas vulnerabilidades. Estas no necesariamente pueden ser un problema, pero debes conocerlas para evitar ataques.

Tipos de visibilidad en Solidity y variables privadas

Solidity es un lenguaje de programación orientado a objetos y como tal, permite configurar la visibilidad de los atributos y métodos de todo el contrato. Podemos declarar atributos y funciones públicas, privadas, internas y externas.

  • Public: variables y métodos totalmente accesibles.
  • Private: accesible únicamente a través de una función dentro del contrato.
  • Internal: métodos accesibles solo a través de una función incluida en el mismo contrato. No podrán ser accedidas desde llamadas externas de otros contratos.
  • External: caso contrario a internal, son métodos a los cuales puedes acceder desde otro contrato, pero no desde el mismo.

De alguna forma u otra, todo en Blockchain es accesible. No existe posibilidad de bloquear por completo un dato y ocultarlo.

La visibilidad por defecto de una variable es internal mientras que la visibilidad de las funciones es public. Si declaras variables del tipo public, al compilar el contrato inteligente se crearán métodos del tipo view para obtener sus valores.

Problemas con la visibilidad con las variables privadas

Si decidimos declarar variables privadas, tienes que saber que es posible el acceso a estos datos de todos modos.

contract Privado {

    uint private secret_1;         // Índice 0
    uint private secret_2;         // índice 1
    
    constructor(valor_1: uint, valor_2: uint) {
        secret_1 = valor_1;
        secret_2 = valor_2;
    }
}

Las variables privadas de un contrato pueden ser accedidas a través de su índice en memoria con ayuda de librerías como Truffle que permiten acceder a los datos privados de un contrato inteligente con métodos como web3.eth.getStorageAt("<contract_address>", index). El mismo devolverá el valor de la variable codificado en Base64, muy fácilmente decodificable para obtener su verdadero valor.

En síntesis, utiliza los diferentes tipos de visibilidad que Solidity tiene para ofrecer dependiendo la regla de negocio, pero sabiendo que todos los datos son visibles de alguna u otra manera. No guardes contraseñas o secretos en variables privadas, no han sido implementados para eso.


Contribución creada por: Kevin Fiorentino (Platzi Contributor).

Aportes 3

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tremendo, no sabia que se podía acceder a variables privadas de esa forma. Muy útil la verdad.

VARIABLES PRIVADAS

😮 Nada es realmente privado

  • Toda variable que se almacene en el contrato es visible independientemente de su modificador.
    Solo basta, saber su posición en el almacenamiento para accederla
  • Para acceder a las variables privadas es con la dirección del contrato
ufff mejor no almacenar información crítica en ningún contrato