Construye con Javascript una blockchain basica. Parte 7 y final

creando una interfaz de comandos de aplicacion (cli)

Para el último paso de este post, crearemos una interfaz de línea de comandos (CLI). La CLI es necesaria para poder acceder fácilmente a los servicios que tu creaste. No entraré en todo el proceso interno del script CLI, ya que está más allá del alcance de este post y se aleja de la temática del blog. Para más informacion, Internet y Google.

A continuación, instale las librerias que utilizaremos para ejecutar promises, ejecutar la funcion async, agregar colores a la consola y almacenar cookies.

> npm babel-polyfill async update-notifier handlebars colors
 nopt --save

En el comando block.js, establecerá dos comandos: get y all. Eche un vistazo al código completo:

let logger = require('../logger');
function Block(options) {
 this.options = options;
}
Block.DETAILS = {
 alias: 'b',
 description: 'block',
 commands: ['get', 'all'],
 options: {
 create: Boolean
 },
 shorthands: {
 s: ['--get'],
 a: ['--all']
 },
 payload: function(payload, options) {
 options.start = true;
 },
};
Block.prototype.run = function() {
 let instance = this,
 options = instance.options;
 if (options.get) {
 instance.runCmd('curl http://localhost:' + options.argv.
original[2] + '/getBlock?index=' + options.argv.original[3]);
 }
 if (options.all) {
 instance.runCmd('curl http://localhost:' + options.argv.
original[2] + '/blocks');
 }
};
Block.prototype.runCmd = function(cmd) {
 const { exec } = require('child_process');
 logger.log(cmd);
 exec(cmd, (err, stdout, stderr) => {
 if (err) {
 logger.log(`err: ${err}`);
 return;
 }
 logger.log(`stdout: ${stdout}`);
 });
};
exports.Impl = Block;

Como puede ver, el comando wallet.js incluirá get y todos métodos para apuntar a un comando curl para ejecutar la llamada de servicio HTTP.

Del mismo modo, el comando block.js incluirá un método de creación y un comando curl
para ejecutar la llamada de servicio HTTP. Consulta abajo:

let logger = require('../logger');
function Wallet(options) {
 this.options = options;
}
Wallet.DETAILS = {
 alias: 'w',
 description: 'wallet',
 commands: ['create'],
 options: {
 create: Boolean
 },
 shorthands: {
 c: ['--create']
 },
payload: function(payload, options) {
 options.start = true;
 },
};
Wallet.prototype.run = function() {
 let instance = this,
 options = instance.options;
 if (options.create) {
 instance.runCmd('curl http://localhost:' + options.argv.
original[2] + '/getWallet');
 }
};
Wallet.prototype.runCmd = function(cmd) {
 const { exec } = require('child_process');
 logger.log(cmd);
 exec(cmd, (err, stdout, stderr) => {
 if (err) {
 logger.log(`err: ${err}`);
 return;
 }
 logger.log(`stdout: ${stdout}`);
 });
};
exports.Impl = Wallet;

Ahora que tiene sus comandos configurados, puede agregar su CLI al bash_profil como un alias para poder ejecutar la CLI desde cualquier ubicación de ruta.

> vim ~/.bash_profile
 alias cli='node /[project location]/step7/bin/bin/cli.js

Guarde y ejecute bash_profile para aplicar estos cambios.

> . ~/.bash_profile

Puede llamar a la CLI una vez que ejecute P2P y sepa los puertos que está utilizando.

> cli block --get [port] 1 #port #index
> cli block –all [port] #port
> cli wallet --create [port]

Por ejemplo, ejecute una instancia de la red P2P en Terminal.

> node p2p.js

A continuación, abra una nueva ventana de terminal y ejecute el comando CLI para recuperar el primer bloque generado.

> cli block --get [port] 1

aqui esta la salida:

En este post, creó dos comandos para obtener bloques y crear tu wallet. Este es un punto de partida para su CLI, y podrá continúar agregando comandos según sea necesario.

final

Estea serie de posts cubrió cómo crear su propia cadena de bloques de red P2P básica. Pudiste enviar y recibir mensajes e incluir bloques en estos mensajes. Pudiste registrar y cancelar el registro de mineros y Implementar un mecanismo de consenso de PoS simple. Creaste nuevos bloques y los envió entre los peers. También configuraste un base de datos LevelDB de nombre-valor para almacenar bloques. Creaste una billetera que consiste
de un par de claves asimétricas. Por último, creaste varias formas de comunicarse con
su red P2P a través de servicios API y CLI.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s