LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Un blockchain es una lista de registros en continuo crecimiento, llamados bloques, que están vinculados y asegurados mediante criptografía para garantizar la seguridad de los datos.

La seguridad de los datos es de suma importancia para las corporaciones. Las empresas necesitan establecer altos niveles de confianza y ofrecer garantías sobre la seguridad de los datos que se comparten con ellos mientras interactúan con otras empresas. La principal preocupación de cualquier empresa sobre la seguridad de los datos es la integridad de los mismos. Lo que a muchos en el dominio de la empresa le preocupan es: "¿Son mis datos exactos?"

La integridad de los datos asegura que los datos sean precisos, no se mezclen y sean consistentes a lo largo del ciclo de vida de cualquier transacción.Las empresas comparten datos como facturas, pedidos, etc. La integridad de estos datos es el pilar sobre el que se construyen sus negocios.

Blockchain

Un blockchain es un libro público distribuido de transacciones que ninguna persona o compañía posee o controla. En cambio, cada usuario puede acceder a la cadena de bloques completa, y cada transacción desde cualquier cuenta a cualquier otra cuenta, ya que se registra de forma segura y verificable utilizando algoritmos de criptografía.En resumen, una cadena de bloques garantiza la integridad de los datos.

Un blockchain proporciona integridad de datos debido a sus características únicas y significativas.Algunos de estos se enumeran a continuación.

Validación intemporal para una transacción: cada transacción en un blockchain tiene un resumen de firma adjunto que depende de todas las transacciones anteriores, sin la fecha de vencimiento.Debido a esto, cada transacción puede ser validada en cualquier momento por cualquier persona sin el riesgo de alteración o alteración de los datos.

Altamente escalable y portátil: una cadena de bloques es un libro de contabilidad descentralizado distribuido por todo el mundo y garantiza una disponibilidad y una resistencia muy altas frente a desastres.

A prueba de manipulaciones: una cadena de bloques utiliza una criptografía con curva asimétrica o elíptica debajo del capó.Además, cada transacción se agrega al blockchain solo después de la validación, y cada transacción también depende de la transacción anterior.Por lo tanto, una cadena de bloques es casi imposible de manipular sin que nadie se dé cuenta.

Desmitificando blockchains

Una cadena de bloques, en sí misma, es un libro mayor distribuido y una cadena interconectada de bloques de datos individuales, donde cada bloque puede ser una transacción o un grupo de transacciones.

Para explicar los conceptos de blockchain, veamos un ejemplo de código en JavaScript.El enlace al repositorio GitHub se puede encontrar en https://github.com/abhiit89/Ang Coins.Así que revisa el repositorio de GitHub y revisa el 'Léame' ya que contiene las instrucciones sobre cómo ejecutar el código localmente.

Bloque: Un bloque en una cadena de bloques es una combinación de los datos de transacción junto con el hash del bloque anterior.Por ejemplo:

class Block {
 
constructor(blockId, dateTimeStamp, transactionData, previousTransactionHash) {
 
this.blockId = blockId;
 
this.dateTimeStamp = dateTimeStamp;
 
this.transactionData = transactionData;
 
this.previousTransactionHash = previousTransactionHash;
 
this.currentTransactionHash = this.calculateBlockDigest();
 
}

La definición del bloque, dentro de una cadena de bloques, se presenta en el ejemplo anterior.Consiste en los datos (que incluye blockId, dateTimeStamp, transactionData, previousTransactionHash, nonce ), el hash de los datos ( currentTransactionHash ) y el hash de los datos de transacción anteriores.

Bloque Génesis: Un bloque de génesis es el primer bloque que se creará al comienzo de la cadena de bloques.Por ejemplo:

new Block(0, new Date().getTime().valueOf(), ‘First Block’, ‘0’);

Agregar un bloque a la cadena de bloques

Para agregar bloques o transacciones a blockchain, tenemos que crear un nuevo bloque con un conjunto de transacciones, y agregarlo a blockchain como se explica en el siguiente ejemplo de código:

addNewTransactionBlockToTransactionChain(currentBlock) {
 
currentBlock.previousTransactionHash = this.returnLatestBlock().currentTransactionHash;
 
currentBlock.currentTransactionHash = currentBlock.calculateBlockDigest();
 
this.transactionChain.push(currentBlock);
 
}

En el ejemplo de código anterior, calculamos el hash de la transacción anterior y el hash de la transacción actual antes de empujar el nuevo bloque a la cadena de bloques.También validamos el nuevo bloque antes de agregarlo a la cadena de bloques utilizando el método que se describe a continuación.

Validar la cadena de bloques

Cada bloque necesita ser validado antes de que se agregue a la cadena de bloques.La validación que utilizamos en nuestra implementación se describe a continuación:

isBlockChainValid() {
 
for (let blockCount = 1; blockCount < this.transactionChain.length; blockCount++) {
 
const currentBlockInBlockChain = this.transactionChain[blockCount];
 
const previousBlockInBlockChain = this.transactionChain[blockCount - 1];
 
if (currentBlockInBlockChain.currentTransactionHash !== currentBlockInBlockChain.calculateBlockDigest()) {
 
return false;
 
}
 
if (currentBlockInBlockChain.previousTransactionHash !== previousBlockInBlockChain.currentTransactionHash) {
 
return false;
 
}
 
}
 
return true;
 

En esta implementación, hay muchas características que faltan hasta ahora, como la validación de los fondos, la función de reversión en caso de que el bloque recién agregado corrompa la cadena de bloques, etc. Si alguien está interesado en abordar la validación de fondos, la reversión o cualquier otro problema que encuentren, acceda a mi repositorio de GitHub, cree un problema y solucione el problema, envíeme una solicitud de extracción o simplemente bifurque el repositorio y úselo de cualquier forma que este código se adapte a sus necesidades.

Un punto que debe tenerse en cuenta aquí es que en esta implementación, existen numerosas formas de manipular la cadena de bloques.Una forma es alterar los datos solo.La implementación para eso se realiza en la rama https://github.com/abhiit89/AngCoins/tree/tampering_data.

Otra forma es no solo cambiar los datos sino también actualizar el hash.Incluso entonces, la implementación actual puede invalidarlo.El código para ello está disponible en la rama https://github.com/abhiit89/AngCoins/tree/tampering_data_with_updated_hash .

Prueba de trabajo

Con la implementación actual, todavía es posible que alguien pueda enviar spam a la cadena de bloques cambiando los datos en un bloque y actualizando el hash en todos los bloques siguientes en la cadena de bloques.Para evitar eso, el concepto de "prueba de trabajo" sugiere una dificultad o condición que debe cumplir cada bloque que se genera antes de ser agregado a la cadena de bloques.Esta dificultad impide la generación muy frecuente del bloque, ya que el algoritmo de hashing utilizado para generar el bloque no está bajo el control de la persona que crea el bloque.De esta forma, se convierte en un juego de azar para intentar generar el bloque que cumpla con las condiciones requeridas.

Para nuestra implementación, hemos establecido la tarea difícil que cada bloque generado debe tener dos '00' en el comienzo del hash, para ser agregado a la cadena de bloques.Por ejemplo, podemos modificar la función para agregar un nuevo bloque para incluir la tarea difícil, como se muestra a continuación:

addNewTransactionBlockToTransactionChain(currentBlock) {
 
currentBlock.previousTransactionHash = this.returnLatestBlock().currentTransactionHash;
 
currentBlock.mineNewBlock(this.difficulty);
 
this.transactionChain.push(currentBlock);
 
}
Esto llama a la función de minería (que valida las condiciones difíciles):

mineNewBlock(difficulty) {
 
while(this.currentTransactionHash.substring(0, difficulty) !== Array(difficulty + 1).join(‘0’)) {
 
this.nonce++;
 
this.currentTransactionHash = this.calculateBlockDigest();
 
}
 
console.log(‘New Block Mined --> ‘ + this.currentTransactionHash);
 
}

El código completo para esta implementación se puede ver en la rama https://github.com/abhiit89/AngCoins/tree/block_chain_mining.

Proveedores de Blockchain

La tecnología Blockchain, con su forma sin precedentes de administrar la confianza y los datos y de ejecutar procedimientos, puede transformar las empresas.Aquí hay algunas plataformas de blockchain de código abierto.

HyperLedger: Hyperledger nutre y respalda una amplia gama de negocios en torno a las tecnologías blockchain, incluidos los led distribuidos, los contratos inteligentes, etc. Hyperledger fomenta la reutilización de elementos básicos comunes y permite la rápida invención de componentes de tecnología ledger distribuida.

Enlace del proyecto: https://hyperledger.org/projects

Enlace Proyecto GitHub: https://github.com/hyperledger

Openchain: Openchain es una tecnología de contabilidad distribuida de fuente abierta. Es ideal para las empresas y se ocupa de la emisión y administración de activos digitales de una manera robusta, segura y escalable.

Enlace del proyecto: https://www.openchain.org/

Proyecto Ethereum: este es un marco distribuido que ejecuta contratos inteligentes: aplicaciones que se ejecutan exactamente como se programaron en un entorno virtual seguro sin tiempo de inactividad o la posibilidad de alteración, ya que esta plataforma aprovecha la cadena de bloques personalizada.

Enlace del proyecto: https://www.ethereum.org/

 

Otros artículos sobre BlockChain:

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías