Daniel Snchez Buitrago Complementado por Juan Felipe Pea
Daniel Sánchez Buitrago Complementado por Juan Felipe Peña Tamayo Bases de Datos II
Introducción • Fue creada por la empresa británica Coin Sciences • Está basada en Bitcoin Core • Ofrece una API sencilla para la creación y manipulación de blockchains
Funcionalidades • Creación de blockchains “privadas” (en el sentido de que permiten definir quién puede conectarse y quién no) y manejo de permisos • Posibilidad de múltiples blockchains simultáneas • Conectividad con la red de Bitcoin • Interfaz gráfica web • Librerías para usarse desde diferentes lenguajes de programación
Descarga e Instalación (Windows de 64 bits) 1. Descargar el archivo correspondiente a Windows desde la página oficial: https: //www. multichain. com/download-community/ 2. Extraer el archivo ZIP descargado en un directorio de su elección. 3. Agregar el directorio en el path de las variables de entorno.
Descarga e Instalación (Linux) 1. Ejecutar la siguiente secuencia de comandos en una terminal:
Blockchain 1 Blockchain 2 Blockchain 3
Creación y Conexión • Multi. Chain se maneja en la línea de comandos; todas las acciones son comandos. • Para crear una blockchain llamada chain 1: multichain-util create chain 1 • Para conectarse a la blockchain recién creada: multichaind chain 1 –daemon • Al ejecutar el comando se imprimirá en la línea de comandos la dirección del nodo en la blockchain y la conexión a la blockchain quedará ejecutándose en la línea de comandos. • Un mismo computador puede conectarse a varias blockchains.
Transacciones • Cada acción que se ejecute en la blockchain (como publicar en un stream o enviar un activo, se ven más adelante) es una transacción. Estas se almacenan en bloques (ver más adelante). • Al ejecutar una transacción se imprime en la línea de comandos su txid (un identificador único para la transacción). • Para consultar información sobre una transacción específica: multichain-cli chain 1 getrawtransaction [txid] 1 • El 1 al final le indica a Multi. Chain que imprima la información en un formato legible.
Más Nodos • Inicialmente, para conectar un computador a una blockchain creada en otro computador: multichaind chain 1@[dirección IP]: [puerto] • Aunque la información de la blockchain se descarga en el computador que emite el comando anterior, este no tiene permiso para conectarse. Para brindarle permisos de conexión se ejecuta el siguiente comando en el computador original: multichain-cli chain 1 grant [dirección] connect • El parámetro dirección hace referencia a la dirección del nodo en la blockchain (impreso por el primer comando).
Permisos • En general, para brindar un permiso a otra dirección: multichain-cli chain 1 grant [dirección] [permiso] • Para revocar un permiso a una dirección: multichain-cli chain 1 revoke [dirección] [permiso]
Permisos Los siguientes permisos permiten: • • • connect: conectarse a blockchains desde otros nodos. send: enviar activos (assets, ver luego). receive: recibir activos. issue: crear activos. create: crear streams (ver luego). mine: minar bloques. activate: modificar los permisos connect, send y receive de otros. admin: modificar todos los permisos de otros. [stream]. read: consultar datos en un stream. [stream]. write: publicar datos en un stream.
Streams • Un stream es una sección de una blockchain que permite almacenar (publicar) y consultar datos. • Una blockchain puede tener varios streams, lo cual permite controlar el acceso a los datos. • Para crear un stream: multichain-cli chain 1 create stream 1 "{"restrict": "write"}"
Blockchain 1 Stream 2 Blockchain 2 Stream 3 Stream 4 Blockchain 3 Stream 5
Streams • Para publicar un dato (un JSON) en el stream: multichain-cli chain 1 publish stream 1 key 1 "{"json": {"name": "John Doe", "city": "London"}}" • Varios datos pueden tener la misma clave y un dato puede tener más de una clave. • El requisito para publicar datos en un stream es tener permisos de escritura sobre dicho stream. Sin embargo, para consultar los datos es necesario “suscribirse” al stream. • Para suscribirnos al stream (funciona también para activos, se ve más adelante): multichain-cli chain 1 subscribe stream 1
Streams (cont. ) • Para mostrar todos los datos contenidos en un stream: multichain-cli chain 1 liststreamitems stream 1 • Para consultar datos por clave: multichain-cli chain 1 liststreamkeyitems stream 1 key 1 • Una consulta más compleja: multichain-cli chain 1 liststreamqueryitems stream 1 "{"keys": ["key 1", "key 2"]}" La consulta anterior muestra solamente los objetos que tengan ambas claves.
Activos • Un activo es similar a una moneda; se puede definir una cantidad total en existencia, se puede subdividir, y se puede enviar a otros y recibir de otros.
Activos (cont. ) • Para crear un activo con cierta cantidad: multichain-cli chain 1 issue [dirección] asset 1 1000 0. 01 • Para este activo, llamado asset 1, inicialmente existen 1000 unidades, y es divisible en 100 partes ().
Activos (cont. ) • Para enviar un activo a otra dirección (necesita permiso receive): multichain-cli chain 1 sendasset [dirección] asset 1 100 • Cada nodo tiene una única billetera en la que puede guardar varios activos. • Para visualizar la cantidad de todos los activos en la billetera del nodo: multichain-cli chain 1 gettotalbalances
Bloques • Para consultar un bloque: multichain-cli chain 1 getlastblockinfo [saltos] • El parámetro saltos define cuántos bloques saltar antes de consultar el bloque (con 0 saltos se consulta el último bloque agregado, con 1 salto el bloque anterior a ese, y así sucesivamente). • Para consultar información más detallada de un bloque: multichain-cli chain 1 getblock [hash] El hash se obtiene del primer comando.
Smart Filters • Un smart filter es una función que permite hacer chequeos adicionales a las transacciones que se emiten en la blockchain para verificar su validez. • Son similares a los firewalls en las redes y a los triggers en una base de datos, debido a que permiten definir reglas sobre lo que se permite y lo que no. • Existen dos tipos: para transacciones y para objetos en un stream.
Smart Filters (cont. ) • Los smart filters se definen como funciones de Java. Script. • La función puede obtener información adicional sobre la transacción o el objeto mediante otras funciones (llamadas callbacks) proporcionadas por Multi. Chain. Ver ejemplo • Para rechazar la transacción o el objeto, la función debe retornar una cadena de caracteres no vacía (ver ejemplo más adelante). • Si la función retorna un valor diferente, la transacción o el objeto se acepta.
Smart Filters (cont. ) • Para crear un smart filter (necesita permisos admin y create): multichain-cli chain 1 create [tipo] [nombre] [restricciones] [código] • El parámetro tipo puede ser txfilter (para transacciones) o streamfilter (para objetos en streams). • El parámetro restricciones se usa con smart filters de transacciones para restringir el funcionamiento de este a ciertos activos o streams. Es un JSON de la forma: {"for": ["entidad 1", "entidad 2"]} • Las “entidades” en el arreglo denotan los nombres de los activos o streams para los que aplica el smart filter. • Ejemplo: {"for": ["asset 1"]}
Smart Filters (cont. ) • Ejemplo del código de un smart filter de objeto de stream, que requiere que cada objeto se publique con al menos dos claves: function filterstreamitem() Callback { var obj = getfilterstreamitem(); if (obj. keys. length<2) return "Se requieren dos claves"; } Cadena no vacía �Se rechaza
Smart Filters (cont. ) • Para crear el smart filter de la diapositiva anterior: multichain-cli chain 1 create streamfilter filtro 1 "{}" “function filterstreamitem() { var obj = getfilterstreamitem(); if (obj. keys. length<2) return "Se requieren dos claves"; }”
Smart Filters (cont. ) • Para activar o desactivar un smart filter de objetos de stream: multichain-cli chain 1 approvefrom [dirección] [nombre] "{"for": "stream 1", "approve": true/false}" • Para activar o desactivar un smart filter de transacciones: multichain-cli chain 1 approvefrom [dirección] [nombre] [true/false] • Para ver el código de un smart filter: multichain-cli chain 1 getfiltercode [nombre]
Smart Filters (cont. ) • Ejemplo de objeto que pasa (es aceptado) el smart filter recién creado: multichain-cli chain 1 publish stream 1 "["key 3", "key 4"]" 012345 • Ejemplo de objeto que no pasa (es rechazado) el smart filter recién creado: multichain-cli chain 1 publish stream 1 key 3 abcdef
Herramientas Existen dos herramientas para la visualización de la blockchain en el navegador, ambas open source, estas son: • Multichain explorer 2, escrito en Python. • Multichain Web, escrito en PHP. La principal diferencia entre estas es que Multichain Web permite modificar la blockchain desde el mismo navegador (crear stream, insertar datos en un stream, etc. ), mientras que explorer 2 no.
Multichain explorer 2
Multichain Web
Multichain Web (Cont. ) Descarga e instalación: • Descargar e instalar XAMPP: https: //www. apachefriends. org/es/index. html • Clonar el repositorio oficial (https: //github. com/Multi. Chain/multichainweb-demo) y copiar los archivos en la carpeta htdocs de XAMPP. • Cambiar el nombre del archivo config-example. txt a config. txt. • Crear y conectarse a una blockchain. • Modificar el archivo config. txt insertando los parámetros necesarios de la blockchain (el mismo archivo contiene una descripción de cada uno). • Iniciar el servicio Apache en XAMPP. • Multichain Web se estará ejecuando en localhost: 80. Demostración…
API y librerías • Todos los comandos que hemos visto, hacen parte de la API llamada JSON-RPC API • Existen librerías hacen uso de esta API para trabajar con multichain desde diferentes lenguajes. En la página web de multichain tenemos información sobre las siguientes librerías:
Multi. Chain. Java. API • Descarga e instalación: • Clonar el repositorio oficial: www. github. com/Simply. Ub/Multi. Chain. Java. API • Construir el proyecto con ayuda de maven*: mvn clean install En linux, se puede hacer la instalación con el commando: . /install. sh • Incluir el archivo. jar generado dentro de la carpeta target en las librerías del Proyecto Java (Necesario una version 1. 7 o superior) *Maven es una herramienta de software para la gestión y construcción de proyectos Java (Wikipedia) Descarga, instalación y uso: maven. apache. org
Multi. Chain. Java. API (cont. ) • Para usar la blockchain creada anteriormente (debemos estar conectados a la blockchain desde la terminal): Command. Manager command. Manager = new Command. Manager("localhost", “[ Puerto ]", “[ RPCUser ]", “[ RPCPassword ]"); • Los últimos tres parámetros los encontramos en la siguiente dirección: C: Users[ Usuario ]App. DataRoamingMulti. Chain[ Nombre de la Blockchain ] El puerto se encuentra en params. dat (default-rpc-port), los demás parámetros en multichain. conf
Más información • https: //www. multichain. com/download/Multi. Chain-White-Paper. pdf • https: //github. com/Multi. Chain/multichain-web-demo • www. github. com/Simply. Ub/Multi. Chain. Java. API
- Slides: 34