Remix: Aprendiendo a desarrollar tu primer Smart Contract para la Blockchain Ethereum

¿Que es Remix?

Remix, previously known as Browser Solidity, is a web browser based IDE that allows you to write Solidity smart contracts, then deploy and run the smart contract.

Es un IDE que nos va permitir desarrollar Smart Contracts en la web sin tener que hacer instalaciones complejas. Solo abriendo nuestro navegador podemos desarrollarlos directamente.

1

Renombramos nuestro archivo ballot.sol a MessageStore.sol. Y a continuación paso a explicar partes del código.

  • la primera línea va ser indicarle al compilador que versión de Solidity queremos utilizar. (línea 1)
  • Definimos nuestro Smart Contract con la palabra contrac y el nombre que queremos asignarle. (línea 3)
  • El constructor es la pieza de nuestro Smart Contract que será invocado cuando este desplegado en la red.  (línea 8)
  • Para poder almacenar quien es el propietario del Smart Contract  se define una variable de tipo address como privado con el nombre owner. Para saber quien es el propietario del contracto tenemos que signar a la variable owner a msg.sender que esta disponible de manera ambiental cuyo valor representa la dirección de la persona que esta ejecutando la transacción dentro de la red. (línea 10)
  • Este contrato va estar diseñado para poder almacenar un mensaje y poder devolver solo a quien  lo solicite.
  • La función setMessage va recibir un parámetro de tipo string, será publico y vamos a setear el mensaje con el nuevo mensaje que nos esta llegando. Como public quiere decir que cualquier usuario podrá ejecutar esta función, mas adelante se configurara que funciones pueden ser invocadas, por que usuarios o cuales son los requerimientos que están establecidos para poder ejecutar esa función, por el momento nuestra función es publica y almacenara cualquier mensaje que nos manden. (línea 13)
  • La función getMessage devolverá el mensaje que tenemos almacenado en nuestro Smart Contract , será de tipo public para ser visible y ejecutable por todos los usuarios, y tendrá un modificador de tipo view (desde esta función no se va almacenar ningún valor dentro de nuestro Smart Contract, por lo tanto no requerirá minar una transacción dentro de un bloque, solo será una función de visualización). Siguiente es marcar el tipo de dato que vamos a devolver  en este caso será de tipo string. (línea 18)

Todas las funciones que modifican datos dentro de nuestro Smart Contract como setMessage, requerirán que los minadores de la red de Ethereum verifiquen esta transacción mediante el proceso de minado, dicha transacción tendrá asociado unos costos que serán pagados por la persona que ejecuta la transacción y retribuidos al minador que consiga resolver el bloque.

Las funciones que no modifican nada dentro del Smart Contract de tipo view son totalmente gratuitas sin tener ningún costo asociado.

Al correr nuestro primer Smart Contract en el Tab de compile, si todo esta bien nos debería de aparecer un recuadro verde sin ningún error.

1.png

Si por alguna razón nos equivocamos en la versión o algún otro tipo de error nos aparecerá un mensaje con el error que hay que solucionar.

2.PNG

El siguiente paso es desplegarlo para poder interactuar con el y ver su funcionalidad,
utilizando el entorno Javacript VM, lo que hace remix es prepararnos un Sandbox donde tendremos disponible una red de Ethereum de pruebas.

Remix nos brinda 5 cuentas que tiene 100 Ether cada una para poder interactuar con ellas, seleccionamos la primera. Nuestro MessageStore ya se encuentra dentro de la pestaña run disponible para ser desplegado, click en deploy para desplegarlo.

1

La primera cuenta a tenido una baja en su balance, ahora muestra menos de 100 ether porque a tenido que pagar la cuota de la transacción que se producido al desplegar el Smart Contract, obviamente al estar en un Sandbox de prueba no existe el concepto de minar y todas las transacciones son instantáneas, pero aun así remix nos simula el coste de la transacción que tendríamos en la red de Ethereum.

2

  • Veremos el resumen de la transacción dentro de status. Observamos que la transacción ha sido minada y ejecutada con éxito.
  • Veremos cual a sido el hash de la transacción.
  • Podemos ver la dirección (address) del contrato que se ha generado, esta será la dirección mediante la cual podemos interactuar con el.
  • from será la cuenta que envió dicha transacción, que será la cuenta que tuvimos seleccionada.
  • gas, indica cual es la cantidad de gas que hemos indicado que queremos enviar para ejecutar la transacción , este campo se estable en la caja de gas limit, que por defecto esta en 3 millones de gas. El coste real ha sido 270788 (transacction cost).

3.PNG

Si en gas limit esta por debajo del coste de gas de la transacción recibiremos un mensaje de que no hay suficiente gas y nuestra transacción terminara en un error , si el estado de la transacción es error, lo que hará Ethereum es hacer rollack de la misma, es decir todos los cambios que se hayan producido en nuestro de Smart Contract hasta el finalizar la ejecución serán desechos.

Vamos a similar este error, utilizando un valor de gas limit que se encuentre por debajo del valor real.

4

Otra pestaña que debemos  considerar será el numero de instancias que tenemos de nuestro Smart Contract en memoria, pueden ser varias como podemos observar.

5.png
Remix nos permite interactuar con nuestro Smart Contract mostrándonos los métodos que son públicos y cuales podemos invocar. Si clickeamos getMessage retornara vacío.

6Ahora ingresamos un mensaje y cuando volvemos a getMessage nos retorna el mensaje seteado. Todas están transacciones se pueden ver en las salidas del terminal.

7.png8.png

 

Alternativas  a Remix


Existen muchas alternativas para facilitar el desarrollo y la implementación de Smart Contracts, como:


Trufa
Embark
MetaMask
Dapp


Puedes encontrar información más detallada en la documentación , siéntete libre de profundizar y experimentar cambiando en  el código y explorar las diferentes funciones y pestañas que ofrece el editor.

Saludos.

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *