{"id":95621,"date":"2022-09-26T06:17:41","date_gmt":"2022-09-26T04:17:41","guid":{"rendered":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/"},"modified":"2020-12-04T20:23:30","modified_gmt":"2020-12-04T23:23:30","slug":"construyendo-tu-propio-blockchain-en-javascript-parte-1","status":"publish","type":"post","link":"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/","title":{"rendered":"Erstellen Sie Ihre eigene Blockchain in JavaScript - Teil 1"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#%C2%BFQue-necesitas\" >\u00bfQu\u00e9 necesitas?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Estructura-de-la-cadena-de-bloques\" >Estructura de la cadena de bloques<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Un-Bloque-como-Objeto\" >Un Bloque como Objeto<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Entradas-de-bloque\" >Entradas de bloque<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Datos-del-bloque\" >Datos del bloque<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Biblioteca-Crypto-JS\" >Biblioteca Crypto-JS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Calcular-Hash\" >Calcular Hash<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Construyendo-la-cadena-de-bloques\" >Construyendo la cadena de bloques<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Objeto-de-cadena-de-bloques\" >Objeto de cadena de bloques<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Funcion-Constructor\" >Funci\u00f3n Constructor<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Crear-funcion-Genesis\" >Crear funci\u00f3n G\u00e9nesis<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Obtener-la-funcion-de-bloqueo-mas-reciente\" >Obtener la funci\u00f3n de bloqueo m\u00e1s reciente<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Anadir-nueva-funcion-de-bloque\" >A\u00f1adir nueva funci\u00f3n de bloque<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Funcion-de-verificacion-de-validez\" >Funci\u00f3n de verificaci\u00f3n de validez<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Poniendo-todo-junto\" >Poniendo todo junto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#Resumiendo\" >Resumiendo<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<div itemprop=\"articleBody\">\n<p>En esta primera parte de la serie <strong>Javascript Blockchain<\/strong>, cubriremos el <em>objeto bloque<\/em> y el <em>objeto blockchain<\/em> y discutiremos su estructura e implicaciones.<\/p>\n<p>Creo firmemente en la idea de que la mejor manera de aprender una tecnolog\u00eda es construirla. Naturalmente, mi inter\u00e9s en la tecnolog\u00eda de las cadenas de bloques me ha llevado a intentar construir mi propia cadena de bloques. Te guiar\u00e9 a trav\u00e9s de los pasos para construir una cadena de bloques b\u00e1sica con un sistema de prueba de trabajo incorporado. En el camino, discutir\u00e9 las implicaciones de las diferentes caracter\u00edsticas.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%C2%BFQue-necesitas\"><\/span>\u00bfQu\u00e9 necesitas?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>La \u00faltima versi\u00f3n de Node.js (Estoy usando v8.7.0)<\/li>\n<li>La \u00faltima versi\u00f3n de npm (Node Package Manager) (Estoy usando v5.6.0)<\/li>\n<\/ul>\n<p>Crea una carpeta llamada <strong>js-blockchain<\/strong> y crea un archivo llamado <strong>main.js<\/strong> En esta gu\u00eda, usaremos un solo archivo para que siempre puedas consultar el c\u00f3digo fuente si encuentras alg\u00fan problema.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Estructura-de-la-cadena-de-bloques\"><\/span>Estructura de la cadena de bloques<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Las cadenas de bloques se construyen mediante una combinaci\u00f3n de listas enlazadas y \u00e1rboles de <em>merkle.<\/em> La estructura de lista enlazada permite que la cadena se construya continuamente sobre s\u00ed misma y es de donde proviene el nombre <strong><em>blockchain.<\/em><\/strong> Una <em>cadena de bloques<\/em> es literalmente una cadena de bloques enlazados entre s\u00ed a trav\u00e9s de la estructura de la lista enlazada. Una cosa a tener en cuenta, sin embargo, es que en lugar de mantener un puntero tradicional para referirse al bloque anterior, utiliza el <em>hash<\/em> del bloque anterior para referirse a \u00e9l.<\/p>\n<p>Si no est\u00e1s familiarizado con lo que es un <em>hash,<\/em> aqu\u00ed tiene un manual. Los Hashes son simplemente funciones determin\u00edsticas que crean salidas espec\u00edficas para cada entrada, y normalmente son irreversibles, lo que significa que es extremadamente dif\u00edcil derivar la entrada de la salida. Son fundamentales para el bloqueo de cadenas, ya que son la clave para que la cadena sea inmutable y para mantener la integridad de los datos.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Un-Bloque-como-Objeto\"><\/span>Un Bloque como Objeto<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Primero crearemos una <strong>clase llamada Block<\/strong> que tendr\u00e1 una funci\u00f3n <strong>constructor<\/strong>, una funci\u00f3n <strong>calculateHash<\/strong> y una funci\u00f3n <strong>mineBlock<\/strong>. Partimos de la funci\u00f3n <strong>constructor<\/strong> que instancia los objetos <strong>Block<\/strong> y le proporciona sus propiedades.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\n&#13;\nclass Block {&#13;\nconstructor(timestamp, data) {&#13;\nthis.index = 0;&#13;\nthis.timestamp = timestamp;&#13;\nthis.data = data;&#13;\nthis.previousHash = \"0\";&#13;\nthis.hash = this.calculateHash();&#13;\nthis.nonce = 0;&#13;\n}&#13;\n&#13;\ncalculateHash() {&#13;\n&#13;\n}&#13;\n&#13;\nmineBlock(difficulty) {&#13;\n&#13;\n}&#13;\n}&#13;\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Entradas-de-bloque\"><\/span>Entradas de bloque<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Cada objeto de bloque toma una marca de tiempo y datos de bloque. La marca de tiempo muestra cu\u00e1ndo se cre\u00f3 el bloque. Esto es \u00fatil, por ejemplo, en <strong>Bitcoin(BTC),<\/strong> ya que <strong>BTC<\/strong> est\u00e1 dise\u00f1ado para tener una dificultad tal que el tiempo medio de extracci\u00f3n por bloque es de 10 minutos. Por lo tanto, el sistema puede utilizar estos datos de fecha y hora para reequilibrar la dificultad de la miner\u00eda cada mes. Los datos del bloque contienen la informaci\u00f3n almacenada en la cadena. En muchas monedas como <strong>BTC,<\/strong> aqu\u00ed es donde se almacenan los datos variables en forma de \u00e1rboles de <strong>merkle.<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Datos-del-bloque\"><\/span>Datos del bloque<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Como puedes ver, adem\u00e1s de los 3 campos de entrada de datos, nuestro <strong>objeto Block<\/strong> tambi\u00e9n contiene un <em>\u00edndice,<\/em> un <em>hash<\/em> anterior, un <em>hash<\/em> y un <em>nonce.<\/em> El \u00edndice comunica en qu\u00e9 lugar de la cadena se encuentra el bloque. El <em>hash<\/em> del bloque anterior es lo que mantiene la integridad de la cadena. El hash del bloque simplemente contiene el propio hash del bloque derivado de una funci\u00f3n <strong>calculateHash.<\/strong> El <strong>nonce<\/strong> es otra pieza importante del bloque que es cr\u00edtica para construir un mecanismo de miner\u00eda para nuestra cadena de bloques que discutiremos en la parte 2:\u00a0Construyendo tu propio Blockchain en JavaScript \u2013 Parte 2 de esta serie. Por ahora, pondremos nuestra variable <strong>nonce<\/strong> en <strong>0<\/strong>.<\/p>\n<p>Ten en cuenta, el hash del bloque anterior es lo que mantiene la integridad de la cadena. Para comprobar la integridad de la cadena pasamos por la cadena calculando el hash de cada bloque y cotej\u00e1ndolo con los datos de Hash anteriores. Si se altera una sola pieza de la informaci\u00f3n del bloque, se escupir\u00e1 un hash completamente diferente y ser\u00e1 inmediatamente detectable cuando se comparen con los <strong>datos de los Hash<\/strong> anteriores almacenados en el bloque que sigue al bloque alterado. M\u00e1s adelante crearemos una funci\u00f3n <strong>checkValid<\/strong> que lo demuestre.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Biblioteca-Crypto-JS\"><\/span>Biblioteca Crypto-JS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora a\u00f1adiremos una funci\u00f3n <strong>calculateHash<\/strong> a nuestro bloque. Para nuestra funci\u00f3n <strong>hash,<\/strong> tomaremos prestado de la biblioteca <strong>crypto-js<\/strong> y usaremos su funci\u00f3n <strong>hash SHA256<\/strong>. La funci\u00f3n de<strong> hash SHA256<\/strong> fue desarrollada por la <strong>NSA<\/strong> y es una funci\u00f3n de <strong>hash<\/strong> irreversible. Esto se utiliza en la miner\u00eda de <strong>BTC<\/strong> como su algoritmo de prueba de trabajo y en la creaci\u00f3n de direcciones de <strong>BTC<\/strong> gracias a su seguridad.<\/p>\n<p>Para instalar la librer\u00eda <strong>crypto-js,<\/strong> ve a tu terminal e ingresa a tu carpeta <strong>js-blockchain<\/strong> y luego instala la librer\u00eda con <strong>npm<\/strong> con el siguiente c\u00f3digo:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nnpm install --save crypto-js&#13;\n<\/pre>\n<p>A continuaci\u00f3n, ver\u00e1s el siguiente mensaje:<\/p>\n<p><code>npm WARN saveError ENOENT: no such file or directory, open '\/Users\/spenserhuang\/Desktop\/js-blockchain\/package.json'<br \/>npm WARN enoent ENOENT: no such file or directory, open '\/Users\/spenserhuang\/Desktop\/js-blockchain\/package.json'<br \/>npm WARN js-blockchain No description<br \/>npm WARN js-blockchain No repository field.<br \/>npm WARN js-blockchain No README data<br \/>npm WARN js-blockchain No license field.<\/code><\/p>\n<p>+ crypto-js@3.1.9-1<br \/>updated 1 package in 1.75s<\/p>\n<p>No te preocupes por la advertencia por ahora ya que eso no nos afectar\u00e1 en el contexto de este proyecto. El error existe porque la carpeta que creamos es extremadamente baronesa y no tiene archivos adicionales como <strong>package.json<\/strong> u otros archivos de nodos y repositorios.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Calcular-Hash\"><\/span>Calcular Hash<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sin embargo, ahora que tienes la librer\u00eda instalada, puedes crear una constante <strong>SHA256<\/strong> y extraer la informaci\u00f3n directamente con una sentencia <strong>require.<\/strong> Usaremos eso para crear nuestra funci\u00f3n <strong>calculateHash.<\/strong><\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nconst SHA256 = require('crypto-js\/sha256')&#13;\n&#13;\nclass Block {&#13;\nconstructor(timestamp, data) {&#13;\nthis.index = 0;&#13;\nthis.timestamp = timestamp;&#13;\nthis.data = data;&#13;\nthis.previousHash = \"0\";&#13;\nthis.hash = this.calculateHash();&#13;\nthis.nonce = 0;&#13;\n}&#13;\n&#13;\ncalculateHash() {&#13;\nreturn SHA256(this.index + this.previousHash + this.timestamp + this.data + this.nonce).toString();&#13;\n}&#13;\n&#13;\nmineBlock(difficulty) {&#13;\n&#13;\n}&#13;\n}&#13;\n<\/pre>\n<p>Creamos nuestra propia funci\u00f3n llamada <strong>calculateHash<\/strong> que usaremos para dar a cada bloque su propio <strong>hash.<\/strong> Como puede ver con la funci\u00f3n, el hash toma cada pieza del objeto del bloque, la lanza a una funci\u00f3n <strong>SHA256<\/strong> y la convierte en una cadena. En este proyecto, convertimos nuestro resultado <strong>SHA256<\/strong> en una cadena, ya que las cadenas son m\u00e1s f\u00e1ciles de procesar y combinar.<\/p>\n<p>La funci\u00f3n <strong>calculateHash<\/strong> acepta <strong>CADA<\/strong> parte de los datos del bloque. Como resultado, si cualquier pieza de datos es manipulada, incluso si es un nuevo punto decimal, el hash del bloque ser\u00e1 inmediatamente diferente. Esta es una gran caracter\u00edstica para hacer que la cadena de bloqueo sea segura.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Construyendo-la-cadena-de-bloques\"><\/span>Construyendo la cadena de bloques<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora que hemos creado la estructura de bloques individual, necesitamos crear una estructura, un <strong>objeto de clase Blockchain<\/strong>, para enlazarlos y construir la funcionalidad b\u00e1sica que viene con los bloques normales. Para que las cosas sean lo m\u00e1s sencillas posible, nuestra cadena de bloques s\u00f3lo tendr\u00e1 una <strong>funci\u00f3n constructor<\/strong>, una <strong>funci\u00f3n createGenesis,<\/strong> una <strong>funci\u00f3n latestBlock,<\/strong> una <strong>funci\u00f3n addBlock<\/strong> y una <strong>funci\u00f3n checkValid.<\/strong><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Objeto-de-cadena-de-bloques\"><\/span>Objeto de cadena de bloques<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nuestra clase <strong>Blockchain<\/strong> necesita algunas funcionalidades clave, a saber, la capacidad de ser instanciado, de empezar, de acceder a la informaci\u00f3n del bloque m\u00e1s reciente y de extenderse a\u00f1adi\u00e9ndole un nuevo bloque.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nclass Blockchain{&#13;\nconstructor() {&#13;\nthis.chain = [this.createGenesis()];&#13;\n}&#13;\n&#13;\ncreateGenesis() {&#13;\nreturn new Block(0, \"01\/01\/2017\", \"Genesis block\", \"0\")&#13;\n}&#13;\n&#13;\nlatestBlock() {&#13;\nreturn this.chain[this.chain.length - 1]&#13;\n}&#13;\n&#13;\naddBlock(newBlock){&#13;\nnewBlock.previousHash = this.latestBlock().hash;&#13;\nnewBlock.hash = newBlock.calculateHash();&#13;\nthis.chain.push(newBlock);&#13;\n}&#13;\n&#13;\ncheckValid() {&#13;\nfor(let i = 1; i &lt; this.chain.length; i++) {&#13;\nconst currentBlock = this.chain[i];&#13;\nconst previousBlock = this.chain[i - 1];&#13;\n&#13;\nif (currentBlock.hash !== currentBlock.calculateHash()) {&#13;\nreturn false;&#13;\n}&#13;\n&#13;\nif (currentBlock.previousHash !== previousBlock.hash) {&#13;\nreturn false;&#13;\n}&#13;\n}&#13;\n&#13;\nreturn true;&#13;\n}&#13;\n}&#13;\n<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Funcion-Constructor\"><\/span>Funci\u00f3n Constructor<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Primero, necesitamos una funci\u00f3n de <strong>constructor<\/strong> para instanciar nuestra cadena de bloques. Esta ser\u00e1 una funci\u00f3n simple que simplemente crea un objeto de bloqueo con la propiedad <strong>chain<\/strong> en una estructura de lista. Esta es la raz\u00f3n por la que nuestros objetos <strong>Block<\/strong> ten\u00edan \u00edndices. Las propiedades de \u00edndice de nuestros bloques se utilizan para encontrar su posici\u00f3n en nuestra lista de cadenas.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Crear-funcion-Genesis\"><\/span>Crear funci\u00f3n G\u00e9nesis<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>En segundo lugar, nuestra cadena de bloques necesita una funci\u00f3n <strong>createGenesis<\/strong> que crea el primer bloque de nuestra cadena. En la convenci\u00f3n de la cadena de bloques, el primer bloque de cualquier cadena tambi\u00e9n se conoce como el <em>\u00abbloque G\u00e9nesis\u00bb<\/em>, de ah\u00ed el nombre <strong>createGenesis.<\/strong> Con este bloque, normalmente introducimos manualmente su informaci\u00f3n. Como es el primer bloque de la cadena, tiene un valor de \u00edndice de 0. Para su marca de tiempo y campos de datos, podemos poner la fecha de hoy y el<em> \u00abbloque G\u00e9nesis\u00bb<\/em> o lo que quieras. Al igual que en el campo<strong> Hash<\/strong> anterior, podemos simplemente poner <em>\u00ab0\u00bb<\/em> por ahora ya que no hay ning\u00fan hash precediendo al bloque G\u00e9nesis.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Obtener-la-funcion-de-bloqueo-mas-reciente\"><\/span>Obtener la funci\u00f3n de bloqueo m\u00e1s reciente<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Tercero, nuestra cadena necesita una funci\u00f3n <strong>latestBlock.<\/strong> Se utiliza para obtener informaci\u00f3n sobre el bloque m\u00e1s reciente. Esta funcionalidad se utilizar\u00e1 para implementar nuestra funci\u00f3n <strong>addBlock.<\/strong><\/p>\n<h4><span class=\"ez-toc-section\" id=\"Anadir-nueva-funcion-de-bloque\"><\/span>A\u00f1adir nueva funci\u00f3n de bloque<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>En cuarto lugar, para ampliar continuamente nuestro bloque, necesitamos una funci\u00f3n <strong>addBlock.<\/strong> Las cadenas de bloques tienen una funcionalidad tal que necesitan ser cada vez m\u00e1s largas a medida que se introduce m\u00e1s informaci\u00f3n en ellas. As\u00ed, en el caso de BTC, por ejemplo, se crea un nuevo bloque cada 10 minutos aproximadamente y cada uno de estos nuevos bloques contendr\u00e1 toda la informaci\u00f3n de la transacci\u00f3n que ocurri\u00f3 dentro de ese per\u00edodo de tiempo de 10 minutos.<\/p>\n<p>La implementaci\u00f3n de una funci\u00f3n <strong>addBlock<\/strong> es sencilla. Nuestra funci\u00f3n toma un objeto <strong>Block<\/strong> como una entrada que ya posee una marca de tiempo y datos. Luego, nuestra funci\u00f3n <strong>addBlock<\/strong> usar\u00e1 la funci\u00f3n <strong>latestBlock<\/strong> para dar a nuestro nuevo bloque un \u00edndice y un campo <strong>Hash<\/strong> anterior. Despu\u00e9s de eso, le damos a nuestro nuevo bloque su propio <strong>hash<\/strong> usando la funci\u00f3n <strong>calculateHash<\/strong> que escribimos anteriormente. Finalmente, empujamos este nuevo bloque sobre nuestra cadena y ahora nuestra cadena de bloques tiene un nuevo bloque.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Funcion-de-verificacion-de-validez\"><\/span>Funci\u00f3n de verificaci\u00f3n de validez<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>La funci\u00f3n final que implementaremos es la funci\u00f3n <strong>checkValid.<\/strong> Esto se utiliza para comprobar la integridad de la cadena de bloqueo y para detectar si se ha manipulado algo.<\/p>\n<p>Como se ha dicho anteriormente, los <strong>hashes<\/strong> son cr\u00edticos para detectar cambios en nuestra cadena de bloques, ya que incluso el cambio m\u00e1s peque\u00f1o en el objeto dar\u00e1 como resultado un <strong>hash<\/strong> completamente diferente. Por lo tanto, para nuestra funci\u00f3n <strong>checkValid,<\/strong> usaremos un bucle <strong>for<\/strong> para pasar a trav\u00e9s de la cadena de bloques e intentaremos hacer coincidir sus <strong>hashes<\/strong> para detectar cambios.<\/p>\n<p>Hay dos partes de nuestro bucle, la primera es hacer coincidir <strong>currentBlock.hash<\/strong> con <strong>currentBlock.calculateHash()<\/strong> y la otra es hacer coincidir <strong>currentBlock.previousHash<\/strong> con <strong>previousBlock.hash.<\/strong> La primera se utiliza para comprobar si la informaci\u00f3n de <strong>currentBlock<\/strong> ha sido manipulada sin actualizar <strong>currentBlock.hash<\/strong> La segunda se utiliza para comprobar si se ha manipulado o no un bloque anterior.<\/p>\n<p>Puedes tener la pregunta de si puede o no poner en la condici\u00f3n de if<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nif (currentBlock.previousHash !== previousBlock.calculateHash()) {&#13;\nreturn false;&#13;\n}&#13;\n<\/pre>\n<p>Esto te\u00f3ricamente parece que deber\u00eda funcionar. Sin embargo, <strong>previousBlock<\/strong> es en realidad un objeto ligeramente diferente al objeto de bloque real de la cadena, aunque b\u00e1sicamente contiene toda la misma informaci\u00f3n que el bloque real. Como resultado, producen diferentes hashes. Por ejemplo, durante mi prueba, el hash del bloque real es <strong>0c27196c36691e915fb2a2f83e63867ec5042abfda4832b02383a6ab40aaa075c\u00a0<\/strong>mientras que el hash del bloque anterior es <strong>e6a312951e9e4ed6e4b2ef049246b282f7114459993939ff6a5b97b0c53c941295<\/strong><br \/>As\u00ed de sensibles son los hashes.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Poniendo-todo-junto\"><\/span>Poniendo todo junto<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora, tu c\u00f3digo en general deber\u00eda verse as\u00ed:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nconst SHA256 = require('crypto-js\/sha256')&#13;\n&#13;\nclass Block {&#13;\nconstructor(timestamp, data) {&#13;\nthis.index = 0;&#13;\nthis.timestamp = timestamp;&#13;\nthis.data = data;&#13;\nthis.previousHash = \"0\";&#13;\nthis.hash = this.calculateHash();&#13;\nthis.nonce = 0;&#13;\n}&#13;\n&#13;\ncalculateHash() {&#13;\nreturn SHA256(this.index + this.previousHash + this.timestamp + this.data + this.nonce).toString();&#13;\n}&#13;\n&#13;\nmineBlock(difficulty) {&#13;\n&#13;\n}&#13;\n}&#13;\n&#13;\nclass Blockchain{&#13;\nconstructor() {&#13;\nthis.chain = [this.createGenesis()];&#13;\n}&#13;\n&#13;\ncreateGenesis() {&#13;\nreturn new Block(0, \"01\/01\/2017\", \"Genesis block\", \"0\")&#13;\n}&#13;\n&#13;\nlatestBlock() {&#13;\nreturn this.chain[this.chain.length - 1]&#13;\n}&#13;\n&#13;\naddBlock(newBlock){&#13;\nnewBlock.previousHash = this.latestBlock().hash;&#13;\nnewBlock.hash = newBlock.calculateHash();&#13;\nthis.chain.push(newBlock);&#13;\n}&#13;\n&#13;\ncheckValid() {&#13;\nfor(let i = 1; i &lt; this.chain.length; i++) {&#13;\nconst currentBlock = this.chain[i];&#13;\nconst previousBlock = this.chain[i - 1];&#13;\n&#13;\nif (currentBlock.hash !== currentBlock.calculateHash()) {&#13;\nreturn false;&#13;\n}&#13;\n&#13;\nif (currentBlock.previousHash !== previousBlock.hash) {&#13;\nreturn false;&#13;\n}&#13;\n}&#13;\n&#13;\nreturn true;&#13;\n}&#13;\n}&#13;\n&#13;\nlet jsChain = new Blockchain();&#13;\njsChain.addBlock(new Block(\"12\/25\/2017\", {amount: 5}));&#13;\njsChain.addBlock(new Block(\"12\/26\/2017\", {amount: 10}));&#13;\n&#13;\nconsole.log(JSON.stringify(jsChain, null, 4));&#13;\nconsole.log(\"Is blockchain valid? \" + jsChain.checkValid());&#13;\n<\/pre>\n<p>Puede probar su cadena de bloqueo a\u00f1adiendo las siguientes l\u00edneas al final<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">&#13;\nlet jsChain = new Blockchain();&#13;\njsChain.addBlock(new Block(\"12\/25\/2017\", {amount: 5}));&#13;\njsChain.addBlock(new Block(\"12\/26\/2017\", {amount: 10}));&#13;\n&#13;\nconsole.log(JSON.stringify(jsChain, null, 4));&#13;\nconsole.log(\"Is blockchain valid? \" + jsChain.checkValid());&#13;\n<\/pre>\n<p>Luego, ve a su terminal y corre<\/p>\n<p><code>node main.js<\/code><\/p>\n<p>Ahora deber\u00edas ver el siguiente mensaje:<\/p>\n<p><code>{<br \/>\"chain\": [<br \/>{<br \/>\"index\": 0,<br \/>\"timestamp\": 0,<br \/>\"data\": \"01\/01\/2017\",<br \/>\"previousHash\": \"Genesis block\",<br \/>\"hash\": \"8163cbd8feafd38a96cd193f2b44940473c22b21ddbb7445bd99ee310dac28ae\",<br \/>\"nonce\": 0<br \/>},<br \/>{<br \/>\"index\": 1,<br \/>\"timestamp\": \"12\/25\/2017\",<br \/>\"data\": {<br \/>\"amount\": 5<br \/>},<br \/>\"previousHash\": \"8163cbd8feafd38a96cd193f2b44940473c22b21ddbb7445bd99ee310dac28ae\",<br \/>\"hash\": \"744ce201216f78bba5b87e371579898b97e473ac644d6a13ddda9cdbe05100f6\",<br \/>\"nonce\": 0<br \/>},<br \/>{<br \/>\"index\": 2,<br \/>\"timestamp\": \"12\/26\/2017\",<br \/>\"data\": {<br \/>\"amount\": 10<br \/>},<br \/>\"previousHash\": \"744ce201216f78bba5b87e371579898b97e473ac644d6a13ddda9cdbe05100f6\",<br \/>\"hash\": \"9e3cf69ee7a3f3f651b33500ea3f32ccf1a13590115c6739dda74920d54702c8\",<br \/>\"nonce\": 0<br \/>}<br \/>]}<br \/>Is blockchain valid? true<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Resumiendo\"><\/span>Resumiendo<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ahora t\u00fa tiene una versi\u00f3n 1 de una cadena de bloqueo en funcionamiento. Sin embargo, hay un peque\u00f1o problema de seguridad que existe con esta cadena de bloqueo. Te animo a que construyas una cadena de bloques como esta y la pruebes. Intenta identificar d\u00f3nde est\u00e1 el fallo de seguridad intentando manipular los datos.<\/p>\n<p><strong>Sugerencia:<\/strong> este fallo de seguridad est\u00e1 directamente relacionado con la implementaci\u00f3n de la funci\u00f3n minera que trataremos en la Parte 2\u00a0Construyendo tu propio Blockchain en JavaScript \u2013 Parte 2 de este tutorial.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>En esta primera parte de la serie Javascript Blockchain, cubriremos el objeto bloque y el objeto blockchain y discutiremos su estructura e implicaciones. Creo firmemente en la idea de que&#8230;<\/p>","protected":false},"author":1,"featured_media":95622,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1374],"tags":[],"class_list":["post-95621","post","type-post","status-publish","format-standard","has-post-thumbnail","category-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.0 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Construyendo tu propio Blockchain en JavaScript -Parte 1 - R Marketing Digital<\/title>\n<meta name=\"description\" content=\"En esta primera parte de la serie Javascript Blockchain, cubriremos el objeto bloque y el objeto blockchain y discutiremos su estructura e implicaciones.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construyendo tu propio Blockchain en JavaScript -Parte 1\" \/>\n<meta property=\"og:description\" content=\"En esta primera parte de la serie Javascript Blockchain, cubriremos el objeto bloque y el objeto blockchain y discutiremos su estructura e implicaciones.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/\" \/>\n<meta property=\"og:site_name\" content=\"R Marketing Digital\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-26T04:17:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"R Marketing Digital\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/\"},\"author\":{\"name\":\"R Marketing Digital\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"headline\":\"Construyendo tu propio Blockchain en JavaScript -Parte 1\",\"datePublished\":\"2022-09-26T04:17:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/\"},\"wordCount\":1973,\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg\",\"articleSection\":[\"Javascript\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/\",\"name\":\"Construyendo tu propio Blockchain en JavaScript -Parte 1 - R Marketing Digital\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg\",\"datePublished\":\"2022-09-26T04:17:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\"},\"description\":\"En esta primera parte de la serie Javascript Blockchain, cubriremos el objeto bloque y el objeto blockchain y discutiremos su estructura e implicaciones.\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/javascript\\\/construyendo-tu-propio-blockchain-en-javascript-parte-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg\",\"contentUrl\":\"https:\\\/\\\/rmarketingdigital.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg\",\"width\":1500,\"height\":900,\"caption\":\"what-is-the-blockchain-and-why-is-it-so-important-8589524-1630587-jpg\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#website\",\"url\":\"https:\\\/\\\/rmarketingdigital.com\\\/\",\"name\":\"R Marketing Digital\",\"description\":\"Agencia SEO | Publicidad redes sociales | Community Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rmarketingdigital.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/rmarketingdigital.com\\\/#\\\/schema\\\/person\\\/7c0d9782b2977b840b3740f00c69a73e\",\"name\":\"R Marketing Digital\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g\",\"caption\":\"R Marketing Digital\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Erstellen Sie Ihre eigene Blockchain in JavaScript \u2013 Teil 1 \u2013 R Marketing Digital","description":"In diesem ersten Teil der Javascript Blockchain-Reihe werden wir das Blockobjekt und das Blockchain-Objekt behandeln und ihre Struktur und Auswirkungen diskutieren.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/","og_locale":"de_DE","og_type":"article","og_title":"Construyendo tu propio Blockchain en JavaScript -Parte 1","og_description":"En esta primera parte de la serie Javascript Blockchain, cubriremos el objeto bloque y el objeto blockchain y discutiremos su estructura e implicaciones.","og_url":"https:\/\/rmarketingdigital.com\/de\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/","og_site_name":"R Marketing Digital","article_published_time":"2022-09-26T04:17:41+00:00","og_image":[{"width":1500,"height":900,"url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg","type":"image\/jpeg"}],"author":"R Marketing Digital","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#article","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/"},"author":{"name":"R Marketing Digital","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"headline":"Construyendo tu propio Blockchain en JavaScript -Parte 1","datePublished":"2022-09-26T04:17:41+00:00","mainEntityOfPage":{"@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/"},"wordCount":1973,"image":{"@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg","articleSection":["Javascript"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/","url":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/","name":"Erstellen Sie Ihre eigene Blockchain in JavaScript \u2013 Teil 1 \u2013 R Marketing Digital","isPartOf":{"@id":"https:\/\/rmarketingdigital.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#primaryimage"},"image":{"@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#primaryimage"},"thumbnailUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg","datePublished":"2022-09-26T04:17:41+00:00","author":{"@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e"},"description":"In diesem ersten Teil der Javascript Blockchain-Reihe werden wir das Blockobjekt und das Blockchain-Objekt behandeln und ihre Struktur und Auswirkungen diskutieren.","inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/rmarketingdigital.com\/javascript\/construyendo-tu-propio-blockchain-en-javascript-parte-1\/#primaryimage","url":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg","contentUrl":"https:\/\/rmarketingdigital.com\/wp-content\/uploads\/2020\/12\/what-is-the-blockchain-and-why-is-it-so-important-8589524.jpg","width":1500,"height":900,"caption":"what-is-the-blockchain-and-why-is-it-so-important-8589524-1630587-jpg"},{"@type":"WebSite","@id":"https:\/\/rmarketingdigital.com\/#website","url":"https:\/\/rmarketingdigital.com\/","name":"R Digitales Marketing","description":"SEO Agentur | Werbung f\u00fcr soziale Netzwerke | Community Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rmarketingdigital.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/rmarketingdigital.com\/#\/schema\/person\/7c0d9782b2977b840b3740f00c69a73e","name":"R Digitales Marketing","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c5599c203e0120b8ccbff4666af86f35f9b3dcad468a8bc6295313a3964a80be?s=96&d=mm&r=g","caption":"R Marketing Digital"}}]}},"_links":{"self":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/95621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/comments?post=95621"}],"version-history":[{"count":0,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/posts\/95621\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media\/95622"}],"wp:attachment":[{"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/media?parent=95621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/categories?post=95621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rmarketingdigital.com\/de\/wp-json\/wp\/v2\/tags?post=95621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}