Guía completa para escribir una aplicación en la red de orbes (Parte I de II)

Introducción

Creemos que el desarrollo de tecnologías de cambiará la forma en que los desarrolladores escriben las aplicaciones como lo conocemos hoy. Orbs es parte de este esfuerzo masivo al existir como una plataforma pública, abierta a todos. Estos dos artículos (Partes I y II) demostrarán cómo construir una aplicación de chat completamente funcional utilizando la plataforma Orbs.

En general, las aplicaciones descentralizadas constan de dos partes: un contrato inteligente que almacena información y un lado del cliente que se comunica con él a través de SDK. En la Parte I, describiremos cómo escribir un contrato inteligente simple en la red de Orbs, probarlo y finalmente implementarlo.

La Parte II está dedicada a escribir una aplicación simple del lado del cliente utilizando React. Demostraré cómo usar orbs-client-sdk para consultar un contrato inteligente y enviar una transacción escrita bajo consenso.

Prerrequisitos

Antes de comenzar, necesitará las siguientes herramientas instaladas en su máquina:

Docker se utiliza para ejecutar contratos inteligentes de Orbs a nivel local. NodeJS y npm se utilizan para escribir aplicaciones del lado del cliente que se comunicarán con el contrato inteligente.

Anatomía de un simple contrato inteligente.

Escribir contratos para Orbs es muy simple. Actualmente, admite solo el lenguaje Go, que utiliza una sintaxis básica lo suficientemente familiar para la mayoría de los programadores sin conocimiento previo.

Veamos el contrato de muestra que incrementa un contador y devuelve su valor actual:

Un contrato consta de dos funciones exportadas: agregar y obtener. Estarán disponibles para ser llamados desde una aplicación cliente. Las revelamos definiendo una variable global PUBLIC.

La función del sistema (_init) es llamada por el sistema solo una vez cuando se implementa el contrato. Esta función no es parte de la interfaz pública.

Orbs-contract-sdk

Contract SDK permite a los desarrolladores de contratos inteligentes interactuar con la plataforma Orbs. Hay mucha documentación al respecto en el gitbook, por lo que no lo discutiremos en detalle en este momento.

Lo que es importante para nosotros en este tutorial es la capacidad de establecer y leer el estado. Estado es un mapa simple entre la clave y su valor. En el ejemplo anterior, creamos un contador y actualizamos su valor en la operación de adición. El valor inicial es 0 como se define en la función _init (). La función Agregar lee el valor actual en el estado y agrega la cantidad que se ha pasado a la función.

Correr localmente con gamma-cli

Cuando tenemos un contrato, lo ejecutamos ejecutándolo en un servidor local.

Orbs proporciona su propia cadena de herramientas (similar a Ganache para Ethereum) para ejecutar un entorno de simulado. Se llama Gamma-cli y está disponible aquí: https://github.com/orbs-network/gamma-cli.

En Mac, puede instalarlo con un solo comando (necesita tener Docker instalado para que se ejecute gamma):

brew install orbs-network / devtools / gamma-cli

Puede iniciarlo con gamma-cli start-local y detenerse con gamma-cli stop-local. Después de reiniciar, todos los datos se perderán.

Luego puede implementar el contrato similar al comando a continuación:

gamma-cli despliega Counter.go -name counter -signer user1

Nuestro primer contrato real.

Ahora que hemos cubierto el conocimiento de requisitos previos, podemos comenzar a desarrollar el contrato para nuestra aplicación de chat.

En el espíritu del desarrollo guiado por pruebas, comenzaremos con una prueba de extremo a extremo que nos ayudará a desarrollar nuestra API en el proceso.

Primero, deberíamos poder agregar nuevos mensajes al chat y obtener un ID de mensaje a cambio:

Esta prueba e2e completa la primera parte del flujo: poner información en el sistema. Un simple contrato que podría lograr ese objetivo sería algo como esto:

Dado que nuestro estado es un almacén de valores clave, debemos inventar nuestra propia forma de emular una lista de mensajes por canal. La forma más fácil de hacerlo es mantener un contador de mensajes por canal y luego incrementarlo cuando agregamos una nueva clave (`m_testChannel_1` almacenará el contenido del mensaje, mientras que` count_testChannel` almacenará la cantidad de mensajes de `testChannel `).

Después de ver que el e2e pasa, podemos modificar el contrato un poco para almacenar más datos, como la marca de tiempo, el remitente y la altura del bloque.

Ahora podemos enfocarnos en agregar otra parte crucial de cualquier aplicación de chat; recuperando la lista de mensajes. Actualizaremos nuestro e2e un poco para completar el comportamiento que deseamos: agregue un solo mensaje, luego solicite una lista de mensajes con identificadores entre 1 y 10.

¿Por qué incluso necesitamos a JSON? La plataforma Orbs todavía no admite valores más complejos como matrices o estructuras (gran oportunidad para una solicitud de extracción por cierto)

JSON es una forma estándar de serialización y deserialización de datos en JavaScript, y es compatible con cualquier plataforma importante. Usaremos JSON y esperaremos una respuesta como esta: ({ID: 1, Mensaje: "¡Hola, mundo!"}).

Dentro del contrato, definiremos la nueva estructura para la serialización y el método del contrato para devolver el resultado de la serialización como una cadena:

Puede ver la versión final del contrato en el proyecto git repo.

Lo único que queda es desplegarlo. En función de la configuración del entorno gamma-cli, puede especificar el entorno de destino: local o mainnet. Más sobre esto aquí:

Conversación gamma-cli deploy contract.go -name

¡Eso es todo! Hemos llegado al final de la Parte I. Aquí describimos cómo crear, probar y desplegar un contrato inteligente en la plataforma Orbs. En la siguiente parte (Parte II) describiremos cómo escribir un cliente web simple que pueda interactuar con nuestro contrato.

Siéntase libre de sumergirse en el código de la aplicación en el repositorio de git o incluso jugar con la aplicación en sí.

Kirill está liderando un esfuerzo de infraestructura en la nube en Orbs. Es muy apasionado por sus gatos y la más profunda historia de la serie Dark Souls. El Github de Kirill.