4.2 – Ethereum, Smart Contracts en Ethereum con Protección Modifier. Solidity
Ethereum y Solidity
Continuamos con el código del ejemplo anterior.
// Versión pragma solidity ^0.4.0; // Definición de contrato contract HolaMundoProtect { // Definición de variable string saludo = "Hola mundo"; string msn = ""; // address: cuenta o wallet que ha creado el contrato address propietario; // Constructor de esta "clase". Esta función se ejecuta cuando se crea el contrato y se ejecuta solo una vez. function HolaMundoProtect() { propietario = msg.sender; } // Definición para obtener el saludo function getSaludo() constant returns(string) { return saludo; } // Definición para modificar la variable function setSaludo(string nuevoSaludo) returns(string){ // msg.sender: es la persona que llama a este contrato if (propietario != msg.sender) { msn = "No eres el creador del contrato"; } else { saludo = nuevoSaludo; msn = saludo; } return msn; } // 1 - Pulsamos en create // getSaludo y setSaludo son de diferente color // 2 - Pulsamos sobre getSaludo // 3 - Escribimos un nuevo saludo, entre comillas // 4 - Pulsamos sobre getSaludo y comprobamos // Todas las cuentas de mi nodo y mi blockchain tenian por defecto 100 eter }
A programar!!!
Ahora vamos a modificar el código para que únicamente el creador del contrato pueda realizar cambios. Como puedes observar en la linea 11 se ha añadido una variable de tipo address. En esta variable vamos a guardar al creador del contrato para poder limitar el uso y aportar algo de seguridad a nuestro smart contract.
Otro cambio que podemos observar respecto al código anterior, es la linea 14, ya que hemos creado el «constructor» y que solo se ejecuta una vez cuando se crea el contrato la primera vez. Básicamente le estamos asignando la dirección del wallet del creador a esa variable.
El siguiente cambio se encuentra entre la linea 27 y 32, donde comprobamos si realmente el creador del contrato esta intentado modificar el contenido. A continuación un pequeño vídeo para comprobar que funciona correctamente.