Primeros pasos en Blockchain, Solidity y Smart Contracts.

Victor Paredes
codeAndreani
Published in
7 min readFeb 4, 2022

Imaginate que tenés una casa para alquilar y podés acordar con el inquilino todos los asuntos (renta mensual, servicios, fechas de pago, depósito en garantía, etc), donde exista un contrato confiable para ambas partes sin la necesidad de un agente inmobiliario, escribano o abogado….

En esta primera publicación (tengo planificado que existan dos mas sobre este tema) aprenderemos qué es y cómo funciona una blockchain, qué son los smart contracs y cémo preparar el entorno local de nuestros equipos para comenzar a jugar con smart contracts.

¿Qué es una blockchain?

Una blockchain es una “cadena” de operaciones (también llamados bloques) unidas entre sí. Están diseñadas para realizar transacciones anónimas, seguras y descentralizadas.

Cada una de las operaciones de una blockchain solo conocen tres elementos que utiliza para poder operar:

La operación anterior: Es el identificador único de la operación anterior (por lo general un hash de 256) que asegura el orden de las operaciones en la blockchain.

Las billeteras origen/destino: Las operaciones no hablan de “usuarios” si no de billeteras y de esta forma se aseguran que cada operación sea anónima.

La transacción: Es el monto a transferir del origen al destino el cual será validado por una red de cómputo (los llamados mineros, ya lo explicaremos más adelante). La red de cómputos (los mineros) son los que aseguran que la blockchain sea descentralizada.

¿Cómo funciona una blockchain?

Usemos como ejemplo una moneda, que al día de hoy es ficticia, llamada MafaldaCoin.

  • Alex transfiere 5 MafaldaCoin a Taylor.
  • Taylor le transfiere 2 MafaldaCoin a Robin.
  • Robin le transfiere 3 MafaldaCoin a Ariel.

Cuando Alex transfiere los 5 MafalcaCoin a Taylor realiza una operación e informa: El id de su billetera como origen, el id de la billetera de Taylor como destino, el monto a transferir (5 MafaldaCoin ) y la operación anterior (en este caso, ninguna por que es la primera).

La operación ingresa ahora en el proceso de validación, este proceso consiste en verificar que el origen tenga los fondos que se van a transferir y en resolver una incógnita matemática pensada para que la resolución sea impredecible.

Se llama blockchain por que es una cadena de bloques(u operaciones)

La única forma de resolver esta incógnita es por fuerza bruta. Una red miles de nodos (los famosos “mineros”) realizan miles de millones de cálculos (se mide en terahashes) para intentar obtener un valor, que agregado a la operación, permita obtener un hash (de la operación que se intenta validar) de 256 bits que comience con una determinada cantidad de ceros.

El nodo que logra resolver la incógnita da aviso a la red para confirmar que la solución encontrada es correcta. La operación es aprobada y se realiza la transferencia de las monedas. El nodo que logró resolver la incognita recibe como recompensa una determinada cantidad de monedas.

Smart Contracts

Un smart contract es en principio una aplicación conocida como Dapp o Distributed Application. Estas aplicaciones corren sobre una blockchain beneficiándose de todas las propiedades de la red:

  • Son públicas al estar disponibles como si fuera una operación (o bloque) de una blockchain.
  • Son distribuidas al existir en todos los nodos de validación (mineros).
  • Son inmutables mediante el proceso de validación (hash) que impide que un contrato sea modificado.

Entonces, un smart contract es en resumen un fragmento de código que corre dentro de una blockchain.

Solidity — ¡Hola mundo! ¿por dónde comenzamos?

Ahora que ya sabemos lo que es una blockchain, cómo funciona y qué papel juegan los smart contracts en las mismas… ¡es hora de ir a codear!

Aviso que esto no es “otro tutorial de solidity” si no mi experiencia comenzando desde cero comentando los problemas que encontre, cómo los resolvi y tratando de explicar un poco mas que los tutoriales que use para aprender.

Lo primero son las herramientas que vamos a usar.

  • Visual Studio Code, se puede usar Remix pero prefiero seguir el camino del Jedi con un entorno completo y que no me limite a futuro.
  • Plugin de Solidity para VSCode de Juan Blanco. Existen otros pero este en particular es el que se usa en la mayoría de los tutoriales.
  • Node v14.16.1 y NPM 6.14.12 o pueden usar el gestor de versiones NVM como yo. Es MUY importante utilizar estas versiones ya que de lo contrario tendremos problemas al instalar Truffle.
  • Ganache es un emulador de una blockchain de Ethereum que correrá en nuestra computadora. Es donde haremos los deploy para probar nuestros contratos.
  • Truffle es una herramienta que nos facilitara el desarrollo (testing, deploy, compilación, etc) de contratos. Si tenés problemas para instalar el paquete revisa que las versiones de Node / NPM sean las que se mencionan más arriba.

La Instalación

Evitaremos explicar, para no hacer más extenso, la instalación de Visual Studio Code y del plugin.

// Si usan NVM estos comandos son para instalar y usar Node
nvm install 14.16.1
nvm use 14.16.1
// Instalamos truffle
npm install -g truffle
// instalamos ganache
npm install -g ganache
// Hagamos un INIT de un proyecto
mkdir hello-world-example
cd hello-world-example
truffle init

En este punto tendremos un proyecto Solidity creado y funcionando con un contrato.

La organización de las carpetas que Truffle nos armó no tiene ningún misterio:

  • contracts: Contendrá todos los contratos que vayamos creando para este proyecto. En este caso, por ahora, solo existe uno a modo de ejemplo.
  • migrations: Será donde se encontrarán los script (JS) utilizados para realizar el deploy de nuestros contratos.
  • test: Es la folder que truffle nos crea para poder colocar nuestros test unitarios (spoiler alert! haremos una publicación de TDD&Solidity)

¡Ahora, nuestro contrato!

Agregamos nuestro contrato en \contracts\HelloSolidity.sol. El ejemplo es simple, seteamos nuestro nombre y podemos pedir un saludo.

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
// Prestar atencion que el nombre del contrato
// debe ser igual al file.
contract HelloSolidity {
string myName = "Andreani";

function sayHello() public view returns(string memory) {
return string(abi.encodePacked("Hello ", myName, "!"));
}
function changeMyName(string memory _newName) public {
myName = _newName;
}
}

Ahora, debemos crear un script de deploy para nuestro nuevo contrato. Esto lo haremos creando el archivo \migrations\2_deploy_contract.js que tendrá todo el código necesario para el deploy.

var hello = artifacts.require("HelloSolidity");module.exports = function(deployer) {
deployer.deploy(hello, "Andreani");
};

Ahora vamos a levantar y configurar nuestra blockchain local de prueba. Simplemente en la consola ejecutamos ganache.

ganache
Al ejecutarse ganache se veran las cuentas locales (con 1000 ETH en cada una) y las claves privadas. La captura solo muestra lo que necesitamps que es la IP y el puerto RCP

Con esta información vamos a configurar el archivo truffle-config.js

Ahora es tiempo de compilar el proyecto.

Importante: Al momento de compilar tuve el error Could not find artifacts for {nombre de contrato} from any sources, se debió que el contrato debe llamarse igual en todos los lugares donde se menciona ( *.sol, *.js ).

truffle compile

Finalmente, el deploy a nuestra blockchain de mentiritas en nuestra computadora ( ganache ).

truffle migrate
El contact address es es la direccion donde se deployo nuestro contrato dentro de la blockchain.

Finalmente ya tenemos nuestro contrato compilado y deployado en la blockchain local, es hora de probarlo.

Abrimos la consola de truffle para comenzar a probar nuestro contrato.

truffle consoleconst instance = await HelloSolidity.deployed()
instance.sayHello()
instance.changeMyName("Victor")
instance.sayHello()

Finalmente, si llegaramos a tener problemas les dejo el repo a mi github para que lo bajen y lo comparen.

git clone git@github.com:victorparedes/solidity-first-steps.git

¿Que estamos haciendo en Andreani?

Actualmente estamos investigando la web 3.0, especificamente dos tecnologías que creemos pueden ser utiles en el futuro de la logística.

Blockchain para certificar procesos. Por ejemplo, la traza de un envío sobre una blockchain es completamente inmutable y transparente. Cada evento de un envío es un bloque que no puede ser modificado (gracias a los hash). La veracidad de la información es incuestionable y su existencia está asegurada en todos los nodos que la validan.

Tokens no fungibles (NFT) para el uso de correspondencia legal como cartas documentos o telegramas. También puede tener aplicación para facilitar el alquiler del espacio en nuestra central inteligente de traslado.

No sabemos si alguna de estas investigaciones lleguen a ser implementadas, pero como ya mencionamos en otra publicación… es divertido hacerlo y ayuda al equipo de desarrollo a mantenerse ágil y motivado.

--

--