Conviértase en un desarrollador de Bitcoin: Basic 101

En esta guía vamos a explorar lo que se necesita para ser un desarrollador de bitcoins..

El hecho es que “bitcoin” y la “tecnología blockchain” en general es el tema más candente del mundo en este momento. El valor de 1 BTC se ha disparado en los últimos meses (al momento de escribir):

Conviértase en un desarrollador de Bitcoin: Basic 101

Crédito de la imagen: CoinMarketCap

¿Qué se necesita para convertirse en un desarrollador de bitcoins??

En esta guía, nuestro objetivo es responder esa pregunta.

Entonces, que es bitcoin?

Bitcoin es una criptomoneda que fue conceptualizada en 2009 por el misterioso Satoshi Nakamoto. Es una moneda digital descentralizada que funciona en un sistema peer-to-peer, utilizando la tecnología blockchain.Si desea convertirse en un desarrollador de bitcoin, lo primero que debe hacer es leer el Informe técnico de Bitcoin por Satoshi Nakamoto.

Ese documento técnico es una lectura esencial para cualquiera que quiera ingresar al juego blockchain. Ese documento técnico no solo conceptualizó el bitcoin, sino que también nos hizo ver cómo un sistema bizantino tolerante a fallas puede funcionar en un entorno descentralizado..

Si está interesado en convertirse en un desarrollador de Bitcoin, entonces es importante que sepa cómo funciona la cadena de bloques..

¿Qué es Blockchain??

La cadena de bloques es una cadena de bloques donde cada bloque contiene datos de valor sin ninguna supervisión central. Es criptográficamente seguro e inmutable. Una cadena de bloques utiliza dos estructuras de datos importantes: punteros y listas enlazadas..

Punteros

Los punteros son variables en programación que almacenan la dirección de otra variable. Por lo general, las variables normales en cualquier lenguaje de programación almacenan datos.

P.ej. int a = 10, significa que hay una variable “a” que almacena valores enteros. En este caso, está almacenando un valor entero que es 10. Esta es una variable normal.

Sin embargo, los punteros, en lugar de almacenar valores, almacenarán direcciones de otras variables. Por eso se llaman punteros, porque literalmente apuntan hacia la ubicación de otras variables.

Listas vinculadas

Una lista vinculada es uno de los elementos más importantes en las estructuras de datos. Así es como se ve una lista enlazada:

Conviértase en un desarrollador de Bitcoin: Basic 101

Es una secuencia de bloques, cada uno de los cuales contiene datos vinculados al siguiente bloque mediante un puntero. La variable de puntero, en este caso, contiene la dirección del siguiente nodo en ella y, por lo tanto, se realiza la conexión. El último nodo, como puede ver, tiene un puntero nulo, lo que significa que el puntero no tiene valor..

Una cosa importante a tener en cuenta aquí, el puntero dentro de cada bloque contiene la dirección del siguiente bloque. Así es como se consigue el apuntado. Ahora puede que te preguntes qué significa eso para el primer bloque de la lista. ¿Dónde queda el puntero del primer bloque??

El primer bloque se denomina “bloque génesis” y su puntero se encuentra en el sistema mismo. Se parece a esto:

Conviértase en un desarrollador de Bitcoin: Basic 101

Imagen cortesía: Coursera

Si se pregunta qué significa el “puntero hash”, es un puntero que contiene el hash del bloque anterior..

Como ya habrás adivinado, en esto se basa la estructura de la cadena de bloques. Una cadena de bloques es básicamente una lista enlazada y se parece a esto:

Conviértase en un desarrollador de Bitcoin: Basic 101

La cadena de bloques es una lista vinculada que contiene datos y un puntero hash que apunta a su bloque anterior, creando así la cadena. ¿Qué es un puntero hash? Un puntero hash es similar a un puntero, pero en lugar de solo contener la dirección del bloque anterior, también contiene el hash de los datos dentro del bloque anterior. Este pequeño ajuste es lo que hace que las cadenas de bloques sean tan increíblemente confiables y pioneras.

Imagínese esto por un segundo, un hacker ataca el bloque 3 e intenta cambiar los datos. Debido a las propiedades de las funciones hash, un ligero cambio en los datos cambiará drásticamente el hash. Esto significa que cualquier pequeño cambio realizado en el bloque 3, cambiará el hash que está almacenado en el bloque 2, ahora que a su vez cambiará los datos y el hash del bloque 2, lo que dará como resultado cambios en el bloque 1 y así sucesivamente. . Esto cambiará por completo la cadena, lo cual es imposible. Así es exactamente como las cadenas de bloques alcanzan la inmutabilidad.

Entonces, ¿cómo se ve un encabezado de bloque??

Conviértase en un desarrollador de Bitcoin: Basic 101

Un encabezado de bloque contiene:

  • Versión: el número de versión del bloque.
  • Hora: la marca de tiempo actual.
  • El difícil objetivo actual.
  • Hash del bloque anterior.
  • Nonce (más sobre esto más adelante).
  • Hachís de la raíz de Merkle.

Que es la mineria?

“Minería” es la forma de producir nuevos bitcoins. La minería funciona según el principio de “prueba de trabajo”. Prueba de trabajo, básicamente significa esto: resolver un problema debe ser extremadamente difícil, pero una vez que lo resuelva, demostrar que la solución es correcta debe ser simple.

Veremos cómo lo utilizan bitcoin y la mayoría de las criptomonedas más adelante. Pero por ahora, debemos entender POR QUÉ se requirió una prueba de trabajo en primer lugar.

Uno de los muchos problemas que enfrentaba Nakamoto era abordar el problema de los generales bizantinos. Todo sistema monetario descentralizado digital de igual a igual falló porque no pudo responder al problema de los generales bizantinos. Nakamoto finalmente pudo responder esto usando una prueba de trabajo..

Entonces, ¿cuál es el problema de los generales bizantinos??

Conviértase en un desarrollador de Bitcoin: Basic 101

Cortesía de imagen: Medio

Ok, imagina que hay un grupo de generales bizantinos y quieren atacar una ciudad. Se enfrentan a dos problemas muy distintos:

  • Los generales y sus ejércitos están muy separados, por lo que la autoridad centralizada es imposible, lo que hace que el ataque coordinado sea muy difícil..
  • La ciudad tiene un ejército enorme y la única forma en que pueden ganar es si atacan todos a la vez..

Para que la coordinación sea exitosa, los ejércitos de la izquierda del castillo envían un mensajero a los ejércitos de la derecha del castillo con un mensaje que dice “ATAQUE MIÉRCOLES”. Sin embargo, suponga que los ejércitos de la derecha no están preparados para el ataque y dicen: “NO. ATTACK VIERNES ”y envía al mensajero a través de la ciudad de regreso a los ejércitos de la izquierda..

Aquí es donde enfrentamos un problema.

Al pobre mensajero le pueden pasar varias cosas. Podría ser capturado, comprometido, asesinado y reemplazado por otro mensajero por la ciudad. Esto llevaría a que los ejércitos obtengan información alterada que puede resultar en un ataque y una derrota descoordinados..

Esto también tiene claras referencias a blockchain. La cadena es una red enorme; ¿Cómo puedes confiar en ellos? Si estuviera enviando a alguien 4 Ether de su billetera, ¿cómo sabría con certeza que alguien en la red no va a alterarlo y cambiar 4 a 40 Ether?

Satoshi Nakamoto pudo evitar el problema del general bizantino al inventar el protocolo de prueba de trabajo. Así es como funciona. Suponga que el ejército de la izquierda quiere enviar un mensaje llamado “LUNES ATAQUE” al ejército de la derecha, van a seguir ciertos pasos..

  • En primer lugar, añadirán un “nonce” al texto original. El nonce puede ser cualquier valor hexadecimal aleatorio.

  • Después de eso, escriben el texto adjunto con un nonce y ven el resultado. Supongamos que, hablando hipotéticamente, los ejércitos han decidido compartir solo mensajes que, al hacer hash, dan un resultado que comienza con 5 ceros..

  • Si se cumplen las condiciones de hash, enviarán al mensajero con el hash del mensaje. De lo contrario, seguirán cambiando el valor del nonce aleatoriamente hasta que obtengan el resultado deseado. Esta acción es extremadamente tediosa y requiere mucho tiempo y requiere mucho poder de cálculo..

  • Si el mensajero es atrapado por la ciudad y el mensaje es manipulado, de acuerdo con las propiedades de la función hash, el propio hash cambiará drásticamente. Si los generales en el lado derecho ven que el mensaje hash no comienza con la cantidad requerida de 0, entonces simplemente pueden cancelar el ataque..

Sin embargo, existe una posible laguna.

Ninguna función hash está 100% libre de colisiones. La resistencia a colisiones significa esto: Dadas dos entradas diferentes A y B, donde H (A) y H (B) son sus respectivos valores hash, no es factible que H (A) sea igual a H (B). Lo que eso significa es que, en su mayor parte, cada entrada tendrá su propio hash único. Sin embargo, en la práctica, ninguna función hash está 100% libre de colisiones.

Entonces, ¿qué pasa si la ciudad recibe el mensaje, lo manipula y luego cambia el nonce hasta obtener el resultado deseado que tiene el número requerido de ceros? Esto llevará mucho tiempo, pero aún es posible. Para contrarrestar esto, los generales usarán la fuerza en números..

Supongamos que, en lugar de que un solo general de la izquierda envíe mensajes a un general de la derecha, hay 3 generales de la izquierda que tienen que enviar un mensaje a los de la derecha. Para hacer eso, pueden crear su propio mensaje y luego aplicar un hash al mensaje acumulativo y luego agregar un nonce al hash resultante y volver a hacerlo. Esta vez, quieren un mensaje que comience con seis ceros..

Obviamente, esto llevará mucho tiempo, pero esta vez, si el mensajero es atrapado por la ciudad, la cantidad de tiempo que tardará en manipular el mensaje acumulativo y luego encontrar el valor correspondiente para el hash será infinitamente. más. Incluso puede llevar años. Entonces, por ejemplo. si en lugar de un mensajero, los generales envían varios mensajeros, para cuando la ciudad esté a la mitad del proceso de cálculo, serán atacados y destruidos.

Los generales de la derecha lo tienen bastante fácil. Todo lo que tienen que hacer es agregar el mensaje con el nonce correcto que se les dará, hash y ver si el hash coincide o no. Hashing una cadena es muy fácil de hacer. Ese, en esencia, es el proceso detrás de la prueba de trabajo..

  • El proceso para encontrar el nonce para el objetivo de hash apropiado debería ser extremadamente difícil y llevar mucho tiempo..
  • Sin embargo, el proceso de comprobar el resultado para ver si no se ha cometido ninguna negligencia debería ser muy sencillo..

Entonces, así es como los mineros en bitcoin implementan la prueba de trabajo para hacer su minería..

Usan su poder computacional para extraer bloques resolviendo acertijos criptográficos. Se extrae un bloque de bitcoin cada 10 minutos.

¿Cómo funcionan las transacciones en Bitcoin??

Antes de continuar, un gran agradecimiento al profesor Donald J Patterson y su canal de Youtube “djp3” por la explicación..

Supongamos que Alice quiere enviar una cierta cantidad de bitcoins a Bob. ¿Cómo funciona el sistema de transacciones en Bitcoin? Las transacciones de Bitcoin son muy diferentes de las transacciones de billetera Fiat. Si Alice le diera $ 2 a Bob, físicamente tomaría 2 dólares de su billetera y se los daría a Bob. Sin embargo, las cosas no funcionan así en Bitcoin. No posee físicamente ningún Bitcoin, lo que tiene es la prueba de que tiene Bitcoins.

Hay dos cosas más que necesita saber:

  • Los mineros validan sus transacciones poniendo los datos dentro de las minas que han bloqueado. A cambio de brindar este servicio, cobran una tarifa de transacción.

  • Cuando se trata de moneda FIAT, realmente no lleva un registro de cómo y de dónde obtuvo esa nota específica. P.ej. Abra su billetera ahora mismo y saque todos los billetes y monedas que contiene. ¿Puedes decir de dónde obtuviste exactamente todas y cada una de las notas y monedas específicas? Lo más probable es que no sea así. Sin embargo, en bitcoin, se toma nota del historial de todas y cada una de las transacciones de bitcoin..

Bien, ahora profundicemos en cómo se lleva a cabo una transacción de bitcoins entre Alice y Bob. Hay dos lados de una transacción, la entrada y la salida. Toda esta transacción tendrá un nombre que descubriremos al final. Por ahora, veamos la dinámica.

Entrada de transacción

Para que esta transacción suceda, Alice necesita obtener bitcoins que ha recibido de varias transacciones anteriores. Recuerde, como dijimos antes, en bitcoins, todas y cada una de las monedas se contabilizan a través de un historial de transacciones..

Entonces, supongamos que Alice necesita extraer bitcoins de las siguientes transacciones que llamaremos TX (0), TX (1) y TX (2). Estas tres transacciones se sumarán juntas y eso le dará la transacción de entrada que llamaremos TX (Entrada).

Diagramáticamente, se verá así:

Conviértase en un desarrollador de Bitcoin: Basic 101

Entonces, eso es todo desde el lado de entrada, veamos cómo se verá el lado de salida.

Salida de transacción

Básicamente, la salida tendrá la cantidad de bitcoins que Bob poseerá después de la transacción y cualquier cambio restante que quede, que luego se envía de vuelta a Alice. Este cambio se convierte en su valor de entrada para todas las transacciones futuras..

Una representación pictórica del lado de salida se ve así:

Conviértase en un desarrollador de Bitcoin: Basic 101

Ahora, esta es una transacción muy simple que tiene una sola salida (aparte del CAMBIO), hay transacciones que son posibles con múltiples salidas. Así es como se ve el diseño básico de la transacción. Sin embargo, para que todo esto se lleve a cabo, se deben cumplir ciertas condiciones.

Condiciones de una transacción

  • TX (entrada) > TX (salida). La transacción de entrada tiene que ser siempre mayor que la transacción de salida. En cualquier transacción, el déficit entre la entrada y la salida (salida + cambio) son las tarifas de transacción que cobran los mineros. Entonces: tarifas de transacción = TX (entrada) – (TX (salida) + cambio).

  • En el lado de entrada: TX (0) + TX (1) + TX (2) = TX (Entrada). Si Alice no tiene los fondos necesarios para realizar las transacciones, los mineros simplemente rechazarán las transacciones..

  • Bob puede tener que demostrar que puede proporcionar la prueba necesaria para obtener los bitcoins. Alice bloqueará las transacciones con la dirección pública de Bob. Deberá producir su clave privada para desbloquear las transacciones y obtener acceso a sus tarifas..

  • Alice también necesita verificar que tiene los derechos necesarios para enviar los bitcoins en primer lugar. La forma en que lo hace es firmando la transacción con su firma digital (también conocida como su clave privada). Cualquiera puede decodificar esto usando su clave pública y verificar que efectivamente fue Alice quien envió los datos. Esta prueba se llama “Datos de firma”. Recuerda esto porque esto será muy importante más adelante..

Entonces, ¿cuál será el nombre de toda esta transacción??

La entrada (incluidos los datos de la firma) y los datos de salida se suman y se procesan mediante el algoritmo de hash SHA 256. El hash de salida es el nombre que se le da a esta transacción..

El código de detalles de la transacción

Así es como se ve la transacción en el formato de código, también conocido como formato de script. Supongamos que Alice quiere enviar 0.0015 BTC a Bob y, para hacerlo, envía entradas que valen 0.0015770 BTC. Así es como se ve el detalle de la transacción:

Conviértase en un desarrollador de Bitcoin: Basic 101

Imagen cortesía: canal de youtube djp3.

Lo primero que ves:

Es el nombre de la transacción, también conocido como el hash del valor de entrada y salida.

Vin_sz es el número de datos de entrada, ya que Alice está enviando los datos utilizando solo una de sus transacciones anteriores, es 1.

Vout_sz es 2 porque las únicas salidas son Bob y el cambio.

¿Ves los datos de entrada? Alice solo está usando una transacción de entrada (en el ejemplo que dimos anteriormente, será TX (0)), esta es la razón por la que vin_sz era 1.

  • Debajo de los datos de entrada están los datos de su firma.
  • Debajo de todo esto están los datos de salida:

La primera parte de los datos significa que Bob está obteniendo 0.0015 BTC.

La segunda parte significa que 0.00005120 BTC es lo que Alice está recibiendo como cambio..

Ahora, ¿recuerdas que los datos de entrada fueron 0.0015770 BTC? Esto es mayor que (0,0015 + 0,00005120). El déficit de estos dos valores es la tarifa de transacción que cobran los mineros..

Sin embargo, antes de continuar, analicemos un tipo especial de transacción llamada transacción Coinbase. Básicamente son los primeros datos de transacción que están en el bloque, y significan la recompensa minera que obtienen los mineros al extraer el bloque. A partir de ahora, la recompensa es de 12,5 BTC. Estas transacciones no tienen datos de entrada y solo tienen datos de salida.

Una cosa que debe tener en cuenta es que una transacción en Bitcoin se realiza si y solo si el minero, que ha extraído el bloque, coloca físicamente su transacción dentro del bloque. Un minero puede convertirse en un dictador temporal del bloque que ha extraído. Pueden cobrar tarifas de transacción por todas y cada una de las transacciones que colocan dentro del bloque..

A medida que el número de transacciones aumentó a pasos agigantados, la velocidad a la que los bloques se llenaron también aumentó. La mayoría de las veces, las personas tenían que esperar hasta que se crearan nuevos bloques para que sus transacciones se realizaran. Esto creó una acumulación de transacciones; de hecho, la única forma de priorizar sus transacciones era pagar una tarifa de transacción lo suficientemente alta para atraer e incentivar a los mineros a priorizar sus transacciones..

Esto introdujo el sistema de “reemplazo por tarifa”. Básicamente, así es como funciona. Suponga que Alice está enviando 5 bitcoins a Bob, pero la transacción no se realiza debido a un retraso. Ella no puede “borrar” la transacción porque los bitcoins una vez gastados nunca pueden volver. Sin embargo, puede hacer otra transacción de 5 bitcoins con Bob, pero esta vez con tarifas de transacción que son lo suficientemente altas como para incentivar a los mineros. A medida que los mineros pongan su transacción en el bloque, también sobrescribirá la transacción anterior y la hará nula y sin efecto..

Desarrollador de Bitcoin: Programación en Bitcoin

El Bitcoin Core original fue codificado por Satoshi Nakamoto usando C++.

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).

  • Razón # 1: Seguridad

Las cadenas de bloques, como dice David Schwartz, 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.

  • Razón # 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..

  • Razón # 3: Rendimiento

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 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.

  • Razón # 4: 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..

Idioma # 1: C++

En primer lugar, comencemos con el abuelo de todos ellos, el imperecedero 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

usando el espacio de nombres std;

int main ()

{

cout << "Hola Mundo!";

return 0;

}

usando el espacio de nombres std;

int main ()

{

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. (Siguiendo los datos tomados 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 el mismo. 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 de más de una manera. En C ++, el polimorfismo se puede utilizar de dos formas:

  • Compilar polimorfismo de tiempo.
  • Polimorfismo en tiempo de ejecución.

Aquí, solo nos centraremos en el polimorfismo de 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 operador sobrecargado.

El polimorfismo de 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..

Usar carteras Bitcoin

Si desea convertirse en un desarrollador de Bitcoin, definitivamente necesita saber cómo funcionan las billeteras de Bitcoin..

Conviértase en un desarrollador de Bitcoin: Basic 101

Sin duda, la forma más segura de almacenar cualquier criptomoneda es utilizando una billetera de papel. Si sigue algunos consejos a continuación, puede configurar uno completamente gratis. Esto realmente lo convierte en el maestro de su inversión, y si se siguen las precauciones, no hay posibilidad de que nadie más conozca sus claves privadas..

Por supuesto, esto significa que mantener un registro de ellos es aún más importante. La pérdida de claves privadas significa que perderá todo el contenido de su billetera de papel (pero, de nuevo, eso es cierto para todas las billeteras).

¿Qué es una billetera de papel??

Para hacerlo muy simple, las billeteras de papel son un método de almacenamiento en frío fuera de línea para ahorrar criptomonedas. Incluye la impresión de sus claves públicas y privadas en una hoja de papel que luego almacena y guarda en un lugar seguro. Las claves están impresas en forma de códigos QR que puede escanear en el futuro para todas sus transacciones. La razón por la que es tan seguro es porque le da un control total a usted, el usuario. No necesita preocuparse por el bienestar de una pieza de hardware, ni tiene que preocuparse por los piratas informáticos o cualquier pieza de malware. Solo necesitas cuidar un trozo de papel.

Configurar una billetera de papel

Las carteras de papel se forman mediante el uso de un programa para generar aleatoriamente una clave pública y una privada. Las claves serán únicas y el programa que las genera es de código abierto. Aquellos con conocimientos avanzados de codificación pueden verificar el backend del programa ellos mismos para ver si los resultados son aleatorios. Además, generaremos nuestras claves sin conexión. Esto erradica la exposición a amenazas en línea, y eliminar el programa simple después de su uso destruirá cualquier rastro de ellas..

No se preocupe si suena confuso, no lo es. No necesitará conocimientos específicos de codificación o encriptación. Todo lo que necesita es una computadora, una conexión a Internet, algo para registrar sus llaves.

De todos modos, creemos nuestra billetera de papel. Sigue estos pasos:

  • Asegúrese de que su computadora esté completamente libre de cualquier forma de software malicioso. Una computadora nueva sería ideal, pero a menudo no es factible.
  • Visite la página WalletGenerator.net.

Conviértase en un desarrollador de Bitcoin: Basic 101

  • Descargue el archivo zip haciendo clic aquí:

    Conviértase en un desarrollador de Bitcoin: Basic 101

  • Una vez descargado, abra el archivo “index.html”, pero antes asegúrese de que su Internet esté apagado. Todo este proceso se realiza para asegurarse de que su billetera esté libre de piratas informáticos.

Conviértase en un desarrollador de Bitcoin: Basic 101

  • Ahora es el momento de generar tu billetera. Mantenga el cursor sobre el texto resaltado y generará más caracteres. O si lo desea, puede escribir manualmente caracteres aleatorios. Sigue haciéndolo hasta que el contador llegue a “0”.

    Conviértase en un desarrollador de Bitcoin: Basic 101

  • En el momento en que el recuento llegue a cero, se generará su billetera.

Conviértase en un desarrollador de Bitcoin: Basic 101

  • Imprima la página o haga varias copias de los números a partir de ella. (Importante: asegúrese de que la impresora no esté conectada a Wi-Fi en este momento).

  • Elimina la página web guardada. Ahora puede volver a conectarse a Internet de forma segura.
  • Almacene sus claves privadas en su hogar seguro, privado y a largo plazo.

Ahora que tiene su billetera, puede ir a uno de los intercambios para cambiar su moneda fiduciaria por bitcoin. Algunos de los intercambios que puede utilizar son:

  • Bitfinex.
  • Bitstamp.
  • BTC-e.
  • Coinbase.

Tienes que investigar y descubrir qué intercambios funcionan mejor en tu área..

Estar al tanto

Una de las cosas más críticas que debe hacer para ser un desarrollador de bitcoins es estar informado.

Existen muchas comunidades de desarrolladores donde puede unirse e interactuar con otros desarrolladores.

Conclusión del desarrollador de Bitcoin

Ahí vas.

Esta guía le dará una idea básica de lo que necesita hacer y aprender para convertirse en un desarrollador de Bitcoin..

Puede consultar nuestros cursos si desea iniciar su carrera de desarrollador hoy.

Bitcoin, y las criptomonedas en general, tienen infinitas posibilidades en el futuro. Es muy posible que estemos en la cúspide del próximo gran protocolo que defina una era. ¿Puede la tecnología blockchain ser la próxima Internet? Solo el tiempo puede decirlo.

Sin embargo, lo que se puede decir sin lugar a dudas es que el gran alcance de bitcoin y otras aplicaciones de blockchain no conoce límites..

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