{"id":47,"date":"2015-05-18T19:03:01","date_gmt":"2015-05-18T19:03:01","guid":{"rendered":"https:\/\/40933013.servicio-online.net\/?p=47"},"modified":"2024-05-26T18:51:43","modified_gmt":"2024-05-26T18:51:43","slug":"construyendo-una-blockchain-basica-en-python-parte-1","status":"publish","type":"post","link":"https:\/\/santiagomarquezsolis.com\/index.php\/2015\/05\/18\/construyendo-una-blockchain-basica-en-python-parte-1\/","title":{"rendered":"Construyendo una Blockchain B\u00e1sica en Python. Parte 1"},"content":{"rendered":"<p>En el mundo actual, la tecnolog\u00eda blockchain ha revolucionado la forma en que manejamos la seguridad, la transparencia y la descentralizaci\u00f3n. En este art\u00edculo, vamos a construir una blockchain b\u00e1sica en Python, que ser\u00e1 la base para a\u00f1adir nuevas funcionalidades en el futuro.<\/p>\n<h4>Introducci\u00f3n a la Blockchain<\/h4>\n<p>Una blockchain es esencialmente una cadena de bloques donde cada bloque contiene datos, un hash del bloque anterior, un nonce (n\u00famero utilizado una sola vez) y un hash actual. La integridad de la blockchain se mantiene mediante un proceso llamado \u00abminer\u00eda\u00bb, que implica resolver problemas complejos de prueba de trabajo (Proof of Work, PoW).<\/p>\n<h4>Definiendo las Clases Principales<\/h4>\n<p>Para nuestra implementaci\u00f3n b\u00e1sica, necesitamos definir varias clases esenciales: <span style=\"color: #ffff00;\"><code>Block<\/code><\/span>, <span style=\"color: #ffcc00;\"><code>Blockchain<\/code><\/span>, <span style=\"color: #ffcc00;\"><code>Transaction<\/code> <\/span>y <span style=\"color: #ffcc00;\"><code>Node<\/code><\/span>.<\/p>\n<ol>\n<li><strong>Clase <code>Block<\/code><\/strong><\/li>\n<\/ol>\n<p>La clase <code>Block<\/code> representa un bloque en la blockchain. Contiene informaci\u00f3n como el \u00edndice del bloque, las transacciones, la marca de tiempo, el hash del bloque anterior, el nonce y el hash actual del bloque.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-51 aligncenter\" src=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk1-300x230.png\" alt=\"\" width=\"571\" height=\"437\" srcset=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk1-300x230.png 300w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk1-768x588.png 768w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk1.png 885w\" sizes=\"auto, (max-width: 571px) 100vw, 571px\" \/><\/p>\n<ol start=\"2\">\n<li><strong>Clase <code>Blockchain<\/code><\/strong><\/li>\n<\/ol>\n<p>La clase <code>Blockchain<\/code> maneja la cadena de bloques. Inicializa con un bloque g\u00e9nesis y tiene m\u00e9todos para a\u00f1adir bloques y verificar la integridad de la cadena. Tambi\u00e9n maneja las transacciones pendientes, que se almacenan en una pila (estructura LIFO &#8211; Last In, First Out).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-53 aligncenter\" src=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk2-200x300.png\" alt=\"\" width=\"573\" height=\"860\" srcset=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk2-200x300.png 200w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk2-682x1024.png 682w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk2-768x1154.png 768w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/blk2.png 886w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/p>\n<ol start=\"3\">\n<li><strong>Clase <code>Transaction<\/code><\/strong><\/li>\n<\/ol>\n<p>La clase <code>Transaction<\/code> representa una transacci\u00f3n en la blockchain.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-99 aligncenter\" src=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/transaction-300x95.png\" alt=\"\" width=\"572\" height=\"181\" srcset=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/transaction-300x95.png 300w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/transaction-768x242.png 768w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/transaction.png 887w\" sizes=\"auto, (max-width: 572px) 100vw, 572px\" \/><\/p>\n<ol start=\"4\">\n<li><strong>Clase <code>Node<\/code><\/strong><\/li>\n<\/ol>\n<p>La clase <code>Node<\/code> es responsable de crear transacciones y a\u00f1adirlas a la pila de transacciones pendientes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-101 aligncenter\" src=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/node-300x86.png\" alt=\"\" width=\"565\" height=\"162\" srcset=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/node-300x86.png 300w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/node-768x220.png 768w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/node.png 887w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/p>\n<h4>Ejecuci\u00f3n y Prueba<\/h4>\n<p>Para probar nuestra implementaci\u00f3n, creamos una funci\u00f3n <code>main<\/code> que inicializa la blockchain y el nodo, crea varias transacciones, y mina un nuevo bloque con esas transacciones.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-103 aligncenter\" src=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/main-300x233.png\" alt=\"\" width=\"569\" height=\"442\" srcset=\"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/main-300x233.png 300w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/main-768x596.png 768w, https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2015\/05\/main.png 887w\" sizes=\"auto, (max-width: 569px) 100vw, 569px\" \/><\/p>\n<p>Este c\u00f3digo crear\u00e1 transacciones, las a\u00f1adir\u00e1 a la pila de transacciones pendientes, minar\u00e1 un nuevo bloque con esas transacciones, verificar\u00e1 la integridad de la cadena y mostrar\u00e1 la informaci\u00f3n de cada bloque en la consola.<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>Hemos construido una blockchain b\u00e1sica en Python que puede ser la base para futuras expansiones y mejoras. Algunas posibles funcionalidades adicionales que podr\u00edas a\u00f1adir incluyen:<\/p>\n<ul>\n<li><strong>Validaci\u00f3n de Transacciones<\/strong>: Asegurarse de que las transacciones sean v\u00e1lidas antes de a\u00f1adirlas a la blockchain.<\/li>\n<li><strong>Red P2P<\/strong>: Implementar una red peer-to-peer para que m\u00faltiples nodos puedan interactuar entre s\u00ed.<\/li>\n<li><strong>Contratos Inteligentes<\/strong>: A\u00f1adir soporte para contratos inteligentes que ejecuten c\u00f3digo autom\u00e1ticamente en la blockchain.<\/li>\n<\/ul>\n<p>Esta implementaci\u00f3n b\u00e1sica es solo el comienzo. Con esta base, puedes explorar y desarrollar aplicaciones m\u00e1s complejas y robustas en el fascinante mundo de la tecnolog\u00eda blockchain. \u00a1Feliz codificaci\u00f3n!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el mundo actual, la tecnolog\u00eda blockchain ha revolucionado la forma en que manejamos la seguridad, la transparencia y la descentralizaci\u00f3n. En este art\u00edculo, vamos a construir una blockchain b\u00e1sica en Python, que ser\u00e1 la base para a\u00f1adir nuevas funcionalidades en el futuro. Introducci\u00f3n a la Blockchain Una blockchain es esencialmente una cadena de bloques [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":48,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,2,12],"tags":[16,17,18],"class_list":["post-47","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blockchain","category-blog","category-cripto","tag-blockchain","tag-cripto","tag-python"],"jetpack_featured_media_url":"https:\/\/santiagomarquezsolis.com\/wp-content\/uploads\/2024\/05\/blockchain-e1716059059216.webp","_links":{"self":[{"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/posts\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":10,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/posts\/47\/revisions\/104"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/media\/48"}],"wp:attachment":[{"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/santiagomarquezsolis.com\/index.php\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}