{"id":640,"date":"2018-10-31T17:35:45","date_gmt":"2018-10-31T23:35:45","guid":{"rendered":"http:\/\/www.jacobsoft.com.mx\/?p=640"},"modified":"2025-02-20T13:37:50","modified_gmt":"2025-02-20T19:37:50","slug":"la-tecnologia-blockchain","status":"publish","type":"post","link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/la-tecnologia-blockchain\/","title":{"rendered":"La Tecnolog\u00eda Blockchain"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">La Tecnolog\u00eda Blockchain<\/h2>\n\n\n\n<p>Podemos decir que blockchain es la tecnolog\u00eda del <strong>bitcoin <\/strong>y otras criptomonedas, pero \u00e9stas son s\u00f3lo una parte de todo el espectro que abarca tanto el concepto como la tecnolog\u00eda.<\/p>\n\n\n\n<p>La tecnolog\u00eda realmente tiene sus or\u00edgenes en 1991, cuando Stuart Haber y W. Scott Stornetta describieron el primer proceso sobre una cadena de bloques asegurados <strong>criptogr\u00e1ficamente<\/strong>, m\u00e1s adelante, en 2008 se empez\u00f3 a ser popular con la llegada del <strong>bitcoin <\/strong>y hoy en d\u00eda la demanda de esta tecnolog\u00eda esta abarcando otros escenarios como las aplicaciones comerciales, lo cual predice un crecimiento anual del 51% para el 2022 en varios mercados, como el sector financiero y el internet de las cosas (IoT) entre otros de acuerdo con publicaciones de <a href=\"https:\/\/www.marketwatch.com\/press-release\/blockchain-technology-market-2018-global-analysis-industry-size-share-leaders-current-status-by-major-key-vendors-and-trends-by-forecast-to-2022-2018-08-01\" target=\"_blank\" rel=\"noreferrer noopener\">MarketWatch<\/a>.<\/p>\n\n\n\n<p>En 2008, un art\u00edculo titulado <a href=\"https:\/\/bitcoin.org\/bitcoin.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Bitcoin: un sistema de dinero electr\u00f3nico peer-to-peer<\/a> fue publicado por Satoshi Nakamoto. El art\u00edculo describe la combinaci\u00f3n de t\u00e9cnicas criptogr\u00e1ficas y de una red peer-to-peer sin necesidad de confiar en una autoridad centralizada (como lo hacen los bancos) para realizar pagos de una persona a otra. <\/p>\n\n\n\n<p>El mismo art\u00edculo introduce un sistema distribuido para almacenar informaci\u00f3n (ahora llamado \u201cblockchain\u201d), que tiene un campo de aplicaci\u00f3n mucho m\u00e1s amplio que \u00fanicamente pagos o criptomonedas.<\/p>\n\n\n\n<p>Desde entonces, el inter\u00e9s por el blockchain ha crecido pr\u00e1cticamente en todos los sectores. Por lo que Blockchain es ahora la tecnolog\u00eda debajo de las criptomonedas completamente digitales como Bitcoin, tecnolog\u00edas de computaci\u00f3n distribuida como <strong>Ethereum<\/strong>, y frameworks de c\u00f3digo abierto como <strong>Hyperledger Fabric<\/strong>, sobre el cual est\u00e1 montada la<strong> IBM Blockchain Platform<\/strong>.<\/p>\n\n\n\n<p>El t\u00e9rmino Blockchain hace referencia a una cadena de bloques que establecen un registro <strong>\u00fanico<\/strong>, <strong>consensuado <\/strong>y <strong>distribuido <\/strong>en varios nodos de una red. Para el caso de las criptomonedas, podr\u00eda decirse que es la bitacora contable donde se registran todas las transacciones. Es decir, en cada bloque se almacena:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Una cantidad de registros o transacciones v\u00e1lidas<\/li><li>Informaci\u00f3n referente a ese bloque<\/li><li>Su vinculaci\u00f3n con el bloque anterior y el bloque siguiente<\/li><\/ul>\n\n\n\n<p>Cada bloque tiene un identificador \u00fanico del tipo <strong>hash <\/strong>que representa la huella digital del bloque.<\/p>\n\n\n\n<p>En este sentido, cada bloque tiene un lugar espec\u00edfico e <strong>inamovible <\/strong>dentro de la cadena, ya que en cada bloque existe informaci\u00f3n del hash del bloque anterior, y el propio ligado al posterior. <\/p>\n\n\n\n<p>La cadena completa se guarda en cada nodo de la red que conforma el blockchain, se almacena una copia exacta de la cadena en <strong>todos <\/strong>los nodos participantes de la red.<\/p>\n\n\n\n<p>A medida que se crean nuevas transacciones o registros, estos son <strong>verificados <\/strong>y <strong>validados <\/strong>por los nodos de la red y posteriormente a\u00f1adidos a un nuevo bloque que se enlaza a la cadena.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"711\" height=\"220\" src=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_esquema.png\" alt=\"\" class=\"wp-image-643\" srcset=\"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_esquema.png 711w, https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_esquema-300x93.png 300w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><figcaption>Esquema de la cadena de bloques<\/figcaption><\/figure><\/div>\n\n\n\n<p>Dado que es una tecnolog\u00eda <strong>distribuida <\/strong>donde cada nodo de la red almacena una copia exacta de la cadena, la <strong>disponibilidad <\/strong>de la informaci\u00f3n esta garantizada en todo momento. Si un nodo de la red sufre aver\u00edas o ataques, la informaci\u00f3n esta disponible en los dem\u00e1s nodos.<\/p>\n\n\n\n<p>La <strong>integridad <\/strong>de la informaci\u00f3n tambi\u00e9n est\u00e1 asegurada dado que al ser un registro <strong>consensuado<\/strong>, todos los nodos contienen la misma informaci\u00f3n y para alterar la informaci\u00f3n ser\u00eda necesario que se modificara en la cadena completa o en al menos el 51% de los nodos.<\/p>\n\n\n\n<p>Al mismo tiempo, dado que cada bloque esta vinculado al bloque siguiente, una vez que se agrega uno nuevo a la cadena, el mismo se vuelve <strong>inalterable<\/strong>, si un bloque se modificara, su relaci\u00f3n con la cadena se rompe, por lo tanto, toda la informaci\u00f3n registrada en los bloques es <strong>inmutable <\/strong>y <strong>perpetua<\/strong>.<\/p>\n\n\n\n<p>En este sentido, blockchain permite almacenar informaci\u00f3n que jam\u00e1s se podr\u00e1 <strong><em>perder, modificar o eliminar<\/em><\/strong>.<\/p>\n\n\n\n<p>En cada nodo de la red se utilizan certificados y firmas digitales para verificar la informaci\u00f3n y validar las transacciones, as\u00ed como los datos almacenados en la cadena, permitiendo as\u00ed, asegurar la <strong>autenticidad<\/strong> de la informaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usos de Blockchain<\/h3>\n\n\n\n<p>Blockchain puede ser utilizado para certificar y validad cualquier tipo de informaci\u00f3n, as\u00ed como almacenar documentos importantes, como escrituras sin depender de terceros.<\/p>\n\n\n\n<p>En general, cualquier tipo de informaci\u00f3n que necesite ser preservada de forma intacta y que deba permanecer disponible de manera segura, descentralizada y m\u00e1s econ\u00f3mica que a trav\u00e9s de intermediarios. Si dicha informaci\u00f3n se guarda cifrada se puede garantizar su confidencialidad ya que s\u00f3lo quienes cuenten con la llave de cifrado podr\u00e1n acceder a ella.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sector salud<\/h3>\n\n\n\n<p>Los registros de salud podr\u00edan estar unificados y almacenado en blockchain para que el historial m\u00e9dico de los pacientes se mantenga seguro y al mismo tiempo disponible para cada m\u00e9dico autorizado, independientemente del servicio de salud.<\/p>\n\n\n\n<p>La industria farmac\u00e9utica podr\u00eda utilizar blockchain para validar y verificar medicamentos y con ello evitar falsificaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Internet de las Cosas (IoT)<\/h3>\n\n\n\n<p>El reto para blockchain recae en los millones de dispositivos conectados a Internet dado que el modelo centralizado no va a soportar la cantidad de dispositivos que cada vez va en aumento. Con blockchain los dispositivos pueden comunicarse a trav\u00e9s de la red de manera segura, directa y confiable, sin intermediarios.<\/p>\n\n\n\n<p>Como se ha mencionado anteriormente, <strong>Blockchain<\/strong> permite verificar, validar, rastrear y almacenar todo tipo de informaci\u00f3n, desde certificados digitales, servicios de log\u00edstica y mensajer\u00eda, contratos inteligentes, dinero, transacciones financieras, as\u00ed como sistemas de elecciones democr\u00e1ticas, entre otros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Blockchain Council<\/h2>\n\n\n\n<p>El Consejo Blockchain (Blockchain Council) es un grupo autorizado de expertos y entusiastas cuya labor es promover la investigaci\u00f3n, el desarrollo y evangelizar sobre los casos de uso, productos y conocimientos relacionados con la tecnolog\u00eda <strong>Blockchain<\/strong> para lograr un mundo mejor.<\/p>\n\n\n\n<p>La tecnolog\u00eda Blockchain est\u00e1 surgiendo r\u00e1pidamente con un amplio alcance en el futuro. <\/p>\n\n\n\n<p>Blockchain act\u00faa como una red financiera, un software, un libro mayor distribuido, etc. Debido a esta gran variedad de beneficios y caracter\u00edsticas, las empresas ahora est\u00e1n cambiando su sistema de trabajo centralizado y tradicional a esta tecnolog\u00eda futurista.<\/p>\n\n\n\n<p>El consejo de Blockchain crea un entorno y crea conciencia entre las empresas, los desarrolladores y la sociedad al educarlos en los temas de Blockchain.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Programaci\u00f3n para Blockchain<\/h3>\n\n\n\n<p>El blockchain council tiene varios <a href=\"https:\/\/click.linksynergy.com\/fs-bin\/click?id=cTjR400Zjac&amp;offerid=586002.11&amp;subid=0&amp;type=4\" target=\"_blank\" rel=\"noreferrer noopener\">cursos y certificaciones<\/a> interesantes para desarrollar aplicaciones para blockchain, incluso hay tutoriales para desarrollar e implementar un blockchain p\u00fablico desde cero con una aplicaci\u00f3n simple para desplegarlo.<\/p>\n\n\n\n<p>Crear puntos de acceso para diferentes funciones del blockchain, como agregar una transacci\u00f3n utilizando el microframework Flask, ejecutar los programas en m\u00faltiples m\u00e1quinas para crear una red descentralizada. En los ejemplos se presenta tambi\u00e9n el desarrollo de una interfaz de usuario para interactuar con el blockchain y almacenar informaci\u00f3n para cualquier uso como pagos, peer-to-peer, conversaciones, comercio electr\u00f3nico, etc.<\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Blockchain con Python<\/h2>\n\n\n\n<p>En este ejemplo e crea un blockchain p\u00fablico gestionado por la aplicaci\u00f3n nodo_servidor y se almacena informaci\u00f3n en formato JSON<\/p>\n\n\n\n<pre>{\n\"author\": \"nombre_del_autor\",\n\"content\": \"Informaci\u00f3n que el autor quiere compartir\",\n\"timestamp\": \"El tiempo en el que el contenido fue creado\"\n}\n<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>nodo_servidor.py<\/p>\n\n\n\n<link crossorigin=\"anonymous\" media=\"all\" integrity=\"sha512-DMUv06uA9jcLpuzWEnwuWTuYn\/1rt3UmOKgIrS5ESQLJtqWQzexcD85XhWhAk0wcGQmlhspauIq+6Hjmue1A5g==\" rel=\"stylesheet\" href=\"https:\/\/assets-cdn.github.com\/assets\/frameworks-1291ffafdf7ffb4d9be67d690fd09212.css\" \/>\n        <link crossorigin=\"anonymous\" media=\"all\" integrity=\"sha512-K63Cu5BP+JmIEHRfiKC7s5dOA8XrAF3GtrWdophFd5F0BwNC5tQJQZ94ooUTruniwEByQxFeyx3AUdePBskgZw==\" rel=\"stylesheet\" href=\"https:\/\/assets-cdn.github.com\/assets\/github-89870b48b4732f6a6428a138b1512f5e.css\" \/>\n\n<div class=\"file-info\">\n            266 lines (203 sloc)\n            <span class=\"file-info-divider\"><\/span>\n            7.44 KB\n        <\/div>\n\n        <div itemprop=\"text\" class=\"blob-wrapper data type-python \">\n            <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n                <tr>\n                    <td id=\"L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"><\/td>\n                    <td id=\"LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">from<\/span> hashlib <span class=\"pl-k\">import<\/span> sha256<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n                    <td id=\"LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> json<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n                    <td id=\"LC3\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> time<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n                    <td id=\"LC4\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n                    <td id=\"LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">from<\/span> flask <span class=\"pl-k\">import<\/span> Flask, request<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n                    <td id=\"LC6\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> requests<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n                    <td id=\"LC7\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n                    <td id=\"LC8\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"><\/td>\n                    <td id=\"LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">class<\/span> <span class=\"pl-en\">Block<\/span>:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"><\/td>\n                    <td id=\"LC10\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-c1\">__init__<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>, <span class=\"pl-smi\">index<\/span>, <span class=\"pl-smi\">transactions<\/span>, <span class=\"pl-smi\">timestamp<\/span>, <span class=\"pl-smi\">previous_hash<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"><\/td>\n                    <td id=\"LC11\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.index <span class=\"pl-k\">=<\/span> index<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"><\/td>\n                    <td id=\"LC12\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.transactions <span class=\"pl-k\">=<\/span> transactions<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"><\/td>\n                    <td id=\"LC13\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.timestamp <span class=\"pl-k\">=<\/span> timestamp<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"><\/td>\n                    <td id=\"LC14\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.previous_hash <span class=\"pl-k\">=<\/span> previous_hash<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"><\/td>\n                    <td id=\"LC15\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.nonce <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">0<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"><\/td>\n                    <td id=\"LC16\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"><\/td>\n                    <td id=\"LC17\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">compute_hash<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"><\/td>\n                    <td id=\"LC18\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"><\/td>\n                    <td id=\"LC19\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        A function that return the hash of the block contents.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"><\/td>\n                    <td id=\"LC20\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"><\/td>\n                    <td id=\"LC21\" class=\"blob-code blob-code-inner js-file-line\">        block_string <span class=\"pl-k\">=<\/span> json.dumps(<span class=\"pl-c1\">self<\/span>.<span class=\"pl-c1\">__dict__<\/span>, <span class=\"pl-v\">sort_keys<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">True<\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"><\/td>\n                    <td id=\"LC22\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> sha256(block_string.encode()).hexdigest()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"><\/td>\n                    <td id=\"LC23\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"><\/td>\n                    <td id=\"LC24\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"><\/td>\n                    <td id=\"LC25\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">class<\/span> <span class=\"pl-en\">Blockchain<\/span>:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"><\/td>\n                    <td id=\"LC26\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> difficulty of our PoW algorithm<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"><\/td>\n                    <td id=\"LC27\" class=\"blob-code blob-code-inner js-file-line\">    difficulty <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">2<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"><\/td>\n                    <td id=\"LC28\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"><\/td>\n                    <td id=\"LC29\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-c1\">__init__<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"><\/td>\n                    <td id=\"LC30\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.unconfirmed_transactions <span class=\"pl-k\">=<\/span> []<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"><\/td>\n                    <td id=\"LC31\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.chain <span class=\"pl-k\">=<\/span> []<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"><\/td>\n                    <td id=\"LC32\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.create_genesis_block()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"><\/td>\n                    <td id=\"LC33\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"><\/td>\n                    <td id=\"LC34\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">create_genesis_block<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"><\/td>\n                    <td id=\"LC35\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"><\/td>\n                    <td id=\"LC36\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        A function to generate genesis block and appends it to<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"><\/td>\n                    <td id=\"LC37\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        the chain. The block has index 0, previous_hash as 0, and<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"><\/td>\n                    <td id=\"LC38\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        a valid hash.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"><\/td>\n                    <td id=\"LC39\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"><\/td>\n                    <td id=\"LC40\" class=\"blob-code blob-code-inner js-file-line\">        genesis_block <span class=\"pl-k\">=<\/span> Block(<span class=\"pl-c1\">0<\/span>, [], time.time(), <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>0<span class=\"pl-pds\">&quot;<\/span><\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"><\/td>\n                    <td id=\"LC41\" class=\"blob-code blob-code-inner js-file-line\">        genesis_block.hash <span class=\"pl-k\">=<\/span> genesis_block.compute_hash()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"><\/td>\n                    <td id=\"LC42\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.chain.append(genesis_block)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"><\/td>\n                    <td id=\"LC43\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"><\/td>\n                    <td id=\"LC44\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">@<\/span><span class=\"pl-c1\">property<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"><\/td>\n                    <td id=\"LC45\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">last_block<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"><\/td>\n                    <td id=\"LC46\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">self<\/span>.chain[<span class=\"pl-k\">&#8211;<\/span><span class=\"pl-c1\">1<\/span>]<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"><\/td>\n                    <td id=\"LC47\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"><\/td>\n                    <td id=\"LC48\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">add_block<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>, <span class=\"pl-smi\">block<\/span>, <span class=\"pl-smi\">proof<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"><\/td>\n                    <td id=\"LC49\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"><\/td>\n                    <td id=\"LC50\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        A function that adds the block to the chain after verification.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"><\/td>\n                    <td id=\"LC51\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        Verification includes:<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"><\/td>\n                    <td id=\"LC52\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        * Checking if the proof is valid.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"><\/td>\n                    <td id=\"LC53\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        * The previous_hash referred in the block and the hash of latest block<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"><\/td>\n                    <td id=\"LC54\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">          in the chain match.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"><\/td>\n                    <td id=\"LC55\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"><\/td>\n                    <td id=\"LC56\" class=\"blob-code blob-code-inner js-file-line\">        previous_hash <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">self<\/span>.last_block.hash<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"><\/td>\n                    <td id=\"LC57\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"><\/td>\n                    <td id=\"LC58\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> previous_hash <span class=\"pl-k\">!=<\/span> block.previous_hash:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"><\/td>\n                    <td id=\"LC59\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">False<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"><\/td>\n                    <td id=\"LC60\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"><\/td>\n                    <td id=\"LC61\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> Blockchain.is_valid_proof(block, proof):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"><\/td>\n                    <td id=\"LC62\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">False<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"><\/td>\n                    <td id=\"LC63\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"><\/td>\n                    <td id=\"LC64\" class=\"blob-code blob-code-inner js-file-line\">        block.hash <span class=\"pl-k\">=<\/span> proof<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"><\/td>\n                    <td id=\"LC65\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.chain.append(block)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"><\/td>\n                    <td id=\"LC66\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">True<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"><\/td>\n                    <td id=\"LC67\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"><\/td>\n                    <td id=\"LC68\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">proof_of_work<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>, <span class=\"pl-smi\">block<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"><\/td>\n                    <td id=\"LC69\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"><\/td>\n                    <td id=\"LC70\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        Function that tries different values of nonce to get a hash<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"><\/td>\n                    <td id=\"LC71\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        that satisfies our difficulty criteria.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"><\/td>\n                    <td id=\"LC72\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"><\/td>\n                    <td id=\"LC73\" class=\"blob-code blob-code-inner js-file-line\">        block.nonce <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">0<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"><\/td>\n                    <td id=\"LC74\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"><\/td>\n                    <td id=\"LC75\" class=\"blob-code blob-code-inner js-file-line\">        computed_hash <span class=\"pl-k\">=<\/span> block.compute_hash()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"><\/td>\n                    <td id=\"LC76\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">while<\/span> <span class=\"pl-k\">not<\/span> computed_hash.startswith(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>0<span class=\"pl-pds\">&#39;<\/span><\/span> <span class=\"pl-k\">*<\/span> Blockchain.difficulty):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"><\/td>\n                    <td id=\"LC77\" class=\"blob-code blob-code-inner js-file-line\">            block.nonce <span class=\"pl-k\">+=<\/span> <span class=\"pl-c1\">1<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"><\/td>\n                    <td id=\"LC78\" class=\"blob-code blob-code-inner js-file-line\">            computed_hash <span class=\"pl-k\">=<\/span> block.compute_hash()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"><\/td>\n                    <td id=\"LC79\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"><\/td>\n                    <td id=\"LC80\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> computed_hash<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"><\/td>\n                    <td id=\"LC81\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"><\/td>\n                    <td id=\"LC82\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">add_new_transaction<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>, <span class=\"pl-smi\">transaction<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"><\/td>\n                    <td id=\"LC83\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.unconfirmed_transactions.append(transaction)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"><\/td>\n                    <td id=\"LC84\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"><\/td>\n                    <td id=\"LC85\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">@<\/span><span class=\"pl-c1\">classmethod<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"><\/td>\n                    <td id=\"LC86\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">is_valid_proof<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">cls<\/span><\/span>, <span class=\"pl-smi\">block<\/span>, <span class=\"pl-smi\">block_hash<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"><\/td>\n                    <td id=\"LC87\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"><\/td>\n                    <td id=\"LC88\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        Check if block_hash is valid hash of block and satisfies<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"><\/td>\n                    <td id=\"LC89\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        the difficulty criteria.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"><\/td>\n                    <td id=\"LC90\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"><\/td>\n                    <td id=\"LC91\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> (block_hash.startswith(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>0<span class=\"pl-pds\">&#39;<\/span><\/span> <span class=\"pl-k\">*<\/span> Blockchain.difficulty) <span class=\"pl-k\">and<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"><\/td>\n                    <td id=\"LC92\" class=\"blob-code blob-code-inner js-file-line\">                block_hash <span class=\"pl-k\">==<\/span> block.compute_hash())<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"><\/td>\n                    <td id=\"LC93\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"><\/td>\n                    <td id=\"LC94\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-en\">@<\/span><span class=\"pl-c1\">classmethod<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"><\/td>\n                    <td id=\"LC95\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">check_chain_validity<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">cls<\/span><\/span>, <span class=\"pl-smi\">chain<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"><\/td>\n                    <td id=\"LC96\" class=\"blob-code blob-code-inner js-file-line\">        result <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">True<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"><\/td>\n                    <td id=\"LC97\" class=\"blob-code blob-code-inner js-file-line\">        previous_hash <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>0<span class=\"pl-pds\">&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"><\/td>\n                    <td id=\"LC98\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"><\/td>\n                    <td id=\"LC99\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">for<\/span> block <span class=\"pl-k\">in<\/span> chain:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"><\/td>\n                    <td id=\"LC100\" class=\"blob-code blob-code-inner js-file-line\">            block_hash <span class=\"pl-k\">=<\/span> block.hash<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"><\/td>\n                    <td id=\"LC101\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> remove the hash field to recompute the hash again<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"><\/td>\n                    <td id=\"LC102\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> using `compute_hash` method.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L103\" class=\"blob-num js-line-number\" data-line-number=\"103\"><\/td>\n                    <td id=\"LC103\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-c1\">delattr<\/span>(block, <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>hash<span class=\"pl-pds\">&quot;<\/span><\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L104\" class=\"blob-num js-line-number\" data-line-number=\"104\"><\/td>\n                    <td id=\"LC104\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L105\" class=\"blob-num js-line-number\" data-line-number=\"105\"><\/td>\n                    <td id=\"LC105\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> <span class=\"pl-c1\">cls<\/span>.is_valid_proof(block, block.hash) <span class=\"pl-k\">or<\/span> \\<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L106\" class=\"blob-num js-line-number\" data-line-number=\"106\"><\/td>\n                    <td id=\"LC106\" class=\"blob-code blob-code-inner js-file-line\">                    previous_hash <span class=\"pl-k\">!=<\/span> block.previous_hash:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L107\" class=\"blob-num js-line-number\" data-line-number=\"107\"><\/td>\n                    <td id=\"LC107\" class=\"blob-code blob-code-inner js-file-line\">                result <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">False<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L108\" class=\"blob-num js-line-number\" data-line-number=\"108\"><\/td>\n                    <td id=\"LC108\" class=\"blob-code blob-code-inner js-file-line\">                <span class=\"pl-k\">break<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L109\" class=\"blob-num js-line-number\" data-line-number=\"109\"><\/td>\n                    <td id=\"LC109\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L110\" class=\"blob-num js-line-number\" data-line-number=\"110\"><\/td>\n                    <td id=\"LC110\" class=\"blob-code blob-code-inner js-file-line\">            block.hash, previous_hash <span class=\"pl-k\">=<\/span> block_hash, block_hash<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L111\" class=\"blob-num js-line-number\" data-line-number=\"111\"><\/td>\n                    <td id=\"LC111\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L112\" class=\"blob-num js-line-number\" data-line-number=\"112\"><\/td>\n                    <td id=\"LC112\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> result<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L113\" class=\"blob-num js-line-number\" data-line-number=\"113\"><\/td>\n                    <td id=\"LC113\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L114\" class=\"blob-num js-line-number\" data-line-number=\"114\"><\/td>\n                    <td id=\"LC114\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">def<\/span> <span class=\"pl-en\">mine<\/span>(<span class=\"pl-smi\"><span class=\"pl-smi\">self<\/span><\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L115\" class=\"blob-num js-line-number\" data-line-number=\"115\"><\/td>\n                    <td id=\"LC115\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L116\" class=\"blob-num js-line-number\" data-line-number=\"116\"><\/td>\n                    <td id=\"LC116\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        This function serves as an interface to add the pending<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L117\" class=\"blob-num js-line-number\" data-line-number=\"117\"><\/td>\n                    <td id=\"LC117\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        transactions to the blockchain by adding them to the block<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L118\" class=\"blob-num js-line-number\" data-line-number=\"118\"><\/td>\n                    <td id=\"LC118\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        and figuring out Proof Of Work.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L119\" class=\"blob-num js-line-number\" data-line-number=\"119\"><\/td>\n                    <td id=\"LC119\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">        <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L120\" class=\"blob-num js-line-number\" data-line-number=\"120\"><\/td>\n                    <td id=\"LC120\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> <span class=\"pl-c1\">self<\/span>.unconfirmed_transactions:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L121\" class=\"blob-num js-line-number\" data-line-number=\"121\"><\/td>\n                    <td id=\"LC121\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">False<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L122\" class=\"blob-num js-line-number\" data-line-number=\"122\"><\/td>\n                    <td id=\"LC122\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L123\" class=\"blob-num js-line-number\" data-line-number=\"123\"><\/td>\n                    <td id=\"LC123\" class=\"blob-code blob-code-inner js-file-line\">        last_block <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">self<\/span>.last_block<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L124\" class=\"blob-num js-line-number\" data-line-number=\"124\"><\/td>\n                    <td id=\"LC124\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L125\" class=\"blob-num js-line-number\" data-line-number=\"125\"><\/td>\n                    <td id=\"LC125\" class=\"blob-code blob-code-inner js-file-line\">        new_block <span class=\"pl-k\">=<\/span> Block(<span class=\"pl-v\">index<\/span><span class=\"pl-k\">=<\/span>last_block.index <span class=\"pl-k\">+<\/span> <span class=\"pl-c1\">1<\/span>,<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L126\" class=\"blob-num js-line-number\" data-line-number=\"126\"><\/td>\n                    <td id=\"LC126\" class=\"blob-code blob-code-inner js-file-line\">                          <span class=\"pl-v\">transactions<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">self<\/span>.unconfirmed_transactions,<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L127\" class=\"blob-num js-line-number\" data-line-number=\"127\"><\/td>\n                    <td id=\"LC127\" class=\"blob-code blob-code-inner js-file-line\">                          <span class=\"pl-v\">timestamp<\/span><span class=\"pl-k\">=<\/span>time.time(),<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L128\" class=\"blob-num js-line-number\" data-line-number=\"128\"><\/td>\n                    <td id=\"LC128\" class=\"blob-code blob-code-inner js-file-line\">                          <span class=\"pl-v\">previous_hash<\/span><span class=\"pl-k\">=<\/span>last_block.hash)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L129\" class=\"blob-num js-line-number\" data-line-number=\"129\"><\/td>\n                    <td id=\"LC129\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L130\" class=\"blob-num js-line-number\" data-line-number=\"130\"><\/td>\n                    <td id=\"LC130\" class=\"blob-code blob-code-inner js-file-line\">        proof <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">self<\/span>.proof_of_work(new_block)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L131\" class=\"blob-num js-line-number\" data-line-number=\"131\"><\/td>\n                    <td id=\"LC131\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.add_block(new_block, proof)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L132\" class=\"blob-num js-line-number\" data-line-number=\"132\"><\/td>\n                    <td id=\"LC132\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L133\" class=\"blob-num js-line-number\" data-line-number=\"133\"><\/td>\n                    <td id=\"LC133\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c1\">self<\/span>.unconfirmed_transactions <span class=\"pl-k\">=<\/span> []<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L134\" class=\"blob-num js-line-number\" data-line-number=\"134\"><\/td>\n                    <td id=\"LC134\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> announce it to the network<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L135\" class=\"blob-num js-line-number\" data-line-number=\"135\"><\/td>\n                    <td id=\"LC135\" class=\"blob-code blob-code-inner js-file-line\">        announce_new_block(new_block)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L136\" class=\"blob-num js-line-number\" data-line-number=\"136\"><\/td>\n                    <td id=\"LC136\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> new_block.index<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L137\" class=\"blob-num js-line-number\" data-line-number=\"137\"><\/td>\n                    <td id=\"LC137\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L138\" class=\"blob-num js-line-number\" data-line-number=\"138\"><\/td>\n                    <td id=\"LC138\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L139\" class=\"blob-num js-line-number\" data-line-number=\"139\"><\/td>\n                    <td id=\"LC139\" class=\"blob-code blob-code-inner js-file-line\">app <span class=\"pl-k\">=<\/span> Flask(<span class=\"pl-c1\">__name__<\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L140\" class=\"blob-num js-line-number\" data-line-number=\"140\"><\/td>\n                    <td id=\"LC140\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L141\" class=\"blob-num js-line-number\" data-line-number=\"141\"><\/td>\n                    <td id=\"LC141\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> the node&#39;s copy of blockchain<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L142\" class=\"blob-num js-line-number\" data-line-number=\"142\"><\/td>\n                    <td id=\"LC142\" class=\"blob-code blob-code-inner js-file-line\">blockchain <span class=\"pl-k\">=<\/span> Blockchain()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L143\" class=\"blob-num js-line-number\" data-line-number=\"143\"><\/td>\n                    <td id=\"LC143\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L144\" class=\"blob-num js-line-number\" data-line-number=\"144\"><\/td>\n                    <td id=\"LC144\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> the address to other participating members of the network<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L145\" class=\"blob-num js-line-number\" data-line-number=\"145\"><\/td>\n                    <td id=\"LC145\" class=\"blob-code blob-code-inner js-file-line\">peers <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">set<\/span>()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L146\" class=\"blob-num js-line-number\" data-line-number=\"146\"><\/td>\n                    <td id=\"LC146\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L147\" class=\"blob-num js-line-number\" data-line-number=\"147\"><\/td>\n                    <td id=\"LC147\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L148\" class=\"blob-num js-line-number\" data-line-number=\"148\"><\/td>\n                    <td id=\"LC148\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to submit a new transaction. This will be used by<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L149\" class=\"blob-num js-line-number\" data-line-number=\"149\"><\/td>\n                    <td id=\"LC149\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> our application to add new data (posts) to the blockchain<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L150\" class=\"blob-num js-line-number\" data-line-number=\"150\"><\/td>\n                    <td id=\"LC150\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/new_transaction<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>POST<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L151\" class=\"blob-num js-line-number\" data-line-number=\"151\"><\/td>\n                    <td id=\"LC151\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">new_transaction<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L152\" class=\"blob-num js-line-number\" data-line-number=\"152\"><\/td>\n                    <td id=\"LC152\" class=\"blob-code blob-code-inner js-file-line\">    tx_data <span class=\"pl-k\">=<\/span> request.get_json()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L153\" class=\"blob-num js-line-number\" data-line-number=\"153\"><\/td>\n                    <td id=\"LC153\" class=\"blob-code blob-code-inner js-file-line\">    required_fields <span class=\"pl-k\">=<\/span> [<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>author<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>content<span class=\"pl-pds\">&quot;<\/span><\/span>]<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L154\" class=\"blob-num js-line-number\" data-line-number=\"154\"><\/td>\n                    <td id=\"LC154\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L155\" class=\"blob-num js-line-number\" data-line-number=\"155\"><\/td>\n                    <td id=\"LC155\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span> field <span class=\"pl-k\">in<\/span> required_fields:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L156\" class=\"blob-num js-line-number\" data-line-number=\"156\"><\/td>\n                    <td id=\"LC156\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> tx_data.get(field):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L157\" class=\"blob-num js-line-number\" data-line-number=\"157\"><\/td>\n                    <td id=\"LC157\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Invlaid transaction data<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">404<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L158\" class=\"blob-num js-line-number\" data-line-number=\"158\"><\/td>\n                    <td id=\"LC158\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L159\" class=\"blob-num js-line-number\" data-line-number=\"159\"><\/td>\n                    <td id=\"LC159\" class=\"blob-code blob-code-inner js-file-line\">    tx_data[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>timestamp<span class=\"pl-pds\">&quot;<\/span><\/span>] <span class=\"pl-k\">=<\/span> time.time()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L160\" class=\"blob-num js-line-number\" data-line-number=\"160\"><\/td>\n                    <td id=\"LC160\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L161\" class=\"blob-num js-line-number\" data-line-number=\"161\"><\/td>\n                    <td id=\"LC161\" class=\"blob-code blob-code-inner js-file-line\">    blockchain.add_new_transaction(tx_data)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L162\" class=\"blob-num js-line-number\" data-line-number=\"162\"><\/td>\n                    <td id=\"LC162\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L163\" class=\"blob-num js-line-number\" data-line-number=\"163\"><\/td>\n                    <td id=\"LC163\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Success<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">201<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L164\" class=\"blob-num js-line-number\" data-line-number=\"164\"><\/td>\n                    <td id=\"LC164\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L165\" class=\"blob-num js-line-number\" data-line-number=\"165\"><\/td>\n                    <td id=\"LC165\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L166\" class=\"blob-num js-line-number\" data-line-number=\"166\"><\/td>\n                    <td id=\"LC166\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to return the node&#39;s copy of the chain.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L167\" class=\"blob-num js-line-number\" data-line-number=\"167\"><\/td>\n                    <td id=\"LC167\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Our application will be using this endpoint to query<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L168\" class=\"blob-num js-line-number\" data-line-number=\"168\"><\/td>\n                    <td id=\"LC168\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> all the posts to display.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L169\" class=\"blob-num js-line-number\" data-line-number=\"169\"><\/td>\n                    <td id=\"LC169\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/chain<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>GET<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L170\" class=\"blob-num js-line-number\" data-line-number=\"170\"><\/td>\n                    <td id=\"LC170\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">get_chain<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L171\" class=\"blob-num js-line-number\" data-line-number=\"171\"><\/td>\n                    <td id=\"LC171\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> make sure we&#39;ve the longest chain<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L172\" class=\"blob-num js-line-number\" data-line-number=\"172\"><\/td>\n                    <td id=\"LC172\" class=\"blob-code blob-code-inner js-file-line\">    consensus()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L173\" class=\"blob-num js-line-number\" data-line-number=\"173\"><\/td>\n                    <td id=\"LC173\" class=\"blob-code blob-code-inner js-file-line\">    chain_data <span class=\"pl-k\">=<\/span> []<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L174\" class=\"blob-num js-line-number\" data-line-number=\"174\"><\/td>\n                    <td id=\"LC174\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span> block <span class=\"pl-k\">in<\/span> blockchain.chain:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L175\" class=\"blob-num js-line-number\" data-line-number=\"175\"><\/td>\n                    <td id=\"LC175\" class=\"blob-code blob-code-inner js-file-line\">        chain_data.append(block.<span class=\"pl-c1\">__dict__<\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L176\" class=\"blob-num js-line-number\" data-line-number=\"176\"><\/td>\n                    <td id=\"LC176\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> json.dumps({<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>length<span class=\"pl-pds\">&quot;<\/span><\/span>: <span class=\"pl-c1\">len<\/span>(chain_data),<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L177\" class=\"blob-num js-line-number\" data-line-number=\"177\"><\/td>\n                    <td id=\"LC177\" class=\"blob-code blob-code-inner js-file-line\">                       <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>chain<span class=\"pl-pds\">&quot;<\/span><\/span>: chain_data})<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L178\" class=\"blob-num js-line-number\" data-line-number=\"178\"><\/td>\n                    <td id=\"LC178\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L179\" class=\"blob-num js-line-number\" data-line-number=\"179\"><\/td>\n                    <td id=\"LC179\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L180\" class=\"blob-num js-line-number\" data-line-number=\"180\"><\/td>\n                    <td id=\"LC180\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to request the node to mine the unconfirmed<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L181\" class=\"blob-num js-line-number\" data-line-number=\"181\"><\/td>\n                    <td id=\"LC181\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> transactions (if any). We&#39;ll be using it to initiate<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L182\" class=\"blob-num js-line-number\" data-line-number=\"182\"><\/td>\n                    <td id=\"LC182\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> a command to mine from our application itself.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L183\" class=\"blob-num js-line-number\" data-line-number=\"183\"><\/td>\n                    <td id=\"LC183\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/mine<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>GET<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L184\" class=\"blob-num js-line-number\" data-line-number=\"184\"><\/td>\n                    <td id=\"LC184\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">mine_unconfirmed_transactions<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L185\" class=\"blob-num js-line-number\" data-line-number=\"185\"><\/td>\n                    <td id=\"LC185\" class=\"blob-code blob-code-inner js-file-line\">    result <span class=\"pl-k\">=<\/span> blockchain.mine()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L186\" class=\"blob-num js-line-number\" data-line-number=\"186\"><\/td>\n                    <td id=\"LC186\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> result:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L187\" class=\"blob-num js-line-number\" data-line-number=\"187\"><\/td>\n                    <td id=\"LC187\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>No transactions to mine<span class=\"pl-pds\">&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L188\" class=\"blob-num js-line-number\" data-line-number=\"188\"><\/td>\n                    <td id=\"LC188\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Block #<span class=\"pl-c1\">{}<\/span> is mined.<span class=\"pl-pds\">&quot;<\/span><\/span>.format(result)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L189\" class=\"blob-num js-line-number\" data-line-number=\"189\"><\/td>\n                    <td id=\"LC189\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L190\" class=\"blob-num js-line-number\" data-line-number=\"190\"><\/td>\n                    <td id=\"LC190\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L191\" class=\"blob-num js-line-number\" data-line-number=\"191\"><\/td>\n                    <td id=\"LC191\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to add new peers to the network.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L192\" class=\"blob-num js-line-number\" data-line-number=\"192\"><\/td>\n                    <td id=\"LC192\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/add_nodes<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>POST<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L193\" class=\"blob-num js-line-number\" data-line-number=\"193\"><\/td>\n                    <td id=\"LC193\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">register_new_peers<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L194\" class=\"blob-num js-line-number\" data-line-number=\"194\"><\/td>\n                    <td id=\"LC194\" class=\"blob-code blob-code-inner js-file-line\">    nodes <span class=\"pl-k\">=<\/span> request.get_json()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L195\" class=\"blob-num js-line-number\" data-line-number=\"195\"><\/td>\n                    <td id=\"LC195\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> nodes:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L196\" class=\"blob-num js-line-number\" data-line-number=\"196\"><\/td>\n                    <td id=\"LC196\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Invalid data<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">400<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L197\" class=\"blob-num js-line-number\" data-line-number=\"197\"><\/td>\n                    <td id=\"LC197\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span> node <span class=\"pl-k\">in<\/span> nodes:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L198\" class=\"blob-num js-line-number\" data-line-number=\"198\"><\/td>\n                    <td id=\"LC198\" class=\"blob-code blob-code-inner js-file-line\">        peers.add(node)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L199\" class=\"blob-num js-line-number\" data-line-number=\"199\"><\/td>\n                    <td id=\"LC199\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L200\" class=\"blob-num js-line-number\" data-line-number=\"200\"><\/td>\n                    <td id=\"LC200\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Success<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">201<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L201\" class=\"blob-num js-line-number\" data-line-number=\"201\"><\/td>\n                    <td id=\"LC201\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L202\" class=\"blob-num js-line-number\" data-line-number=\"202\"><\/td>\n                    <td id=\"LC202\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L203\" class=\"blob-num js-line-number\" data-line-number=\"203\"><\/td>\n                    <td id=\"LC203\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to add a block mined by someone else to<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L204\" class=\"blob-num js-line-number\" data-line-number=\"204\"><\/td>\n                    <td id=\"LC204\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> the node&#39;s chain. The block is first verified by the node<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L205\" class=\"blob-num js-line-number\" data-line-number=\"205\"><\/td>\n                    <td id=\"LC205\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> and then added to the chain.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L206\" class=\"blob-num js-line-number\" data-line-number=\"206\"><\/td>\n                    <td id=\"LC206\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/add_block<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>POST<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L207\" class=\"blob-num js-line-number\" data-line-number=\"207\"><\/td>\n                    <td id=\"LC207\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">validate_and_add_block<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L208\" class=\"blob-num js-line-number\" data-line-number=\"208\"><\/td>\n                    <td id=\"LC208\" class=\"blob-code blob-code-inner js-file-line\">    block_data <span class=\"pl-k\">=<\/span> request.get_json()<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L209\" class=\"blob-num js-line-number\" data-line-number=\"209\"><\/td>\n                    <td id=\"LC209\" class=\"blob-code blob-code-inner js-file-line\">    block <span class=\"pl-k\">=<\/span> Block(block_data[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>index<span class=\"pl-pds\">&quot;<\/span><\/span>],<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L210\" class=\"blob-num js-line-number\" data-line-number=\"210\"><\/td>\n                    <td id=\"LC210\" class=\"blob-code blob-code-inner js-file-line\">                  block_data[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>transactions<span class=\"pl-pds\">&quot;<\/span><\/span>],<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L211\" class=\"blob-num js-line-number\" data-line-number=\"211\"><\/td>\n                    <td id=\"LC211\" class=\"blob-code blob-code-inner js-file-line\">                  block_data[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>timestamp<span class=\"pl-pds\">&quot;<\/span><\/span>,<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L212\" class=\"blob-num js-line-number\" data-line-number=\"212\"><\/td>\n                    <td id=\"LC212\" class=\"blob-code blob-code-inner js-file-line\">                  block_data[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>previous_hash<span class=\"pl-pds\">&quot;<\/span><\/span>]])<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L213\" class=\"blob-num js-line-number\" data-line-number=\"213\"><\/td>\n                    <td id=\"LC213\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L214\" class=\"blob-num js-line-number\" data-line-number=\"214\"><\/td>\n                    <td id=\"LC214\" class=\"blob-code blob-code-inner js-file-line\">    proof <span class=\"pl-k\">=<\/span> block_data[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>hash<span class=\"pl-pds\">&#39;<\/span><\/span>]<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L215\" class=\"blob-num js-line-number\" data-line-number=\"215\"><\/td>\n                    <td id=\"LC215\" class=\"blob-code blob-code-inner js-file-line\">    added <span class=\"pl-k\">=<\/span> blockchain.add_block(block, proof)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L216\" class=\"blob-num js-line-number\" data-line-number=\"216\"><\/td>\n                    <td id=\"LC216\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L217\" class=\"blob-num js-line-number\" data-line-number=\"217\"><\/td>\n                    <td id=\"LC217\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> <span class=\"pl-k\">not<\/span> added:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L218\" class=\"blob-num js-line-number\" data-line-number=\"218\"><\/td>\n                    <td id=\"LC218\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>The block was discarded by the node<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">400<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L219\" class=\"blob-num js-line-number\" data-line-number=\"219\"><\/td>\n                    <td id=\"LC219\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L220\" class=\"blob-num js-line-number\" data-line-number=\"220\"><\/td>\n                    <td id=\"LC220\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>Block added to the chain<span class=\"pl-pds\">&quot;<\/span><\/span>, <span class=\"pl-c1\">201<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L221\" class=\"blob-num js-line-number\" data-line-number=\"221\"><\/td>\n                    <td id=\"LC221\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L222\" class=\"blob-num js-line-number\" data-line-number=\"222\"><\/td>\n                    <td id=\"LC222\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L223\" class=\"blob-num js-line-number\" data-line-number=\"223\"><\/td>\n                    <td id=\"LC223\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> endpoint to query unconfirmed transactions<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L224\" class=\"blob-num js-line-number\" data-line-number=\"224\"><\/td>\n                    <td id=\"LC224\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/pending_tx<span class=\"pl-pds\">&#39;<\/span><\/span>)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L225\" class=\"blob-num js-line-number\" data-line-number=\"225\"><\/td>\n                    <td id=\"LC225\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">get_pending_tx<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L226\" class=\"blob-num js-line-number\" data-line-number=\"226\"><\/td>\n                    <td id=\"LC226\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> json.dumps(blockchain.unconfirmed_transactions)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L227\" class=\"blob-num js-line-number\" data-line-number=\"227\"><\/td>\n                    <td id=\"LC227\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L228\" class=\"blob-num js-line-number\" data-line-number=\"228\"><\/td>\n                    <td id=\"LC228\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L229\" class=\"blob-num js-line-number\" data-line-number=\"229\"><\/td>\n                    <td id=\"LC229\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">consensus<\/span>():<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L230\" class=\"blob-num js-line-number\" data-line-number=\"230\"><\/td>\n                    <td id=\"LC230\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L231\" class=\"blob-num js-line-number\" data-line-number=\"231\"><\/td>\n                    <td id=\"LC231\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    Our simple consnsus algorithm. If a longer valid chain is<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L232\" class=\"blob-num js-line-number\" data-line-number=\"232\"><\/td>\n                    <td id=\"LC232\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    found, our chain is replaced with it.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L233\" class=\"blob-num js-line-number\" data-line-number=\"233\"><\/td>\n                    <td id=\"LC233\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L234\" class=\"blob-num js-line-number\" data-line-number=\"234\"><\/td>\n                    <td id=\"LC234\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">global<\/span> blockchain<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L235\" class=\"blob-num js-line-number\" data-line-number=\"235\"><\/td>\n                    <td id=\"LC235\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L236\" class=\"blob-num js-line-number\" data-line-number=\"236\"><\/td>\n                    <td id=\"LC236\" class=\"blob-code blob-code-inner js-file-line\">    longest_chain <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">None<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L237\" class=\"blob-num js-line-number\" data-line-number=\"237\"><\/td>\n                    <td id=\"LC237\" class=\"blob-code blob-code-inner js-file-line\">    current_len <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">len<\/span>(blockchain.chain)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L238\" class=\"blob-num js-line-number\" data-line-number=\"238\"><\/td>\n                    <td id=\"LC238\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L239\" class=\"blob-num js-line-number\" data-line-number=\"239\"><\/td>\n                    <td id=\"LC239\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span> node <span class=\"pl-k\">in<\/span> peers:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L240\" class=\"blob-num js-line-number\" data-line-number=\"240\"><\/td>\n                    <td id=\"LC240\" class=\"blob-code blob-code-inner js-file-line\">        response <span class=\"pl-k\">=<\/span> requests.get(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>http:\/\/<span class=\"pl-c1\">{}<\/span>\/chain<span class=\"pl-pds\">&#39;<\/span><\/span>.format(node))<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L241\" class=\"blob-num js-line-number\" data-line-number=\"241\"><\/td>\n                    <td id=\"LC241\" class=\"blob-code blob-code-inner js-file-line\">        length <span class=\"pl-k\">=<\/span> response.json()[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>length<span class=\"pl-pds\">&#39;<\/span><\/span>]<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L242\" class=\"blob-num js-line-number\" data-line-number=\"242\"><\/td>\n                    <td id=\"LC242\" class=\"blob-code blob-code-inner js-file-line\">        chain <span class=\"pl-k\">=<\/span> response.json()[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>chain<span class=\"pl-pds\">&#39;<\/span><\/span>]<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L243\" class=\"blob-num js-line-number\" data-line-number=\"243\"><\/td>\n                    <td id=\"LC243\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">if<\/span> length <span class=\"pl-k\">&gt;<\/span> current_len <span class=\"pl-k\">and<\/span> blockchain.check_chain_validity(chain):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L244\" class=\"blob-num js-line-number\" data-line-number=\"244\"><\/td>\n                    <td id=\"LC244\" class=\"blob-code blob-code-inner js-file-line\">            current_len <span class=\"pl-k\">=<\/span> length<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L245\" class=\"blob-num js-line-number\" data-line-number=\"245\"><\/td>\n                    <td id=\"LC245\" class=\"blob-code blob-code-inner js-file-line\">            longest_chain <span class=\"pl-k\">=<\/span> chain<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L246\" class=\"blob-num js-line-number\" data-line-number=\"246\"><\/td>\n                    <td id=\"LC246\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L247\" class=\"blob-num js-line-number\" data-line-number=\"247\"><\/td>\n                    <td id=\"LC247\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> longest_chain:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L248\" class=\"blob-num js-line-number\" data-line-number=\"248\"><\/td>\n                    <td id=\"LC248\" class=\"blob-code blob-code-inner js-file-line\">        blockchain <span class=\"pl-k\">=<\/span> longest_chain<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L249\" class=\"blob-num js-line-number\" data-line-number=\"249\"><\/td>\n                    <td id=\"LC249\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">True<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L250\" class=\"blob-num js-line-number\" data-line-number=\"250\"><\/td>\n                    <td id=\"LC250\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L251\" class=\"blob-num js-line-number\" data-line-number=\"251\"><\/td>\n                    <td id=\"LC251\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">False<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L252\" class=\"blob-num js-line-number\" data-line-number=\"252\"><\/td>\n                    <td id=\"LC252\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L253\" class=\"blob-num js-line-number\" data-line-number=\"253\"><\/td>\n                    <td id=\"LC253\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L254\" class=\"blob-num js-line-number\" data-line-number=\"254\"><\/td>\n                    <td id=\"LC254\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">announce_new_block<\/span>(<span class=\"pl-smi\">block<\/span>):<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L255\" class=\"blob-num js-line-number\" data-line-number=\"255\"><\/td>\n                    <td id=\"LC255\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L256\" class=\"blob-num js-line-number\" data-line-number=\"256\"><\/td>\n                    <td id=\"LC256\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    A function to announce to the network once a block has been mined.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L257\" class=\"blob-num js-line-number\" data-line-number=\"257\"><\/td>\n                    <td id=\"LC257\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    Other blocks can simply verify the proof of work and add it to their<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L258\" class=\"blob-num js-line-number\" data-line-number=\"258\"><\/td>\n                    <td id=\"LC258\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    respective chains.<\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L259\" class=\"blob-num js-line-number\" data-line-number=\"259\"><\/td>\n                    <td id=\"LC259\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L260\" class=\"blob-num js-line-number\" data-line-number=\"260\"><\/td>\n                    <td id=\"LC260\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">for<\/span> peer <span class=\"pl-k\">in<\/span> peers:<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L261\" class=\"blob-num js-line-number\" data-line-number=\"261\"><\/td>\n                    <td id=\"LC261\" class=\"blob-code blob-code-inner js-file-line\">        url <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>http:\/\/<span class=\"pl-c1\">{}<\/span>\/add_block<span class=\"pl-pds\">&quot;<\/span><\/span>.format(peer)<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L262\" class=\"blob-num js-line-number\" data-line-number=\"262\"><\/td>\n                    <td id=\"LC262\" class=\"blob-code blob-code-inner js-file-line\">        requests.post(url, <span class=\"pl-v\">data<\/span><span class=\"pl-k\">=<\/span>json.dumps(block.<span class=\"pl-c1\">__dict__<\/span>, <span class=\"pl-v\">sort_keys<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">True<\/span>))<\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L263\" class=\"blob-num js-line-number\" data-line-number=\"263\"><\/td>\n                    <td id=\"LC263\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L264\" class=\"blob-num js-line-number\" data-line-number=\"264\"><\/td>\n                    <td id=\"LC264\" class=\"blob-code blob-code-inner js-file-line\">\n                    <\/td>\n                <\/tr>\n                <tr>\n                    <td id=\"L265\" class=\"blob-num js-line-number\" data-line-number=\"265\"><\/td>\n                    <td id=\"LC265\" class=\"blob-code blob-code-inner js-file-line\">app.run(<span class=\"pl-v\">debug<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">True<\/span>, <span class=\"pl-v\">port<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">8000<\/span>)<\/td>\n                <\/tr>\n            <\/table>\n\n\n        <\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>La vista de la aplicaci\u00f3n cliente es la siguiente con el archivo view.py<\/p>\n\n\n\n<div class=\"file-info\">\n            73 lines (55 sloc)\n            <span class=\"file-info-divider\"><\/span>\n            1.96 KB\n        <\/div>\n\n    <div itemprop=\"text\" class=\"blob-wrapper data type-python \">\n        <table class=\"highlight tab-size js-file-line-container\" data-tab-size=\"8\">\n            <tr>\n                <td id=\"L1\" class=\"blob-num js-line-number\" data-line-number=\"1\"><\/td>\n                <td id=\"LC1\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> datetime<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n                <td id=\"LC2\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> json<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n                <td id=\"LC3\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n                <td id=\"LC4\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">import<\/span> requests<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n                <td id=\"LC5\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">from<\/span> flask <span class=\"pl-k\">import<\/span> render_template, redirect, request<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n                <td id=\"LC6\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n                <td id=\"LC7\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">from<\/span> app <span class=\"pl-k\">import<\/span> app<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n                <td id=\"LC8\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"><\/td>\n                <td id=\"LC9\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> The node with which our application interacts, there can be multiple<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"><\/td>\n                <td id=\"LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c\"><span class=\"pl-c\">#<\/span> such nodes as well.<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"><\/td>\n                <td id=\"LC11\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">CONNECTED_NODE_ADDRESS<\/span> <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>http:\/\/127.0.0.1:8000<span class=\"pl-pds\">&quot;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"><\/td>\n                <td id=\"LC12\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"><\/td>\n                <td id=\"LC13\" class=\"blob-code blob-code-inner js-file-line\">posts <span class=\"pl-k\">=<\/span> []<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"><\/td>\n                <td id=\"LC14\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"><\/td>\n                <td id=\"LC15\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"><\/td>\n                <td id=\"LC16\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">fetch_posts<\/span>():<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"><\/td>\n                <td id=\"LC17\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"><\/td>\n                <td id=\"LC18\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    Function to fetch the chain from a blockchain node, parse the<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"><\/td>\n                <td id=\"LC19\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    data and store it locally.<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"><\/td>\n                <td id=\"LC20\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"><\/td>\n                <td id=\"LC21\" class=\"blob-code blob-code-inner js-file-line\">    get_chain_address <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span><span class=\"pl-c1\">{}<\/span>\/chain<span class=\"pl-pds\">&quot;<\/span><\/span>.format(<span class=\"pl-c1\">CONNECTED_NODE_ADDRESS<\/span>)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"><\/td>\n                <td id=\"LC22\" class=\"blob-code blob-code-inner js-file-line\">    response <span class=\"pl-k\">=<\/span> requests.get(get_chain_address)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"><\/td>\n                <td id=\"LC23\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">if<\/span> response.status_code <span class=\"pl-k\">==<\/span> <span class=\"pl-c1\">200<\/span>:<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"><\/td>\n                <td id=\"LC24\" class=\"blob-code blob-code-inner js-file-line\">        content <span class=\"pl-k\">=<\/span> []<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"><\/td>\n                <td id=\"LC25\" class=\"blob-code blob-code-inner js-file-line\">        chain <span class=\"pl-k\">=<\/span> json.loads(response.content)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"><\/td>\n                <td id=\"LC26\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">for<\/span> block <span class=\"pl-k\">in<\/span> chain[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>chain<span class=\"pl-pds\">&quot;<\/span><\/span>]:<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"><\/td>\n                <td id=\"LC27\" class=\"blob-code blob-code-inner js-file-line\">            <span class=\"pl-k\">for<\/span> tx <span class=\"pl-k\">in<\/span> block[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>transactions<span class=\"pl-pds\">&quot;<\/span><\/span>]:<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"><\/td>\n                <td id=\"LC28\" class=\"blob-code blob-code-inner js-file-line\">                tx[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>index<span class=\"pl-pds\">&quot;<\/span><\/span>] <span class=\"pl-k\">=<\/span> block[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>index<span class=\"pl-pds\">&quot;<\/span><\/span>]<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"><\/td>\n                <td id=\"LC29\" class=\"blob-code blob-code-inner js-file-line\">                tx[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>hash<span class=\"pl-pds\">&quot;<\/span><\/span>] <span class=\"pl-k\">=<\/span> block[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>previous_hash<span class=\"pl-pds\">&quot;<\/span><\/span>]<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"><\/td>\n                <td id=\"LC30\" class=\"blob-code blob-code-inner js-file-line\">                content.append(tx)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"><\/td>\n                <td id=\"LC31\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"><\/td>\n                <td id=\"LC32\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-k\">global<\/span> posts<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"><\/td>\n                <td id=\"LC33\" class=\"blob-code blob-code-inner js-file-line\">        posts <span class=\"pl-k\">=<\/span> <span class=\"pl-c1\">sorted<\/span>(content, <span class=\"pl-v\">key<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-k\">lambda<\/span> <span class=\"pl-smi\">k<\/span>: k[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>timestamp<span class=\"pl-pds\">&#39;<\/span><\/span>],<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"><\/td>\n                <td id=\"LC34\" class=\"blob-code blob-code-inner js-file-line\">                       <span class=\"pl-v\">reverse<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">True<\/span>)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"><\/td>\n                <td id=\"LC35\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"><\/td>\n                <td id=\"LC36\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"><\/td>\n                <td id=\"LC37\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/<span class=\"pl-pds\">&#39;<\/span><\/span>)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"><\/td>\n                <td id=\"LC38\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">index<\/span>():<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"><\/td>\n                <td id=\"LC39\" class=\"blob-code blob-code-inner js-file-line\">    fetch_posts()<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"><\/td>\n                <td id=\"LC40\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> render_template(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>index.html<span class=\"pl-pds\">&#39;<\/span><\/span>,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"><\/td>\n                <td id=\"LC41\" class=\"blob-code blob-code-inner js-file-line\">                           <span class=\"pl-v\">title<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>YourNet: Decentralized <span class=\"pl-pds\">&#39;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"><\/td>\n                <td id=\"LC42\" class=\"blob-code blob-code-inner js-file-line\">                                 <span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>content sharing<span class=\"pl-pds\">&#39;<\/span><\/span>,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"><\/td>\n                <td id=\"LC43\" class=\"blob-code blob-code-inner js-file-line\">                           <span class=\"pl-v\">posts<\/span><span class=\"pl-k\">=<\/span>posts,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"><\/td>\n                <td id=\"LC44\" class=\"blob-code blob-code-inner js-file-line\">                           <span class=\"pl-v\">node_address<\/span><span class=\"pl-k\">=<\/span><span class=\"pl-c1\">CONNECTED_NODE_ADDRESS<\/span>,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"><\/td>\n                <td id=\"LC45\" class=\"blob-code blob-code-inner js-file-line\">                           <span class=\"pl-v\">readable_time<\/span><span class=\"pl-k\">=<\/span>timestamp_to_string)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"><\/td>\n                <td id=\"LC46\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"><\/td>\n                <td id=\"LC47\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"><\/td>\n                <td id=\"LC48\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-en\">@app.route<\/span>(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/submit<span class=\"pl-pds\">&#39;<\/span><\/span>, <span class=\"pl-v\">methods<\/span><span class=\"pl-k\">=<\/span>[<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>POST<span class=\"pl-pds\">&#39;<\/span><\/span>])<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"><\/td>\n                <td id=\"LC49\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">submit_textarea<\/span>():<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"><\/td>\n                <td id=\"LC50\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-s\"><span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"><\/td>\n                <td id=\"LC51\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    Endpoint to create a new transaction via our application.<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"><\/td>\n                <td id=\"LC52\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-s\">    <span class=\"pl-pds\">&quot;&quot;&quot;<\/span><\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"><\/td>\n                <td id=\"LC53\" class=\"blob-code blob-code-inner js-file-line\">    post_content <span class=\"pl-k\">=<\/span> request.form[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>content<span class=\"pl-pds\">&quot;<\/span><\/span>]<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"><\/td>\n                <td id=\"LC54\" class=\"blob-code blob-code-inner js-file-line\">    author <span class=\"pl-k\">=<\/span> request.form[<span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span>author<span class=\"pl-pds\">&quot;<\/span><\/span>]<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"><\/td>\n                <td id=\"LC55\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"><\/td>\n                <td id=\"LC56\" class=\"blob-code blob-code-inner js-file-line\">    post_object <span class=\"pl-k\">=<\/span> {<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"><\/td>\n                <td id=\"LC57\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>author<span class=\"pl-pds\">&#39;<\/span><\/span>: author,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"><\/td>\n                <td id=\"LC58\" class=\"blob-code blob-code-inner js-file-line\">        <span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>content<span class=\"pl-pds\">&#39;<\/span><\/span>: post_content,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"><\/td>\n                <td id=\"LC59\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"><\/td>\n                <td id=\"LC60\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"><\/td>\n                <td id=\"LC61\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-c\"><span class=\"pl-c\">#<\/span> Submit a transaction<\/span><\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"><\/td>\n                <td id=\"LC62\" class=\"blob-code blob-code-inner js-file-line\">    new_tx_address <span class=\"pl-k\">=<\/span> <span class=\"pl-s\"><span class=\"pl-pds\">&quot;<\/span><span class=\"pl-c1\">{}<\/span>\/new_transaction<span class=\"pl-pds\">&quot;<\/span><\/span>.format(<span class=\"pl-c1\">CONNECTED_NODE_ADDRESS<\/span>)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"><\/td>\n                <td id=\"LC63\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"><\/td>\n                <td id=\"LC64\" class=\"blob-code blob-code-inner js-file-line\">    requests.post(new_tx_address,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"><\/td>\n                <td id=\"LC65\" class=\"blob-code blob-code-inner js-file-line\">                  <span class=\"pl-v\">json<\/span><span class=\"pl-k\">=<\/span>post_object,<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"><\/td>\n                <td id=\"LC66\" class=\"blob-code blob-code-inner js-file-line\">                  <span class=\"pl-v\">headers<\/span><span class=\"pl-k\">=<\/span>{<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>Content-type<span class=\"pl-pds\">&#39;<\/span><\/span>: <span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>application\/json<span class=\"pl-pds\">&#39;<\/span><\/span>})<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"><\/td>\n                <td id=\"LC67\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"><\/td>\n                <td id=\"LC68\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> redirect(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>\/<span class=\"pl-pds\">&#39;<\/span><\/span>)<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"><\/td>\n                <td id=\"LC69\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"><\/td>\n                <td id=\"LC70\" class=\"blob-code blob-code-inner js-file-line\">\n                <\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"><\/td>\n                <td id=\"LC71\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-k\">def<\/span> <span class=\"pl-en\">timestamp_to_string<\/span>(<span class=\"pl-smi\">epoch_time<\/span>):<\/td>\n            <\/tr>\n            <tr>\n                <td id=\"L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"><\/td>\n                <td id=\"LC72\" class=\"blob-code blob-code-inner js-file-line\">    <span class=\"pl-k\">return<\/span> datetime.datetime.fromtimestamp(epoch_time).strftime(<span class=\"pl-s\"><span class=\"pl-pds\">&#39;<\/span>%H:%M<span class=\"pl-pds\">&#39;<\/span><\/span>)<\/td>\n            <\/tr>\n        <\/table>\n\n\n    <\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusi\u00f3n<\/h3>\n\n\n\n<p>Este ejemplo cubre los fundamentos de un blockchain p\u00fablico. Implementa un blockchain desde cero y crea una simple aplicaci\u00f3n permitiendo a los usuarios compartir informaci\u00f3n en \u00e9l.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La Tecnolog\u00eda Blockchain Podemos decir que blockchain es la tecnolog\u00eda del bitcoin y otras criptomonedas, &hellip; <\/p>\n","protected":false},"author":2,"featured_media":641,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[25,95,46],"tags":[94,57,58,56,50,59],"class_list":["post-640","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algoritmos","category-blockchain","category-machine-learning","tag-blockchain","tag-ciencia-de-datos","tag-data-mining","tag-data-science","tag-machine-learning","tag-mineria-de-datos"],"aioseo_notices":[],"author_meta":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"featured_img":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_developer-300x250.png","featured_image_src":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_developer.png","featured_image_src_square":"https:\/\/www.jacobsoft.com.mx\/wp-content\/uploads\/2018\/10\/blockchain_developer.png","author_info":{"display_name":"Jacob Avila Camacho","author_link":"https:\/\/www.jacobsoft.com.mx\/es_mx\/author\/jacob-avila\/"},"coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/algoritmos\/\" class=\"advgb-post-tax-term\">Algoritmos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/algoritmos\/blockchain\/\" class=\"advgb-post-tax-term\">Blockchain<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">Machine Learning<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Algoritmos<\/span>","<span class=\"advgb-post-tax-term\">Blockchain<\/span>","<span class=\"advgb-post-tax-term\">Machine Learning<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">blockchain<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">Ciencia de Datos<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">Data Mining<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">Data Science<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">machine learning<\/a>","<a href=\"https:\/\/www.jacobsoft.com.mx\/es_mx\/category\/inteligencia-artificial\/machine-learning\/\" class=\"advgb-post-tax-term\">Miner\u00eda de Datos<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">blockchain<\/span>","<span class=\"advgb-post-tax-term\">Ciencia de Datos<\/span>","<span class=\"advgb-post-tax-term\">Data Mining<\/span>","<span class=\"advgb-post-tax-term\">Data Science<\/span>","<span class=\"advgb-post-tax-term\">machine learning<\/span>","<span class=\"advgb-post-tax-term\">Miner\u00eda de Datos<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Publicado 8 a\u00f1os hace","modified":"Actualizado 1 a\u00f1o hace"},"absolute_dates":{"created":"Publicado el octubre 31, 2018","modified":"Actualizado el febrero 20, 2025"},"absolute_dates_time":{"created":"Publicado el octubre 31, 2018 5:35 pm","modified":"Actualizado el febrero 20, 2025 1:37 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/comments?post=640"}],"version-history":[{"count":17,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/640\/revisions"}],"predecessor-version":[{"id":1773,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/posts\/640\/revisions\/1773"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media\/641"}],"wp:attachment":[{"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/media?parent=640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/categories?post=640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jacobsoft.com.mx\/es_mx\/wp-json\/wp\/v2\/tags?post=640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}