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 2

Preguntas 3

Ordenar por:

¬ŅQuieres ver m√°s aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

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