https://blockgeeks.com/wp-content/uploads/2017/12/developer.jpg

Tutorial de Cadena de bloques | Cómo convertirse en un desarrollador de Cadena de bloques:

en flag
fr flag
de flag
Subscribe

En esta guía vamos a trazar tu viaje para convertirte en un Desarrollador de Cadena de bloques. Para facilitarte las cosas, vamos a dividir esta guía en varias metas y darte pasos de acción al final de cada sección.

¿Cómo convertirse en un Desarrollador de Cadena de bloques

Huelga decir que estamos viviendo en la “era de la cadena de bloques“. El impacto que esta puede tener en nuestro futuro es alarmante y magnánimo. Entonces, ¿cómo pruebas un poco de la “acción de la cadena de bloques”? Si vas a convertirte en un desarrollador de cadena de bqloues, hay ciertos pasos que necesitas tomar.

Se espera que al final de la guía, tengas las herramientas necesarias para impulsar tu viaje. Si de verdad deseas convertirte en un desarrollador entonces necesitamos establecer algunas expectativas para ti. Primero, tomará tiempo y necesitarás dedicar tu tiempo y recursos a tu educación (puedes continuar tu educación con nosotros tomando nuestras clases en línea). Segundo, no esperes resultados inmediatos, convertirse en un desarrollador de cadena de bloques no es una píldora mágica.

Entonces, dicho esto, empecemos tu viaje.

¡Tutorial sobre cómo convertirse en un desarrollador de Cadena de bloques!

How To Become A Blockchain Developer: Cram Session!

Someone…transactionAlguien solicita una transacción
The requested…as nodes.La transacción solicitada es emitida a la red P2P que consiste de computadoras, conocidas como nodos.
ValidationValidación
The network…algorithms.La red de nodos valida la transacción y el estado del usuario usando algoritmos conocidos.
A verified…information.Una transacción verificada puede involucrar criptomonedas, contratos, registros, u otra información.
Once verified…the ledger.Una vez verificada, la transacción es combinada con otras transacciones para crear un nuevo bloque de datos para el libro mayor.
The new block…unalterable.El nuevo bloque es añadido a la cadena de bloques existente, de manera que es permanente e inalterable.
The transaction is complete.La transacción es completada.
CryptocurrencyCriptomoneda
Has no intrinsic…as goldNo tiene un valor intrínseco de manera que no es redimible por otro producto, como el oro.
Has no physical…network.No tiene forma física y solo existe en la red.
Its supply…decentralized.Su suministro no está determinado por un banco central y la red es completamente descentralizada.

Meta #1: Entender las bases

Uno de los obstáculos más grandes con algo tan nuevo y revolucionario, como la tecnología de cadena de bloques, es familiarizarse con varios conceptos integrales al sistema.

Si eres un principiante, entonces existen ciertos términos con los que debes familiarizarte:

Aprender la tecnología de cadena de bloques

  • Cadena de bloques: La cadena de bloques es una cadena de bloques donde cada bloque contiene datos de valor sin una supervisión central. Es criptográficamente segura e inmutable.
  • Descentralizada: Se dice que la cadena de bloques es descentralizada porque no existe una autoridad central que supervise todo.
  • Mecanismo de consenso: El mecanismo por el cual una red descentralizada llega a un consenso en determinadas cuestiones.
  • Mineros: Usuarios que usan su potencia computacional para minar bloques.

Capacitarse para convertirse en un desarrollador de Cadena de bloques

Puede ser aconsejable aprender más sobre estos términos que son ampliamente usados en la criptoesfera. Es altamente recomendable que revises por completo un glosario integral. Es importante aprender estos términos básicos, de lo contrario estarás muy perdido en cuanto avances con tu educación. Ahora, a continuación, es tiempo de educarte más sobre los aspectos técnicos de la cadena de bloques.

Si estás interesado en los aspectos técnicos sobre cómo crear una aplicación Fintech sobre la Cadena de bloques entonces definitivamente debes aprender los pormenores de la criptoeconomía. La mayoría de los desarrolladores conocen muy bien la parte “cripto” de la ecuación pero su conocimiento sobre la parte “económica” es extremadamente pobre.

  • BGAP in Hyperledger H
  • Esta diferencia en conocimiento es extremadamente aparente cuando estudias algunos de los ICOs que circulan. Es muy obvio ver que el lado económico de sus ICOs no están bien elaborados.

    Entonces, a la luz de esto, puede ser una buena idea leer un poco sobre economía y tener una idea general de esta. Si deseas aprender sobre criptoeconomía en general, entonces puedes revisar nuestro artículo aquí.

    Si te intriga la criptografía específicamente y deseas saber cómo funcionan las firmas y qué significa una criptografía de clave pública, entonces lee esto.

    Después de eso, es altamente recomendable que entiendas cómo funciona Bitcoin. Bitcoin es una de las aplicaciones más extendidas, excelentes y una de las más elegantes de la tecnología de la cadena de bloques. Incluso puedes llamarlo el mejor ejemplo de lo que puede lograr la tecnología de cadena de bloques puramente por el impacto que tuvo.

    Entonces, es aconsejable que leas la documentación técnica por Satoshi Nakamoto de Bitcoin. La puedes encontrar aquí. Ahora eso completa la primera meta.

    Revisemos los pasos de acción que necesitas tomar desde aquí:

    • Familiarizarte con los varios términos y léxico.
    • Leer los aspectos más técnicos de la cadena de bloques.
    • Leer la documentación técnica de Bitcoin.

    Meta #2: Aprender cómo funciona el proceso

    Es bastante sorprendente ver cuántos “desarrolladores” en formación no han tenido una experiencia real de primera mano con las criptomonedas en absoluto. ¿Cómo puedes innovar y mejorar una plataforma cuando no la has usado ni siquiera una vez?

    Es altamente recomendable que empieces a familiarizarte con el sistema hoy.

    Visita Coinbase o cualquier otra bolsa que te quede cómoda o sea accesible en tu país y compra unas monedas. No necesitas crear una cartera amplia al comenzar, solo compra unas monedas y observa cómo funciona todo el proceso.

    Es extremadamente sencillo. Dado que no vas a comprar muchas monedas, simplemente usa una billetera básica en línea.

  • BGAP in Hyperledger H
  • Estas billeteras son las más fáciles de usar entre todas. La creación es súper sencilla porque básicamente es crear tu propia cuenta en cualquiera de los servicios de comercio. Además, puedes acceder a esta billetera desde cualquier servidor o dispositivo en el mundo siempre que estés conectado a la red. Dicho esto, existe un gran problema con las billeteras en línea. Tu clave privada estará guardada en otro servidor. Esto básicamente es como servir tu clave a los hackers en una bandeja de plata. NO uses billeteras en línea para almacenar enormes cantidades de tu dinero. Guarda el mínimo que necesites con propósitos de comercio.

    A medida que creas una cartera amplia, debes aprender cómo utilizar monederos en frío para almacenar tu dinero. Puedes aprender cómo hacerlo aquí. Después, si creas tu ICO entonces DEBES saber cómo funcionan las billeteras, en particular las billeteras de múltiples firmas.

    Estamos llegando al final de esta sección, la parte difícil empieza en la próxima meta.

    Tus pasos de acción son:

    • Aprender cómo funcionan las bolsas.
    • Familiarizarte con billeteras.

    Meta #3: ¡Empecemos a programar! Tutorial de Cadena de bloques

    Como desarrollador de cadena de bloques, te enfrentarás a muchos desafíos en el back-end. Crear y mantener una cadena de bloques pública no es sencillo por varias razones.

    (Antes de continuar, se agradece públicamente a David Schwartz por su presentación con respecto al uso de C++ en el desarrollo de software de cadena de bloques en CPPCON 2016.)

    • Razón #1: Seguridad

    Las cadenas de bloques, como David Schwartz lo expone, deben ser fortalezas. Primero, el código es público y abierto para que todos lo vean. Cualquiera puede ver el código y revisar errores y vulnerabilidades. Sin embargo, a diferencia de otros recursos de código abierto, la desventaja de encontrar vulnerabilidades en el código de cadena de bloques es masiva. Cualquier programador puede hackear y potencialmente llevarse millones y millones de dólares. Debido a estas legítimas preocupaciones de seguridad, el desarrollo en la cadena de bloques usualmente es muy lento.

    • Razón #2: Gestión de recursos

    Es muy importante llevar un ritmo con la red. No puedes quedarte muy atrás y no estar al día con todas las demandas de la red. Debes estar bien equipado para manejar consultas remotas y locales.

    • Razón #3: Rendimiento

    La cadena de bloques siempre debe funcionar en sus capacidades más altas posibles, pero para que esto ocurra el lenguaje elegido debe ser extremadamente versátil. El tema es que existen ciertas tareas en la cadena de bloques que pueden ser paralelizadas mientras hay algunas tareas que no pueden hacerse en paralelo.

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

  • BGAP in Hyperledger H
  • Sin embargo, no todas las funciones en la cadena de bloques se deberían hacer de esa manera. Piensa en la ejecución misma de la transacción. No se pueden ejecutar múltiples transacciones en paralelo; necesita hacerse una a la vez para evitar errores como gastos dobles. Algunos lenguajes son buenos en operaciones paralelas mientras que otros lo son en operaciones no paralelas.

    • Razón #4: Aislamiento

    ¿Qué es un comportamiento determinístico?

    Si A + B = C, entonces sin importar las circunstancias, A+B siempre será igual a C. Eso se llama comportamiento determinístico.

    Las funciones hash son determinísticas, lo que significa que el hash de A siempre será H(A).

    Entonces, en el desarrollo de cadena de bloques, todas las operaciones de transaccioens deben ser determinísticas. No puedes tener una transacción que se comporta de una forma y luego de otra al día siguiente. De manera similar, no puedes tener contratos inteligentes que funcionan de dos maneras diferentes en dos máquinas diferentes.

    La única solución a esto es el aislamiento. Básicamente, aislar tus contratos inteligentes y transacciones de elementos no determinísticos.

    Existen algunos lenguajes que satisfacen la mayoría de estas necesidades. Si eres un desarrollador de cadena de bloques, entonces definitivamente necesitas tener conocimientos básicos de C++ y JavaScript.

    Si bien C++ puede parecer algo anticuado, la verdad es que este satisface maravillosamente todas las funcionalidades que hemos descrito anteriormente. De hecho, Satoshi Nakamoto escribió el código fuente de Bitcoin en C++.

    Junto con HTML y CSS es una de las tres tecnologías principales en la Producción de contenido de la World Wide Web. JavaScript usualmente es usado para crear páginas web altamente interactivas.

    Entonces, ahora veremos cómo crear una cadena de bloques muy sencilla usando JavaScript.

     

    Un gran agradecimiento público a savjee.be por el contenido a continuación.

    ¿Cómo creamos un bloque? ¿De qué consiste un bloque simple? En nuestra criptomoneda sencilla que vamos a crear (Llamémosla “BlockGeeksCoin”), cada bloque tendrá la siguiente información:

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

     

    Antes de continuar. Necesitas entender ciertos términos que vamos a usar en nuestro programa:

    • This: La palabra clave “this” es invocada dentro de una función y te permite acceder al valor dentro de un objeto específico que llame esa función 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 solo un constructor.
    • Ahora que eso está hecho, empecemos a crear nuestro bloque.
    • Creando el bloque
    [CODE SNIPPET]

    Análisis del código

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

    Luego, invocamos al constructor dentro de la clase para llamar a objetos que tendrán ciertos valores. La parte que probablemente llame tu atención es la función calculateHash(). Veamos exactamente lo que está haciendo.

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

    Ok, ya tenemos el bloque completado y listo para continuar. Ahora conectemos los bloques en una cadena de bloques.

     

    Creando la cadena de bloques: Convertirse en un desarrollador de Cadena de bloques

    [CODE SNIPPET]

    Análisis del código

    Ok, están ocurriendo muchas cosas en la cadena anterior, dividamos esto en secciones.

    • Sección 1: El bloque génesis

    ¿Qué es el bloque génesis?

    El bloque génesis es el primer bloque de la cadena de bloques, y la razón por la que es especial es que, mientras cada bloque apunta a su bloque anterior, el bloque génesis no apunta a nada.  Entonces, en el momento que sea crea una nueva cadena, el bloque génesis se invoca inmediatamente.

    Además, puedes ver una función “createGenesisBlock()” donde dimos manualmente los datos del bloque:

    [CODE SNIPPET]
    • Sección 2: Agregando bloques

    Primero, necesitamos saber cuál es el último bloque en la cadena de bloques. Para eso usamos la función getLatestBlock().

    [CODE SNIPPET]

    Entonces, ¿qué ocurre aquí? ¿Cómo estamos agregando los bloques? ¿Cómo estamos revisando si el bloque dado es válido o no?

    ¿Recuerdas los contenidos de un bloque? Un bloque tiene el hash del bloque anterior ¿verdad?

    Entonces, lo que haremos aquí es sencillo. Comparar el valor del hash anterior del nuevo bloque con el valor de hash del último bloque.

    How To Become A Blockchain Developer: Cram Session!

    Imagen cortesía de: Lauri Hartikka – Artículo de Medium

    Si estos dos valores coinciden, significa que el nuevo bloque es válido y se agrega a la cadena de bloques.

    • Sección 3: Validando la cadena

    Ahora, necesitamos revisar que nadie ha estado alterando nuestra cadena de bloques y que todo está estable.

    Estamos usando el ciclo “for” desde el bloque 1 hasta el último bloque. El bloque génesis es el bloque 0.

    [CODE SNIPPET]

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

    Usando la cadena de bloques

    Ahora, finalmente vamos a usar la cadena de bloques para crear nuestro BlockGeeksCoin.

    [CODE SNIPPET]

    ¡Y eso es todo!

    ¿Entonces qué ocurre aquí?

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

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

    Es así de sencillo.

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

     

    Eso es todo para esta meta. Veamos los pasos de acción. Es muy sencillo pero definitivamente no es fácil:

    • Educarse en uno de los muchos lenguajes aptos para cadenas de bloques, como C++, JavaScript, C#, Go, etc.

    Meta #4: Educarse en Contratos inteligentes

    How To Become A Blockchain Developer: Cram Session!

    Sell HouseVender casa
    Buy HouseCompra casa
    Match Buyer with Seller

    Exchange

    Contract receives assets

    Contract distributes assets

    Emparejar comprador con vendedor

    Bolsa

    Contrato recibe activos

    Contrato distribuye activos

    RegistryRegistro
    Clearing and settlemente is automatedLa compensación y liquidación son automatizadas
    Ownership is undisputedLa propiedad es indiscutible
    Digitise the Land DeedDigitalización de título de propiedad
    Digitise CurrencyMonedas digitales

    ¿Cómo defines un contrato inteligente?

    Según Wikipedia, un contrato inteligente es “un protocolo de computadoras destinado a facilitar, verificar, o hacer cumplir la negociación o rendimiento de un contrato.” Si bien fue propuesto por primera vez por el criptógrafo americano Nick Szabo en 1996, Ethereum a menudo es acreditado con la popularización del concepto y en generalizarlo.

    Puedes aprender más sobre contratos inteligentes en nuestra guía en profundidad aquí.

    Entonces, ¿cuáles son las propiedades deseables que queremos en nuestro contrato inteligente?

    Cualquier cosa que se ejecute en una cadena de bloques necesita ser inmutable y debe tener la capacidad de ejecutarse a través de múltiples nodos sin comprometer su integridad. Como resultado de esto, la funcionalidad de un contrato inteligente necesita ser tres cosas:

    • Determinística.
    • Terminable.
    • Aislada.

    Característica #1: Determinística

    Un programa es determinístico si siempre da la misma salida a una entrada dada. Por ejemplo, si 3+1 = 4 entonces 3+1 SIEMPRE será 4 (asumiendo la misma base). Entonces, cuando un programa da la misma salida al mismo conjunto de entradas en diferentes computadoras, el programa se llama determinístico.

    Existen varios momentos en los cuales un programa puede actuar de manera no determinística:

    • Llamando a funciones del sistema no determinísticas: Cuando un programador llama a una función no determinística en su programa.
    • Recursos de datos no determinísticos: Si un programa adquiere datos durante el tiempo de ejecución y esa fuente de datos es no determinística entonces el programa se vuelve no determinístico. Por ejemplo, supone que un programa que adquiere las 10 búsquedas más populares de una consulta en particular en Google. La lista puede seguir cambiando.
    • Llamadas dinámicas: Cuando un programa llama a un segundo programa esto se denomina llamada dinámica. Dado que el objetivo de la llamada es determinado solo durante la ejecución, es no determinístico en naturaleza.

    Característica #2: Terminable

    En lógica matemática, tenemos un error llamado el “problema de parada”. Básicamente, indica que existe una incapacidad de saber si un programa puede ejecutar su función en un límite de tiempo. En 1936, Alan Turing dedujo, usando el Argumento de la diagonal de Cantor, que no existe manera de saber si un programa puede finalizar dentro de un límite de tiempo o no.

    Obviamente esto es un problema con los contratos inteligentes porque, los contratos por definición, debes ser capaces de tener una terminación dentro de un límite de tiempo dado. Se tomaron algunas medidas para asegurarse de que exista una manera de “matar” externamente al contrato y no entrar a un bucle infinito que malgastaría recursos:

     

    • Incompletitud de Turing: Una cadena de bloques Incompleta de Turing tendrá una funcionalidad limitada y no será capaz de hacer saltos y/o bucles. Por lo tanto no pueden entrar en un bucle infinito.
    • Medidor de pasos y tarifa: Un programa simplemente puede mantener un seguimiento del número de “pasos” que tomó, es decir, el número de instrucciones que ha ejecutado, y luego terminar una vez que se haya ejecutado un conteo de pasos particular. Otro método es el Medidor de tarifa. Aquí los contratos son ejecutados con una tarifa prepaga. Cada ejecución de instrucción requiere un monto de tarifa particular. Si la tarifa empleada supera la tarifa prepaga entonces el contrato es terminado.
    • Temporizador: Aquí se mantiene un temporizador predeterminado. Si la ejecución del contrato supera el límite de tiempo entonces es abortado externamente.

    Característica #3: Aislada

    En una cadena de bloques, cualquier persona puede cargar un contrato inteligente. Sin embargo, por esta razón, a sabiendas o no, los contratos pueden contener virus y errores. Si el contrato no está aislado, esto puede perjudicar todo el sistema. Por lo tanto, es crítico que un contrato se mantenga contenido en un entorno aislado para salvar todo el ecosistema de cualquier efecto negativo.

    Ahora que hemos visto estas características, es importante saber cómo son ejecutadas. Usualmente los contratos inteligentes son ejecutados usando uno de los dos sistemas:

    • Máquinas virtuales: Ethereum usa esto.
    • Docker: Fabric usa esto.

    Comparemos los dos y determinemos cuál crea un mejor ecosistema. Para simplificar, vamos a comparar Ethereum (Máquina virtual) con Fabric (Docker).

    https://blockgeeks.com/wp-content/uploads/2017/12/p1.png

    Máquinas virtualesDocker
    DeterminísticaLos contratos no tienen funciones no determinísticas y los datos están limitados solo a información en la cadena. Sin embargo, ejecuta llamadas dinámicas que pueden ser de naturaleza no determinística. Afortunadamente los datos accesibles son determinísticos.Por el diseño de Docker, el sistema depende de los usuarios para crear contratos que sean determinísticos. Realmente no es una de las mejores soluciones.
    TerminableEthereum usa el “Medidor de tarifa” para la terminación. Cada paso en los contratos cuesta “gas” y una vez que el costo de gas supera la tarifa prepaga, el contrato es terminado.Fabric usa el temporizador. Sin embargo, dado que el temporizador puede cambiar de nodo a nodo porque cada nodo tiene su propia potencia computacional, existe un riesgo en el proceso de consenso.
    AisladaTiene buenas propiedades de aislamiento.Es dependiente de un espacio de nombres y no es capaz de lograr un aislamiento adecuado.

    Si estás interesado específicamente en el desarrollo de Ethereum entonces es importante que también aprendas Solidity.

    Para cualquiera que quiera aprender cómo desarrollar DAPPs(Aplicaciones descentralizadas) o meterse en el juego de las ICO, es absolutamente necesario aprender Solidity. Ya hemos detallado una guía de esto que puedes leer aquí. Sin embargo, te vamos a dar un resumen básico. Solidity fue desarrollado por Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai y varios contribuidores pasados de Ethereum para permitir la creación de contratos inteligentes en plataformas de cadena de bloques como Ethereum.

    Solidity es un lenguaje deliberadamente compacto, débilmente tipado con una sintaxis similar a ECMAScript (JavaScript). Existen algunos puntos claves a recordar del Documento de diseño de fundamentos de Ethereum, es decir, concretamente que estamos trabajando en un modelo de pila y memoria con un tamaño de palabra de instrucción de 32 bytes, la EVM (Máquina virtual de Ethereum) nos da acceso al programa “pila” que es como un espacio de registro donde también podemos pegar direcciones de memoria para crear bucles/saltos del Contador de programa (para control de programa secuencial), una “memoria” temporal expandible y un “almacenamiento” más permanente que en realidad es escrito en la cadena de bloques permanente, y principalmente, la EVM requiere un determinismo total dentro de los contratos inteligentes.

    Si estás interesado en aprender Solidity puedes revisar nuestra clase en profundidad aquí.

    Entonces, veamos ahora los pasos de acción:

    • Entender cómo funcionan los contratos inteligentes.
    • (Opcional para desarrolladores de Ethereum) Aprender Solidity.

     

    Meta #5: Estar en el ambiente

    Una de las cosas más importantes que puedes hacer como un desarrollador en formación es estar permanentemente en el ambiente.

    Únete a foros de Reddit, páginas de GitHub, y StackExchange e interactúa con otros desarrolladores, y siempre busca noticias sobre la tecnología.

    Junto con eso, será muy útil que conozcas lo que la gente busca en un desarrollador de cadena de bloques. ¿Qué cualidades están buscando las compañías cuando buscan contratar? Puedes encontrar esa información aquí.

    Esta información puede ser muy útil para afinar tus habilidades lo suficiente como para atraer a las compañías.

    Desarrollador de Cadena de bloques: Conclusión

    Entonces, esta es una hoja de ruta aproximada para ti y tu viaje a convertirte en un desarrollador de cadena de bloques. Solo esto no será suficiente, por supuesto, necesitarás mostrar tu propia iniciativa y siempre estar en el ambiente.

    Si estás buscando recursos de información sobre el desarrollo de cadena de bloques haz clic aquí.

    ¡Te deseamos lo mejor en tu viaje!

     

    Like what you read? Give us one like or share it to your friends

    0

    Discussion

    Please to comment

    Join Blockgeeks

    Create an account to access our exclusive point system, get instant notifications for new courses, workshops, free webinars and start interacting with our enthusiastic blockchain community. Don’t miss out and join right now!

    Already have an account? Sign In