22/8/2017

Serie Blockchain de Dialogic #5

Se habla mucho sobre blockchain, pero ¿cómo es realmente una blockchain en acción? La mejor manera de familiarizarse con una nueva tecnología es experimentar con ella uno mismo. En este artículo explicamos cómo puedes experimentar con blockchain por ti mismo. De hecho, construir tu propia blockchain no es para nada difícil. A veces puede parecer complicado, pero no te preocupes, en realidad no lo es tanto.

Este texto ha sido traducido automáticamente y por lo tanto puede diferir del original. No se pueden derivar derechos de esta traducción.

💬 Click here to read this page in English.

¡Prepárate para trabajar!

¡Comencemos, ¿qué necesitas?!

Para configurar una blockchain simple, puedes utilizar software gratuito disponible en internet. Este software funciona en la mayoría de los casos en computadoras con Windows y Mac. En este ejemplo, utilizaremos la plataforma Ethereum. Ethereum es una blockchain de acceso público: el uso de la blockchain se paga con la moneda digital 'ether'. En este ejemplo, usaremos el software en la blockchain de Ethereum para crear nuestra propia versión privada de ella.

Instalación del cliente

Para empezar, necesitas un cliente. Este es un software que gestiona la comunicación de la blockchain con otras computadoras ('nodos'). Al iniciar el cliente te unirás a la blockchain y podrás almacenar nuevos contratos en ella. Descarga el cliente 'Go Ethereum' desde esta página e instálalo. Después de hacer esto, es bueno verificar si el cliente se instaló correctamente. Para hacerlo, ve (en Windows) al menú de inicio, selecciona 'Ejecutar' y escribe 'cmd' seguido de 'Aceptar' (los usuarios de Mac abren la carpeta Aplicaciones, luego la carpeta Utilidades y luego el programa 'Terminal'; las instrucciones restantes son las mismas). En la ventana que aparezca, escribe 'geth version' seguido de enter. Si todo ha ido bien, verás una lista de la versión instalada de Go-Ethereum.

El comienzo de la cadena: el bloque génesis de la blockchain

Una vez que el software esté instalado, es hora de construir la blockchain. Como se describió anteriormente, una blockchain consta de una cadena de 'bloques'. El primer bloque se llama 'bloque génesis' y es especial, ya que es el primer bloque que todos los participantes confían sin más verificaciones. Todos los bloques que siguen al bloque génesis forman parte de la blockchain.

En primer lugar, descarga el archivo genesis.json y colócalo en el escritorio. Este archivo describe cómo debe verse el bloque génesis. Luego, ejecuta el siguiente comando en la ventana de comandos:

geth –datadir %USERPROFILE%/Desktop/data –networkid 3336 init %USERPROFILE%/Desktop/genesis.json

Si todo va bien, aparecerá un mensaje indicando que se creó correctamente el bloque génesis. En el escritorio aparecerá una carpeta 'data': aquí es donde el cliente almacena todos los datos necesarios para participar en la blockchain.

Una vez creado el bloque génesis, ¡es hora de iniciar la blockchain! Utiliza el siguiente comando:

geth –datadir %USERPROFILE%\Desktop\data –ipcpath ./geth.ipc –rpc –rpccorsdomain “*” –networkid 3336

Cuando aparezca el mensaje 'IPC endpoint opened', el cliente estará listo para su uso. Puedes detener el cliente presionando 'Ctrl-C' en la ventana de comandos. Ahora es el momento de usar realmente la blockchain. Puedes hacerlo de varias formas; primero, puedes acceder a la blockchain a través de la 'consola'. Esta es un entorno donde puedes ejecutar comandos para operar en la blockchain. Deja que el cliente siga ejecutándose y abre una nueva ventana de comando (Inicio, Ejecutar, cmd o Terminal en Mac) e ingresa el siguiente comando:

geth attach \\.\pipe\geth.ipc

Si todo va bien, aparecerá "Welcome to the Geth JavaScript console!" y algunos números de versión. Primero, debemos crear una cuenta, ya que una cuenta te da acceso a la blockchain y está protegida por una contraseña. Puedes crear una nueva cuenta con el siguiente comando:

personal.newAccount()

Luego, cada vez que reinicies el cliente, deberás desbloquear la cuenta con el siguiente comando (te pedirá la contraseña que elegiste antes):

personal.unlockAccount(personal.listAccounts[0])

Para que el cliente agregue bloques a la cadena, debes 'minar'. Inicia el proceso de minería de la siguiente manera:

miner.setEtherbase(personal.listAccounts[0])
miner.start(1)

Dado que la minería consume muchos recursos de la computadora, aquí hemos optado por limitar la velocidad: el número '1' indica que solo se utiliza un procesador de tu computadora para la minería. En una red 'real', utilizarías toda la capacidad de cálculo disponible. Cuando inicies la minería por primera vez, verás que lleva un tiempo antes de que aparezcan bloques ("Generating DAG" aparecerá varias veces en la ventana del cliente). Después, verás aparecer un bloque cada pocos segundos, si todo va bien:

Debido a que en el archivo génesis se configuró para que la minería de bloques sea sencilla, estos aparecerán rápidamente. En una blockchain 'real', la minería es más difícil y los bloques aparecen más lentamente. Sin embargo, para probar una blockchain, es útil que los bloques aparezcan rápidamente: así tus contratos inteligentes se procesarán más rápido.

Puedes salir de la consola escribiendo 'exit'. No obstante, no hace daño dejar la consola abierta.

Escritura de Contratos Inteligentes

Para escribir y desplegar contratos inteligentes en la blockchain, se utiliza el entorno de programación Solidity. Descarga Solidity desde este enlace - extrae el archivo comprimido y haz doble clic en el archivo 'index.html'. Si todo va bien, aparecerá un campo de texto vacío:

Debemos indicarle al editor de Solidity que puede interactuar con nuestra propia blockchain (a través de nuestro cliente). Para hacerlo, ve a la pestaña 'Contrato' y elige 'Proveedor Web3' bajo 'Seleccionar entorno de ejecución'. Luego, sigue todas las instrucciones que aparezcan.

¡Ahora estás listo/a para escribir tu primer contrato inteligente! En los próximos artículos profundizaremos en diferentes contratos inteligentes. A continuación, se muestra un contrato muy simple que en realidad no hace mucho, pero con el cual podemos comprobar si la blockchain funciona:

pragma solidity ^0.4.0;

contract Hello {
    address public owner;

    function Hello() {
        owner = msg.sender;
    }

    // No se pueden enviar pagos
    function () {
        throw;
    }
}

¿Qué significa esto? La primera línea indica la versión del lenguaje de programación que queremos utilizar (0.4.0). Luego comienza el contrato ("contract Hello"). La línea 'address public owner' indica que en este contrato se almacena un dato, que es la dirección ('número de cuenta') de la persona que creó el contrato. La función 'Hello' indica qué sucede cuando se crea este contrato. Por ahora, simplemente almacenamos quién creó el contrato en el campo de dirección mencionado anteriormente. Por último, encontramos algunas líneas que evitan la transferencia directa de dinero de la blockchain al contrato.

La estructura de un contrato se puede considerar como un plano: puedes instanciar uno o varios contratos que funcionen según el código (similar a cómo en el mundo de los contratos 'normales', por ejemplo, se pueden firmar múltiples 'contratos de compra' que involucren diferentes casas pero que tengan la misma estructura visualmente).

Para desplegar un nuevo contrato, haz clic en 'Crear' en Solidity en la pestaña 'Contrato'. Debería aparecer 'esperando que se publique la transacción'. Si aparece un error, es posible que tu cuenta se haya bloqueado nuevamente. En ese caso, desbloquea la cuenta nuevamente con el comando 'personal.unlockAccount(personal.listAccounts[0]))' en la consola. Si todo sale bien, al final aparecerá un bloque 'Untitled:Hello en' seguido de un largo número. Este número es la dirección del contrato, esencialmente el número de contrato. Con este número, puedes realizar acciones específicas con el contrato; volveremos sobre esto más adelante. En el bloque mismo, encontrarás las propiedades del contrato, incluida la dirección del 'owner'. ¡Por ahora vamos a dejarlo aquí, has creado tu primer contrato inteligente!

Por último

Con tu propia blockchain, en teoría, puedes construir una variedad de aplicaciones basadas en contratos inteligentes. Sin embargo, eso no significa necesariamente que sea prudente utilizar tu propia blockchain para ello. La primera pregunta que debes hacerte es si el uso de una blockchain es realmente necesario. Cuando todas las partes que intercambian información y acuerdos confían plenamente entre sí, una simple base de datos compartida sería suficiente. Si decides utilizar una blockchain, es recomendable unirte a blockchains existentes, ya que estas tienen la masa crítica para aprovechar al máximo las ventajas de las blockchains.

Para comprender cómo algo funciona realmente, prefiero desmontarlo por completo y tratar de volver a montarlo por mí mismo.

¿Quieres saber más sobre este tema?

Tommy van der Vorst, partner

Conoce a Tommy

¿Solicitar una propuesta?

Si tienes una pregunta de investigación concreta o un encargo y deseas recibir una propuesta nuestra, puedes enviar tu pregunta por correo electrónico a tenderdesk@dialogic.nl. También puedes usar esta dirección para informarnos sobre (públicas) licitaciones. Responderemos en un plazo de cinco días laborables.

Más información