1. Blockchain
Ahora, cuando escribo este artículo, la tasa de cambio de Bitcoin ha caído más de 5 veces en relación con el valor máximo y cuando dije que estaba haciendo algo relacionado con la cadena de bloques, lo primero que escuché es un escepticismo abierto: "¿quién necesita toda esta cadena de bloques tuya?" .
Sí, de hecho, la exageración en torno a la cadena de bloques ha pasado. Pero las tecnologías subyacentes permanecieron, se están desarrollando y continuarán desarrollándose y se utilizarán en ciertos nichos.
En Internet y, en particular, en Habré, hay una gran cantidad de materiales que describen ambas áreas generales de aplicación de la tecnología (por ejemplo,
habr.com/company/bitfury/blog/353350 y ejemplos más específicos de
habr.com/company/raiffeisenbank/blog/332756 ).
Como sabes, blockchain es un registro distribuido, es decir una base de datos que se distribuye entre varios nodos mientras cada nodo almacena una copia completa del registro. La peculiaridad de blockchain es que los registros (transacciones) se agrupan en bloques, y los bloques se combinan en una cadena de bloques. Sin embargo, solo las operaciones de adición de datos están disponibles. Todo esto lleva al hecho de que es casi imposible realizar cambios en las transacciones ya guardadas en la cadena de bloques.
Hay muchos materiales sobre cómo funciona la cadena de bloques (si no ha escuchado nada sobre la cadena de bloques antes, puede comenzar con
este simple video ).
En el momento del máximo aumento de interés en la tecnología blockchain, hubo muchas llamadas para usar blockchain absolutamente en todas partes. Sin embargo, hay ciertos signos de proyectos / tareas, cuya implementación puede requerir una cadena de bloques.
En primer lugar, la participación de una gran cantidad de jugadores (usuarios) que registran datos, mientras que es necesario evitar inconsistencias y aumentar la confianza.
En segundo lugar, la ausencia de un tercero en el que todos confíen.
En tercer lugar, la necesidad de un mecanismo para la verificación de datos públicos.
Si se cumplen todas las condiciones anteriores, debe pensar en usar una cadena de bloques.
Dichas tareas pueden surgir en cualquier industria. El proyecto
www.101blockchains.com recopila información sobre proyectos potenciales e implementados, así como sobre las características del uso de blockchain en diferentes áreas.
Por ejemplo, en el sector de la salud, blockchain se puede usar:
- para la gestión segura de los datos del paciente;
- combatir las drogas falsificadas a través de transacciones invariables a lo largo de la cadena de suministro;
- para mejorar el monitoreo y la efectividad de los ensayos clínicos al eliminar el fraude y la manipulación de datos.
Cuando usan blockchain en el segmento corporativo, generalmente usan una blockchain privada con varios niveles de permisos (Blockchain con permiso privado). Dichas redes tienen un conjunto especial de nodos para confirmar transacciones.
Sin embargo, al desarrollar el primer adaptador IRIS de InterSystems para trabajar con blockchain, elegimos
Ethereum , que pertenece a la categoría de Blockchain sin permiso, una plataforma abierta sin un organismo rector. Esta elección está asociada con la popularidad de Ethereum y una infraestructura bastante desarrollada: la presencia de varias herramientas y bibliotecas. También puede notar que usando el software Ethereum puede
crear una blockchain privada .
2. El adaptador
Ahora es el momento de pasar al adaptador en sí.
Un adaptador en InterSystems IRIS (así como en Ensemble) es una clase o paquete de clases IRIS de InterSystems que proporcionan la capacidad de trabajar con un sistema externo. Los adaptadores IRIS de InterSystems se dividen en entrantes (para recibir datos de un sistema externo cuando el sistema externo es el iniciador de la interacción) y salientes (para trabajar con un sistema externo cuando el iniciador de la interacción es IRIS de InterSystems).
El adaptador IRIS Ethereum es un adaptador saliente y es ligeramente diferente de la mayoría de los otros adaptadores IRIS de InterSystems, ya que parte de este adaptador es un paquete de clases IRIS de InterSystems, pero el adaptador también incluye un pequeño módulo NodeJS. La arquitectura se muestra en la Figura 1.
Figura 1El módulo adaptador NodeJS usa las bibliotecas NodeJS existentes para trabajar con Ethereum.
El adaptador proporciona las siguientes características:
- Coloque un contrato inteligente en Ethereum (planeamos preparar otro artículo en el que hablaremos más sobre contratos inteligentes, herramientas de desarrollo y discutiremos un ejemplo).
- Llame a métodos de contrato inteligente: ambos métodos que no cambian el estado de la cadena de bloques y los métodos que cambian el estado de la cadena de bloques.
- Guardar una transacción (transferir fondos de billetera a billetera)
- Llamar a métodos auxiliares para obtener el estado de blockchain
- Registro de todas las solicitudes (realiza el módulo NodeJS, útil para la depuración)
El adaptador está disponible con el código fuente de OpenExchange .
3. Un ejemplo simple
Se instala un ejemplo de "Hola mundo" con el adaptador.
Para comenzar a trabajar con Ethereum (incluso para ejecutar este ejemplo) necesita:
- Elija con qué red trabajará. Para el desarrollo, generalmente se utilizan redes de prueba como Ropsten.
- Cree una billetera en esta red y repongala
- Instale un cliente Ethereum local (por ejemplo, Geth) u obtenga una clave para trabajar con un proveedor de la nube (por ejemplo, Infura)
Al configurar una transacción comercial, debe especificar (Figura 2):
- Servidor y puerto donde se ejecuta el módulo NodeJS (el puerto predeterminado es 3000)
- Configuración del proveedor (en este caso, acceso a Infura)
- Detalles de acceso (en los detalles de acceso debe indicar su billetera como nombre de usuario, la clave privada de la billetera como contraseña. En InterSystems IRIS, los detalles de acceso se almacenan en una base de datos separada, para la cual se debe habilitar el cifrado)
Figura 2Para trabajar con contratos inteligentes, deberá crear (para cada contrato inteligente con el que se pondrá en contacto) una carpeta en el sistema de archivos y colocar 2 archivos allí:
* abi.txt
* bytecode.txt
Estos archivos deben tener un contrato inteligente ABI y Bytecode. Smart contract ABI: una descripción formal de la interfaz de contrato inteligente en formato json. ABI y Bytecode se crean en el momento en que se compila el contrato inteligente.
Bytecode solo es necesario para implementar un contrato.
Mediante el servicio de prueba, puede verificar el funcionamiento de una transacción comercial.
En la Figura 3, utilizando el servicio de prueba, se implementa el contrato inteligente. El resultado de llamar a esta operación comercial es un mensaje que contiene un hash de transacción.
Figura 3Usando el navegador ropsten.etherscan.io (https://etherscan.io/), puede encontrar esta transacción y obtener la dirección del contrato inteligente colocado.
Para ejecutar métodos de contrato inteligentes utilizando el adaptador, debe especificar la configuración en la configuración del producto: ContractFolder y ContractAddress.
El código para llamar al método de contrato inteligente es bastante simple:
set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt") set contract = ..Adapter.GetContract( ##class(Ethereum.Address).%New(..ContractAddress), ..ContractABI) set result = contract.hello() set pResponse = ##class(Ens.StringContainer).%New(result.args)
Usando el método del adaptador GetContract, que se pasa la dirección del contrato inteligente y ABI, se crea un objeto de contrato inteligente, que luego se utiliza para llamar a los métodos. En este caso, el método hello () debe definirse en el contrato inteligente, que devuelve una cadena.
En este ejemplo, el método hello () no cambia el estado de la cadena de bloques, por lo que puede llamarse sincrónicamente. Sin embargo, los métodos que cambian el estado de la cadena de bloques pueden llevar mucho tiempo (esperando la confirmación de la transacción).
Para llamar a tales métodos, puede usar el mecanismo de respuesta diferida en InterSystems IRIS. El adaptador debe pasar el token diferido y luego, cuando se confirma la transacción NodeJS, el módulo transmitirá el resultado de su ejecución a InterSystems IRIS. Para hacer esto, debe configurar la aplicación web y agregar una transacción comercial al producto que procesará la respuesta recibida.
Código para llamar a un método que cambia el estado de la cadena de bloques:
En este caso, antes de llamar al método de contrato inteligente setName (), se deben especificar varios parámetros, incluido un token de respuesta retrasada.
En nuestro próximo artículo, hablaremos más sobre contratos inteligentes y daremos un ejemplo de cómo resolver una aplicación utilizando el adaptador InterSystems IRIS Ethereum.