Codificación Blockchain: ¡Los diferentes idiomas que necesita!

En esta guía, repasaremos algunos de los códigos de Blockchain más importantes. Y si recién está comenzando, consulte nuestros cursos completos de blockchain.

La tecnología blockchain es increíblemente fascinante. No será descabellado pensar en un futuro que se basará completamente en él. Entonces, ¿qué necesitas aprender para comenzar a desarrollar en blockchain? ¿Qué idiomas te darán la ventaja? Comencemos con la codificación blockchain!

Programación de problemas de blockchain

Antes de comenzar, veamos algunos de los desafíos que enfrenta un desarrollador de blockchain. Crear y mantener una cadena de bloques pública no es fácil por varias razones.

(Antes de continuar, un gran reconocimiento a David Schwartz por su discurso de apertura sobre el uso de C ++ en el desarrollo de software blockchain en CPPCON 2016).

Codificación Blockchain

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Desafío de dificultad de codificación blockchain n. ° 1: seguridad

Blockchains, como David Schwartz dice, deberían ser fortalezas. En primer lugar, el código es público y está abierto para que todos lo vean. Cualquiera puede revisar el código y buscar errores y vulnerabilidades. Sin embargo, a diferencia de otros recursos de código abierto, la desventaja de encontrar vulnerabilidades en el código blockchain es enorme. Cualquier programador puede piratear y salirse con la suya potencialmente con millones y millones de dólares. Debido a estas preocupaciones de seguridad legítimas, el desarrollo en blockchain suele ser muy lento.

Desafío de dificultad de codificación Blockchain # 2: Gestión de recursos

Es importante seguir el ritmo de la red. No puede quedarse atrás y no mantenerse al día con todas las demandas de la red. Debe estar bien equipado para manejar consultas remotas y locales..

Desafío de dificultad de codificación blockchain n. ° 3: rendimiento

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

La cadena de bloques siempre debe funcionar a su máxima capacidad posible, pero para que eso suceda, el lenguaje elegido debe ser extremadamente versátil. El caso es que hay ciertas tareas en la cadena de bloques que son paralelizables, mientras que hay algunas tareas que no se pueden hacer en paralelo..

Un buen ejemplo de una tarea “paralelizable” es la verificación de firma digital. Todo lo que necesita para la verificación de la firma es la clave, la transacción y la firma. Con solo tres datos puede realizar verificaciones de manera paralelizada.

Sin embargo, no todas las funciones en una cadena de bloques deben realizarse de esa manera. Piense en la ejecución de la transacción en sí. No se pueden ejecutar varias transacciones en paralelo; debe hacerse de uno en uno para evitar errores como gastos dobles. Algunos lenguajes son buenos para operaciones paralelas, mientras que otros son buenos para operaciones no paralelas.

Entrena para convertirte en un desarrollador de blockchain

Comience su prueba gratis hoy!

Desafío # 4 de dificultad de codificación Blockchain: Aislamiento

Que es el comportamiento determinista?

  • Si A + B = C, no importa cuáles sean las circunstancias, A + B siempre será igual a C. Eso se llama comportamiento determinista..
  • Las funciones hash son deterministas, lo que significa que el hash de A siempre será H (A).

Entonces, en el desarrollo de blockchain, todas las operaciones de transacción deben ser deterministas. No puede tener una transacción que se comporte de una manera y luego se comporte de otra al día siguiente. Del mismo modo, no puede tener contratos inteligentes que funcionen de dos formas diferentes en dos máquinas diferentes..

La única solución a esto es el aislamiento. Básicamente, aísla sus contratos y transacciones inteligentes de elementos no deterministas.

Entonces, hemos discutido los principales problemas que enfrentan los desarrolladores de blockchain. Ahora, finalmente veamos algunos de los lenguajes que los desarrolladores pueden usar para codificar en la cadena de bloques..

Lenguaje de codificación Blockchain # 1: C++

En primer lugar, comencemos con el abuelo de todos ellos, el perenne C++. C ++ fue creado por Bjarne Stroustrup como una extensión del lenguaje C. El lenguaje fue diseñado para tener la flexibilidad y eficiencia de C, pero con algunas diferencias importantes. La mayor diferencia entre C y C ++ es que mientras C está orientado a procesos, C ++ está orientado a objetos.

Lo que esto significa es que, en C ++, los datos y las funciones están envueltos en un pequeño paquete ordenado llamado “objetos”, lo que significa que una vez que se crea un objeto, se puede llamar y reutilizar fácilmente en otros programas, lo que reduce en gran medida el tiempo de codificación..

Veamos el programa C ++ más simple del mundo. El programa “Hola mundo”:

#incluir

principal()

{

cout << "Hola Mundo!";

return 0;

}

Este código imprimirá “¡Hola mundo!”

Entonces, ¿por qué la gente todavía usa C ++ para codificar? Seguramente hay lenguajes mucho más glamorosos ahora, ¿por qué la gente todavía insiste en volver a C ++? ¿Por qué la cadena de bloques de bitcoin está codificada en C?++?

Bueno, resulta que C ++ tiene ciertas características que lo hacen muy atractivo. (Grite a Peter Wiulle y David Schwartz por la siguiente explicación).

Característica # 1: Control de memoria

¿Recuerda lo que dijimos anteriormente sobre los desafíos del desarrollo de blockchain? Las cadenas de bloques no solo deben ser fortalezas seguras, sino que también deben tener una gestión eficaz de los recursos. Se supone que una cadena de bloques interactúa con muchos puntos finales que no son de confianza y, al mismo tiempo, brinda un servicio rápido a todos y cada uno de los nodos..

Este servicio rápido y rápido es fundamental para el éxito de una criptomoneda como bitcoin. Recuerde, todos se basan en el principio de “consenso”, todos los nodos de la red deben aceptar y rechazar exactamente los mismos bloques, de lo contrario podría haber una bifurcación en la cadena..

Para satisfacer todas estas demandas y funcionar al más alto nivel, necesita un control estricto y completo sobre el uso de la CPU y la memoria. C ++ le da eso a sus usuarios.

Característica # 2: Roscado

Como hemos comentado anteriormente, uno de los principales desafíos de la programación blockchain es la integración de tareas que se paralelizan bien y las tareas que no lo hacen. La mayoría de los lenguajes se especializan en uno, sin embargo, la capacidad de subprocesamiento de C ++ es lo suficientemente buena para manejar tareas paralelas y no paralelas. Un hilo es un conjunto de instrucciones que se pueden ejecutar simultáneamente. C ++ no solo permite excelentes instalaciones de subprocesos múltiples con una comunicación eficaz entre subprocesos, sino que también optimiza el rendimiento de un solo subproceso.

Característica # 3: Mover semántica

Uno de los aspectos más interesantes de C ++ es la semántica de movimientos. La semántica de movimiento proporciona una forma de mover los contenidos entre objetos en lugar de copiarlos directamente. Veamos las diferencias entre la semántica de copia y la semántica de movimiento. (Los siguientes datos se toman de la respuesta de Peter Alexander en “Stackoverflow”).

Copiar semántica:

  • afirmar (b == c);
  • a = b;
  • afirmar (a == b && b == c);

Entonces, ¿Que esta pasando aquí? El valor de b entra en ayb permanece sin cambios al final de todo.

Ahora, considera esto.

Mover semántica:

  • afirmar (b = = c);
  • mover (a, b);
  • afirmar (a = = c);

que está sucediendo aquí?

¿Puedes ver la diferencia entre los dos bloques de códigos??

Cuando usamos la semántica de movimiento, el valor de “b” no necesita ser sin cambios. Esa es la diferencia entre la semántica de copia y la semántica de movimiento. La mayor ventaja de la semántica de movimientos es que puede obtener copias de ciertos datos solo cuando los necesita, lo que disminuye en gran medida la redundancia en el código y aumenta enormemente el rendimiento. Como puede ver, esta gestión eficiente de la memoria y el alto rendimiento son deseables para la cadena de bloques..

Característica # 4: Polimorfismo de tiempo de compilación

Que es el polimorfismo?

¿Recuerda cuando llamamos a C ++ un “lenguaje de programación orientada a objetos (OOP)”? El polimorfismo es una propiedad OOP. Al usar polimorfismo, usa una característica particular en más de una forma. En C ++, el polimorfismo se puede utilizar de dos formas:

  • Polimorfismo en tiempo de compilación.
  • Polimorfismo en tiempo de ejecución.

Aquí, solo nos centraremos en el polimorfismo en tiempo de compilación. Hay dos formas en que C ++ implementa el polimorfismo en tiempo de compilación:

  • Sobrecarga de funciones.
  • Sobrecarga del operador.

Sobrecarga de funciones:

La sobrecarga de funciones es cuando tiene muchas funciones del mismo nombre pero con una ingesta de parámetros diferente.

Considere este programa:

#incluir

usando el espacio de nombres std;

clase A

{

void func (int x) // la primera instancia de la función toma solo un valor entero

{

cout<<X<<endl;

}

void func (double x) // la segunda instancia de la función toma solo un valor doble

{

cout<<X<<endl;

}

void func (int x, int y) // la tercera instancia de la función toma dos valores enteros

{

cout<<x = y<<endl;

}

}

int main ()

{

A obj1 // haciendo un objeto de la clase A

// ahora vamos a llamar a las funciones

obj1.func (2);

obj1.func (2,65);

obj1.func (2,5);

return 0;

}

Ahora, cuando ejecute esta función, la salida será:

  • 2
  • 2,65
  • 7

Entonces, como puede ver, la misma función func () se usó de 3 formas diferentes.

Sobrecarga del operador:

En C ++, el mismo operador puede tener más de un significado.

  • P.ej. “+” Se puede utilizar tanto para la suma matemática como para la concatenación.
  • La concatenación básicamente significa tomar dos cadenas y combinarlas como una.
  • Entonces 3 + 4 = 7.

Y

  • Bloque + geeks = Blockgeeks.
  • El mismo operador hizo dos funciones diferentes, esto es sobrecarga del operador.

El polimorfismo en tiempo de compilación ayuda mucho en el desarrollo de blockchain. Ayuda a ubicar las responsabilidades por separado en varias funciones y, a su vez, aumenta el rendimiento de todo el sistema..

Característica # 5: Aislamiento de código

C ++ tiene características de espacio de nombres que se pueden importar de un programa a otro. El espacio de nombres ayuda a evitar colisiones de nombres. Además, dado que C ++ tiene clases, puede actuar como límites entre varias API y ayudar a hacer una separación clara.

Una clase en C ++ es un tipo definido por el usuario o una estructura de datos declarada con una clase de palabra clave que tiene datos y funciones como miembros. Puede acceder a las funciones declaradas en la clase declarando objetos de esa clase en particular.

Característica # 6: Madurez

El lenguaje es maduro y se actualiza periódicamente. Hay al menos 3 compiladores sólidos, como dice David Schwartz, y las nuevas funciones están destinadas a resolver problemas reales. Hay depuradores y herramientas analíticas de todo tipo disponibles para todo, desde la elaboración de perfiles de rendimiento hasta la detección automática de problemas de todo tipo. Esto significa que el lenguaje está en constante crecimiento para incorporar nuevas y mejores funciones..

Debido a las características anteriores, Satoshi Nakamoto eligió C ++ para ser el lenguaje base del código fuente de bitcoin..

Lenguaje de codificación Blockchain # 2: Javascript

A continuación tenemos Javascript.

Junto con HTML y CSS, es una de las tres tecnologías centrales en la producción de contenido World Wide Web. Javascript se usa generalmente para crear páginas web altamente interactivas. Entonces, ahora veremos cómo crear una cadena de bloques muy simple usando Javascript. Enorme agradecimiento a savjee.be por el contenido de esta sección.

Supongamos que queremos crear una cadena de bloques simple en Javascript. Antes de hacerlo, hay ciertas cosas que debemos abordar.

¿Qué es una cadena de bloques y cómo funciona exactamente??

Una cadena de bloques es básicamente una cadena de bloques que contienen datos. Es básicamente una lista enlazada glorificada. Sin embargo, ¿qué lo hace tan especial? Una cadena de bloques es inmutable. Es decir, una vez que un dato va dentro de un bloque, nunca se puede cambiar. ¿Cómo logra una cadena de bloques la inmutabilidad? Es por un mecanismo simple pero ingenioso llamado “hash”. Mira el diagrama a continuación:

Codificación Blockchain: ¡Los diferentes idiomas que necesita!

Imagen cortesía: artículo mediano de Lauri Hartikka

Cada bloque está conectado al bloque anterior mediante un puntero hash que contiene el hash del bloque anterior. Entonces, ¿cómo hace esto que la cadena sea inmutable??

Una de las propiedades más fascinantes de las funciones hash criptográficas es que si cambia la entrada un poco, puede afectar en gran medida el hash de salida. P.ej. Mira esto:

Codificación Blockchain: ¡Los diferentes idiomas que necesita!

El simple hecho de cambiar la primera “T” de mayúscula a minúscula cambió drásticamente el hash de salida.

Entonces, ¿cómo afecta esto a la cadena de bloques??

Cada bloque está conectado al anterior mediante el puntero hash. Entonces, si alguien manipulara los datos en un bloque, cambiaría el hash drásticamente y, como resultado, terminaría afectando a toda la cadena (ya que todos los bloques están vinculados). Esto congelaría la cadena, lo cual es imposible y, por lo tanto, los bloques permanecen sin cambios..

Entonces, ¿cómo hacemos un bloque? ¿En qué consiste un bloque simple? En nuestra criptomoneda simple que vamos a hacer (llamémosla “BlockGeeksCoin”), cada bloque tendrá la siguiente información:

  • Índice: Para conocer el número de bloque.
  • Marca de tiempo: para conocer el momento de la creación.
  • Datos: los datos dentro del bloque.
  • Hash anterior: el hash del bloque anterior.
  • Hash: el hash del bloque actual.

Antes de continuar. Debe comprender ciertos términos que usaremos en nuestro programa:

  • esta: La palabra clave “this” se invoca dentro de una función y le permite acceder a los valores dentro de un objeto específico que llama a esa función en particular..
  • Constructor: Un constructor es una función especial que puede ayudar a crear e inicializar un objeto dentro de una clase. Cada clase está restringida a un solo constructor.

Ahora que está hecho, comencemos a hacer nuestro bloqueo.

Creando el Bloque

const SHA256 = require ("crypto-js / sha256");

bloque de clase

{

constructor (índice, marca de tiempo, datos, previousHash = ”)

{

this.index = índice;

this.previousHash = previousHash;

this.timestamp = timestamp;

this.data = datos;

this.hash = this.calculateHash ();

}

calcularHash ()

{

return SHA256 (this.index + this.previousHash + this.timestamp + JSON.stringify (this.data)). toString ();

}

}

Análisis de código

Ok, esto de aquí está fuera de bloque. Entonces, en la primera línea del código llamamos a la biblioteca crypto-js porque la función hash sha256 no está disponible en JavaScript.

A continuación, invocamos un constructor dentro de la clase para llamar a objetos que tendrán ciertos valores. Lo que probablemente te llame la atención es la función calculateHash (). Veamos qué está haciendo exactamente.

En un bloque, tomamos todos los contenidos y los hash para obtener el hash de ese bloque en particular. Estamos usando la función JSON.stringify para convertir los datos del bloque en una cadena para hacer un hash..

Ok, entonces tenemos el bloque listo y listo. Ahora conectemos los bloques en una cadena de bloques.

Creando la cadena de bloques

clase Blockchain

{

// Sección 1 Creación del bloque Génesis

constructor()

{

this.chain = [this.createGenesisBlock ()];

}

createGenesisBlock ()

{

devolver nuevo bloque (0, "01/01/2017", "Bloque Génesis", "0");

}

// sección 2 agregando nuevos bloques

getLatestBlock ()

{

return this.chain [this.chain.length – 1];

}

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

// sección 3 validando la cadena

isChainValid ()

{

para (sea i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

if (currentBlock.hash! == currentBlock.calculateHash ()) {

falso retorno;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

falso retorno;

}

}

devuelve verdadero;

}

}

Análisis de código

Muy bien, están sucediendo muchas cosas en la cadena anterior, vamos a dividirla en secciones.

Sección 1: El bloque Génesis

Que es el bloque génesis?

El bloque de génesis es el primer bloque de la cadena de bloques, y la razón por la que es especial es que, si bien cada bock apunta al bloque anterior, el bloque de génesis no apunta a nada. Entonces, en el momento en que se crea una nueva cadena, el bloque de génesis se invoca inmediatamente. Además, puede ver una función “createGenesisBlock ()” en la que hemos proporcionado los datos del bloque manualmente:

createGenesisBlock ()

{

devolver nuevo Bloque (0, “01/01/2017”, “Bloque Génesis”, “0”);

}

Ahora que hemos construido el bloque de génesis, construyamos el resto de la cadena..

Sección 2: Adición de bloques

En primer lugar, necesitaremos saber cuál es actualmente el último bloque de la cadena de bloques. Para eso usamos la función getLatestBlock ().

getLatestBlock ()

{

return this.chain [this.chain.length – 1];

}

Ahora que hemos determinado el último bloque, veamos cómo vamos a agregar nuevos bloques..

addBlock (newBlock) {

newBlock.previousHash = this.getLatestBlock (). hash;

newBlock.hash = newBlock.calculateHash ();

this.chain.push (newBlock);

}

¿Entonces, Que esta pasando aquí? ¿Cómo agregamos los bloques? ¿Cómo comprobamos si el bloque dado es válido o no??

Recuerda el contenido de un bloque?

Un bloque tiene el hash del bloque anterior a la derecha?

Entonces, lo que vamos a hacer aquí es simple. Compare el valor hash anterior del nuevo bloque con el valor hash del último bloque.

Codificación Blockchain: ¡Los diferentes idiomas que necesita!

Imagen cortesía: artículo mediano de Lauri Hartikka

Si estos dos valores coinciden, esto significa que el nuevo bloque es legítimo y se agrega a la cadena de bloques..

Sección 3: Validación de la cadena

Ahora, tenemos que comprobar que nadie ha estado jugando con nuestra cadena de bloques y que todo está estable..

Estamos usando el ciclo “for” para ir del bloque 1 al último bloque. El bloque Génesis es el bloque 0.

para (sea i = 1; i < this.chain.length; i ++)

{

const currentBlock = this.chain [i];

const previousBlock = this.chain [i – 1];

En esta parte del código estamos definiendo dos términos, bloque actual y bloque anterior. Y ahora simplemente vamos a encontrar el hash de estos dos valores..

if (currentBlock.hash! == currentBlock.calculateHash ()) {

falso retorno;

}

if (currentBlock.previousHash! == previousBlock.hash)

{

falso retorno;

}

}

devuelve verdadero;

}

Si el “hash anterior” del bloque actual no es igual al “hash” del bloque anterior, esta función devolverá False, de lo contrario, devolverá True.

Usando la cadena de bloques

Ahora, finalmente usaremos blockchain para crear nuestro BlockGeeksCoin.

  • dejar BlockGeeksCoin = new Blockchain ();
  • BlockGeeksCoin.addBlock (nuevo Bloque (1, “20/07/2017”, {cantidad: 4}));
  • BlockGeeksCoin.addBlock (nuevo Bloque (2, “20/07/2017”, {cantidad: 8}));

Y eso es!

Entonces que paso aqui?

Creamos una nueva criptomoneda basada en la cadena de bloques y la nombramos BlockGeeksCoin. Al invocar este nuevo objeto, activé el constructor, que a su vez creó el bloque Génesis automáticamente.

Simplemente le agregamos dos bloques más y les dimos algunos datos.

Es asi de simple.

(Gracias savjee.be por la asombrosa y sencilla explicación).

Lenguaje de codificación Blockchain # 3: Python

Guido van Rossum, un programador holandés, creó Python en 1991. Python se basa en una filosofía simple: Simplicidad y Minimalismo. Una de las formas más notables en que incorporaron la simplicidad a su lenguaje es mediante el uso de espacios en blanco para significar bloques de código en lugar de llaves o palabras clave. Veamos qué significa esto.

Echemos un vistazo a un programa sencillo de “hola mundo”.

print (“¡Hola, mundo!”)

SIP eso es!

Compare eso con el programa “Hola mundo” de C ++.

¿Ves lo menos complicado que es en comparación? ¿Qué tal si hacemos algo un poco más complicado? Supongamos que sumamos dos números e imprimimos el resultado.

num1 = 1,5

num2 = 6.3

suma = float (num1) + float (num2)

print (“La suma de {0} y {1} es {2}”. formato (num1, num2, sum))

Y eso es.

El resultado de este programa será:

  • La suma de 1.5 y 6.3 es 7.8

Entonces, suba la apuesta. ¿Cómo vamos a programar una cadena de bloques completa usando Python? Los siguientes datos y código se tomaron del artículo de Gerald Nash en Medium.

Creando el bloque

En primer lugar, hagamos nuestro bloque:

importar hashlib como hasher

bloque de clase:

def __init __ (self, index, timestamp, data, previous_hash):

self.index = índice

self.timestamp = marca de tiempo

self.data = datos

self.previous_hash = previous_hash

self.hash = self.hash_block ()

def hash_block (yo):

sha = hasher.sha256 ()

sha.update (str (self.index) +

str (marca de tiempo propia) +

str (datos propios) +

str (self.previous_hash))

volver sha.hexdigest ()

Análisis de código

Comenzamos importando la biblioteca hash para usar las funciones hash SHA 256 (bastante como Javascript).

Al igual que antes, el bloque tiene el mismo valor:

  • Índice.
  • Marca de tiempo.
  • Datos.
  • Hash anterior.
  • Picadillo.

Una vez en contra, estamos completando los valores hash a través de una función, igual que antes.

Creando el bloque génesis

Ahora, creemos el bloque Génesis:

importar fecha y hora como fecha

def create_genesis_block ():

return Block (0, date.datetime.now (), “Genesis Block”, “0”)

Análisis de código

Hemos importado fecha y hora para poner la marca de tiempo..

Simplemente generamos el bloque de génesis y le dimos manualmente algunos datos para trabajar. El valor hash anterior es “0” porque no apunta a ningún otro bloque.

Creando el resto de bloques

Ahora definamos cómo se crearán los bloques siguientes..

def next_block (último_block):

this_index = last_block.index + 1

this_timestamp = date.datetime.now ()

this_data = "¡Oye! Estoy bloque " + str (this_index)

this_hash = last_block.hash

return Block (this_index, this_timestamp, this_data, this_hash)

Análisis de código

Entonces, ¿cómo vamos a determinar los valores de todos y cada uno de los datos dentro de cada bloque??

El índice de bloque es simplemente el índice del último bloque + 1.

La marca de tiempo es la fecha y hora actual.

El dato del bloque es un simple mensaje: “¡Oye! Estoy bloque “.

Hash que estamos calculando usando la función que definimos anteriormente.

Y, en última instancia, devolvemos todos estos valores al bloque.

Creando la cadena de bloques

Finalmente, creemos la cadena de bloques.

blockchain = [create_genesis_block ()]

previous_block = blockchain [0]

num_of_blocks_to_add = 15

para i en el rango (0, num_of_blocks_to_add):

block_to_add = next_block (anterior_block)

blockchain.append (block_to_add)

bloque_anterior = block_to_add

# Cuéntaselo a todos!

imprimir "El bloque # {} se ha agregado a la cadena de bloques.!".formato (block_to_add.index)

imprimir "Hash: {} n".formato (block_to_add.hash)

Análisis de código

En primer lugar, creamos el bloque génesis y le damos su valor a “previous_block”.

Luego determinamos cuántos bloques agregar, en este ejemplo vamos con 15.

Entonces estamos ejecutando un ciclo que va hasta el 15 y agrega todos y cada uno de los bloques a la cadena de bloques. Al final del vistazo, estamos imprimiendo qué bloque numérico se ha agregado a la cadena de bloques mostrando su número de índice. Además, también estamos imprimiendo el Hash.

Así es como se verá la salida:

Codificación Blockchain: ¡Los diferentes idiomas que necesita!

Imagen cortesía: Gerald Nash Medium Article

Obviamente, tanto en esto como en javascript, podría agregar funciones más complicadas como Prueba de trabajo. Si desea aprender cómo implementar eso, es muy recomendable que lea el artículo de Gerald Nash. Pero por ahora, al menos sabe cómo crear una cadena de bloques simple en Python.

Lenguaje # 4: Solidez

Finalmente, llegamos a Solidity. Para cualquiera que quiera aprender cómo hacer DAPP (aplicaciones descentralizadas) o entrar en el juego de las ICO, aprender Solidity es una necesidad absoluta. Ya tenemos una guía detallada que puede leer aquí. Sin embargo, aquí le daremos una descripción básica. Solidity fue desarrollado por Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai y varios antiguos colaboradores principales de ethereum para permitir la escritura de contratos inteligentes en plataformas blockchain como Ethereum..

Solidity es un lenguaje deliberadamente adelgazado y de tipo libre con una sintaxis muy similar a ECMAScript (Javascript). Hay algunos puntos clave para recordar del documento Ethereum Design Rationale, a saber, que estamos trabajando dentro de un modelo de pila y memoria con un tamaño de palabra de instrucción de 32 bytes, la EVM (Ethereum Virtual Machine) nos da acceso al programa ” pila ”que es como un espacio de registro donde también podemos pegar direcciones de memoria para hacer que el Contador de Programa se repita / salte (para el control secuencial del programa), una“ memoria ”temporal expandible y un“ almacenamiento ”más permanente que en realidad se escribe en el blockchain, y lo más importante, el EVM requiere un determinismo total dentro de los contratos inteligentes.

Entonces, antes de continuar, veamos un ejemplo básico de contrato de Solidez. (Códigos tomados de github).

Ejecutemos un ciclo while simple en solidez:

contrato BasicIterator

{

creador de direcciones; // reservar uno "habla a"-tipo de lugar

uint8 [10] números enteros; // reserva una porción de almacenamiento para 10 enteros sin signo de 8 bits en una matriz

función BasicIterator ()

{

creador = msg.sender;

uint8 x = 0;

// Sección 1: Asignación de valores

mientras (x < integers.length) {

enteros [x] = x;

x ++;

}}

función getSum () devoluciones constantes (uint) {

uint8 suma = 0;

uint8 x = 0;

// Sección 2: Sumando los enteros en una matriz.

mientras (x < integers.length) {

suma = suma + enteros [x];

x ++;

}

devolución de suma;

}

// Sección 3: Matar el contrato

función kill ()

{

si (msg.sender == creador)

{

suicidio (creador);

}

}

}

Entonces, analicemos.

Sección 1: Asignación de valores

En el primer paso, estamos llenando una matriz llamada “enteros” que toma 10 enteros sin signo de 8 bits. La forma en que lo estamos haciendo es mediante un bucle while. Veamos lo que sucede dentro del bucle while..

mientras (x < integers.length) {

enteros [x] = x;

x ++;

}

Recuerde, ya le hemos asignado un valor de “0” al entero x. El ciclo while va de 0 a integers.length. Integers.length es una función que devuelve la capacidad máxima de la matriz. Entonces, si decidimos que una matriz tendrá 10 enteros, arrayname.length devolverá un valor de 10. En el ciclo anterior, el valor de x va de 0 a 9 (<10) y también asigna el valor de sí mismo a la matriz de enteros. Entonces, al final del ciclo, los números enteros tendrán el siguiente valor:

0,1,2,3,4,5,6,7,8,9.

Sección 2: Agregar el contenido de la matriz

Dentro de la función getSum () vamos a sumar el contenido de la propia matriz. La forma en que lo va a hacer es repitiendo el mismo ciclo while que el anterior y usando la variable “suma” para agregar el contenido de la matriz.

Sección 3: Matar el contrato

Esta función anula el contrato y envía los fondos restantes del contrato al creador del contrato..

Cuando se le preguntó cuál fue la inspiración y la motivación detrás de la creación de solidez, el Dr. Gavin Woods dijo lo siguiente:

“[Solidity] estaba destinado a ser una herramienta sofisticada para desarrollar contratos que, en última instancia, podría brindar tanto a los desarrolladores como a los usuarios buena información sobre lo que hacía el código. Para ayudar con esto, ideé NatSpec, un formato de documentación compatible con los contratos, y lo convertí en un ciudadano de primera clase en Solidity. También propuse un subconjunto de lenguaje de prueba formal (aún no implementado) para maximizar los tipos de garantías de corrección que se podrían hacer.

Introduje eventos como un ciudadano de primera clase en el lenguaje de Solidity para proporcionar una buena abstracción para LOGs similar en forma a las llamadas a funciones. La inspiración para eso vino de las “señales” del sistema de metaobjetos Qt.

Una característica posterior que Christian R. y yo descubrimos juntos fueron los modificadores de función; que permite que los atributos colocados como parte de la firma de una función realicen algunas modificaciones en el cuerpo de la función aparente. Al ser un medio de expresión muy declarativo, es un idioma que encaja muy bien en el espacio de la programación orientada a los contratos “.

Codificación Blockchain: Conclusión

En este artículo, solo hemos cubierto 4 idiomas para la codificación de blockchain que se utilizan en el desarrollo dentro y alrededor de blockchain. En realidad, hay muchos más lenguajes que potencialmente puedes usar (Java, Go). Si eres programador, las posibilidades para ti son realmente infinitas. A medida que el mundo se vuelve cada vez más descentralizado y blockchain se vuelve cada vez más común, el futuro para usted es definitivamente ilimitado..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me