{"id":30459,"date":"2024-04-09T10:00:26","date_gmt":"2024-04-09T08:00:26","guid":{"rendered":"https:\/\/www.metafrase.com\/blog\/?p=30459"},"modified":"2024-04-01T19:09:29","modified_gmt":"2024-04-01T17:09:29","slug":"seguridad-y-auditorias-en-smart-contracts","status":"publish","type":"post","link":"https:\/\/www.metafrase.com\/blog\/seguridad-y-auditorias-en-smart-contracts\/","title":{"rendered":"Seguridad y auditorias en smart contracts"},"content":{"rendered":"<p>Los smart contracts (contratos inteligentes) son programas que se ejecutan en una plataforma <a href=\"https:\/\/www.metafrase.com\/blog\/seguridad-y-ataques-en-redes-blockchain\/\">blockchain<\/a> cuando se cumplen ciertas condiciones definidas en los contratos. Estos contratos se han vuelto fundamentales en los ecosistemas de las criptomonedas y proyectos blockchain, ya que permiten automatizar y garantizar la ejecuci\u00f3n de acuerdos sin la necesidad de intermediarios.<\/p>\n<p>El presente art\u00edculo tiene como objetivo analizar la seguridad de estos contratos desde el punto de vista del desarrollador, analizando las principales vulnerabilidades que se pueden producir en estas aplicaciones. Un error o una vulnerabilidad en un contrato inteligente puede resultar en la p\u00e9rdida de activos digitales, violaci\u00f3n de la privacidad o incluso la manipulaci\u00f3n de un sistema descentralizado.<\/p>\n<h2>Introducci\u00f3n al OWASP Smart Contract Top 10<\/h2>\n<p>El proyecto <b>OWASP Smart Contract Top 10 [1]<\/b> tiene como objetivo ofrecer a los desarrolladores y a los equipos de seguridad informaci\u00f3n sobre las 10 principales vulnerabilidades encontradas en los contratos inteligentes, que se pueden resumir en los siguientes:<\/p>\n<ul>\n<li><b>Reentrancy Attacks (Ataques de reentrada): <\/b>Vulnerabilidad que se produce cuando un atacante puede llamar repetidamente a una funci\u00f3n dentro de un contrato inteligente, aprovechando el hecho de que el estado del contrato no se ha actualizado como se esperaba.<\/li>\n<li><b>Integer Overflow and Underflow (Desbordamiento de enteros<\/b>). Esta vulnerabilidad se produce cuando las operaciones aritm\u00e9ticas exceden el tama\u00f1o m\u00e1ximo o m\u00ednimo que una variable de tipo entero puede contener, lo que hace que el valor se ajuste al extremo opuesto<\/li>\n<li><b>Timestamp Dependence (Dependencia del timestamp).<\/b> Un contrato podr\u00eda ser vulnerable si el comportamiento del mismo depende de la marca de tiempo del bloque en el que est\u00e1 incluido. Esto se debe a que los mineros tienen cierto grado de control sobre la marca de tiempo del bloque.<\/li>\n<\/ul>\n<ul>\n<li><b>Access Control Vulnerabilities (Vulnerabilidades de control de acceso). <\/b>La falta de controles de acceso adecuados puede permitir a cualquiera realizar operaciones cr\u00edticas, como transferencias de activos, sin necesidad de la autenticaci\u00f3n y autorizaci\u00f3n adecuadas.<\/li>\n<li><b>Front running.<\/b> Es una vulnerabilidad donde un atacante puede observar una transacci\u00f3n pendiente y luego su propia transacci\u00f3n con una tarifa de gas m\u00e1s alta, incentivando a los mineros a incluirla primero en la cadena de bloques. Esto es posible en redes p\u00fablicas de blockchain como <b>Ethereum [2, 3]<\/b>, donde los datos de las transacciones son accesibles p\u00fablicamente antes de ser extra\u00eddos.<\/li>\n<\/ul>\n<ul>\n<li><b>Denial of Service (DoS) Attacks (Ataques de Denegaci\u00f3n de Servicio). <\/b>Los ataques DoS tienen como objetivo hacer que un contrato no est\u00e9 disponible para ser ejecutado dentro de la cadena de bloques. En los contratos inteligentes, en el caso de redes como <b>Ethereum [2, 3] <\/b>esto podr\u00eda lograrse consumiendo todo el gas disponible o provocando que las transacciones fallen de forma ilimitada.<\/li>\n<\/ul>\n<ul>\n<li><b>Logic Errors (Errores de l\u00f3gica). <\/b>Son un tipo de error en la programaci\u00f3n de software que no producen error o excepciones en tiempo de ejecuci\u00f3n, pero que podr\u00edan hacer que el contrato se comporte de forma incorrecta. Estos errores, a menudo son dif\u00edciles de detectar porque el c\u00f3digo se ejecuta, pero no produce los resultados esperados debido a un error en la l\u00f3gica de programaci\u00f3n.<\/li>\n<\/ul>\n<ul>\n<li><b>Insecure Randomness<\/b>. Se refiere a una vulnerabilidad en la que la generaci\u00f3n de n\u00fameros aleatorios en un sistema o aplicaci\u00f3n no es lo suficientemente segura o impredecible. Esto puede ser especialmente problem\u00e1tico en el contexto de la criptograf\u00eda y la seguridad de aplicaciones, ya que una aleatoriedad insuficiente puede hacer que los datos y claves sean predecibles y, por lo tanto, vulnerables a ataques.<\/li>\n<li><b>Gas Limit Vulnerabilities (Vulnerabilidades de l\u00edmite de gas).<\/b> En el caso de la blockchain de <b>Ethereum [3]\u00a0 <\/b>cada bloque tiene definido un l\u00edmite de gas, lo que restringe la cantidad de operaciones que puede incluir ese bloque. Si una funci\u00f3n dentro de un contrato requiere m\u00e1s gas que este l\u00edmite, podr\u00eda congelar los fondos de ese contrato.<\/li>\n<li><b>Unchecked External Calls. <\/b>En <b>Ethereum [2]<\/b>, cuando un contrato llama a otro contrato, el contrato llamado puede fallar sin generar una excepci\u00f3n. Si el contrato de llamada no verifica el resultado de la llamada, podr\u00eda asumir que la llamada fue exitosa, incluso si no lo fue.<\/li>\n<\/ul>\n<h2>Lenguaje de programaci\u00f3n solidity para smart contracts<\/h2>\n<p>Solidity [4] es un lenguaje de programaci\u00f3n espec\u00edficamente dise\u00f1ado para escribir contratos inteligentes en plataformas de cadena de bloques, como Ethereum. Algunas de las implicaciones de utilizar Solidity para escribir smart contracts incluyen:<\/p>\n<ul>\n<li><b>Seguridad<\/b>: Solidity est\u00e1 dise\u00f1ado con caracter\u00edsticas de seguridad que ayudan a prevenir vulnerabilidades comunes en los contratos inteligentes, como ataques de reentrancia y desbordamientos de enteros. Sin embargo, los desarrolladores deben tener un profundo entendimiento de las mejores pr\u00e1cticas de seguridad y las peculiaridades del lenguaje para evitar errores costosos.<\/li>\n<li><b>Ejecuci\u00f3n en la cadena de bloques<\/b>: Los contratos inteligentes escritos en Solidity se ejecutan en la cadena de bloques y forman parte de su estado. Esto implica que una vez desplegados, los contratos inteligentes son inmutables y pueden interactuar con otros contratos y usuarios en la cadena de bloques.<\/li>\n<li><b>Interoperabilidad<\/b>: Solidity es ampliamente utilizado en la comunidad de Ethereum y es compatible con una variedad de herramientas y bibliotecas que facilitan el desarrollo de contratos inteligentes. Esto permite una mayor interoperabilidad entre diferentes aplicaciones descentralizadas (dApps) que se ejecutan en la misma cadena de bloques.<\/li>\n<li><b>Complejidad<\/b>: Es importante tener en cuenta que Solidity puede ser complejo de dominar, especialmente para aquellos que no tienen experiencia previa en desarrollo de contratos inteligentes o programaci\u00f3n en blockchain. Requiere un entendimiento profundo de conceptos como transacciones, gas, almacenamiento de datos y estructuras de control espec\u00edficas de Solidity.<\/li>\n<li><b>Evoluci\u00f3n continua<\/b>: Solidity es un lenguaje en constante evoluci\u00f3n, con actualizaciones frecuentes y nuevas caracter\u00edsticas introducidas regularmente. Los desarrolladores deben mantenerse actualizados con las \u00faltimas versiones y pr\u00e1cticas recomendadas para aprovechar al m\u00e1ximo el potencial del lenguaje y garantizar la seguridad y eficacia de sus contratos inteligentes.<\/li>\n<\/ul>\n<h2>Ethereum Virtual Machine (EVM)<\/h2>\n<p>La Ethereum Virtual Machine (EVM) es una parte fundamental del ecosistema de Ethereum y es esencial para el funcionamiento de la red. Entre las principales caracter\u00edsticas de la Ethereum Virtual Machine podemos destacar:<\/p>\n<ul>\n<li><b>Ejecuci\u00f3n de contratos inteligentes:<\/b> La EVM es una m\u00e1quina virtual Turing completa que ejecuta los contratos inteligentes escritos en lenguajes como Solidity. Los contratos inteligentes son programas inform\u00e1ticos que se ejecutan en la cadena de bloques y permiten la automatizaci\u00f3n de acuerdos y transacciones sin la necesidad de intermediarios.<\/li>\n<li><b>Seguridad y confiabilidad:<\/b> La EVM est\u00e1 dise\u00f1ada para garantizar la seguridad y la confiabilidad de los contratos inteligentes. Utiliza un modelo de ejecuci\u00f3n determinista, lo que significa que todas las transacciones se ejecutan de la misma manera en todos los nodos de la red, lo que garantiza la consistencia y la integridad de los resultados.<\/li>\n<li><b>Gas y costo de transacci\u00f3n:<\/b> La EVM utiliza una unidad de medida llamada \u00abgas\u00bb para calcular el costo de ejecutar operaciones y contratos en la red. Los usuarios deben pagar una cierta cantidad de gas para ejecutar transacciones y contratos, y el costo total de una transacci\u00f3n se calcula multiplicando el precio del gas por el consumo de gas de la transacci\u00f3n.<\/li>\n<li><b>Interoperabilidad<\/b>: La EVM es compatible con una amplia variedad de lenguajes de programaci\u00f3n y herramientas de desarrollo, lo que permite a los desarrolladores crear una amplia gama de aplicaciones descentralizadas (dApps) y contratos inteligentes en la plataforma Ethereum.<\/li>\n<\/ul>\n<p>En la siguiente imagen vemos la arquitectura de la EVM y los diferentes elementos que la componen para ejecutar los smart contracts:<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-30460 lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" alt=\"\" width=\"317\" height=\"380\" sizes=\"(max-width: 317px) 100vw, 317px\" data-src=\"http:\/\/www.metafrase.com\/blog\/wp-content\/uploads\/sites\/4\/2024\/04\/Ethereum-architecture-3EVM-The-Ethereum-Virtual-Machine-serves-as-the-environment-in-250x300.png\" data-srcset=\"https:\/\/www.metafrase.com\/blog\/wp-content\/uploads\/sites\/4\/2024\/04\/Ethereum-architecture-3EVM-The-Ethereum-Virtual-Machine-serves-as-the-environment-in-250x300.png 250w, https:\/\/www.metafrase.com\/blog\/wp-content\/uploads\/sites\/4\/2024\/04\/Ethereum-architecture-3EVM-The-Ethereum-Virtual-Machine-serves-as-the-environment-in.png 451w\"><\/p>\n<p><strong>Referencia<\/strong>:<a href=\"https:\/\/www.researchgate.net\/publication\/366170214_Fundraising_Tracking_System_Using_Blockchain\" target=\"_blank\" rel=\"noopener\">https:\/\/www.researchgate.net\/publication\/366170214_Fundraising_Tracking_System_Using_Blockchain<\/a><\/p>\n<h2>El papel del desarrollador en los smart contracts<\/h2>\n<p>Como hemos comentado, los errores en la l\u00f3gica de programaci\u00f3n son un tipo de error en la programaci\u00f3n de software que no producen fallos o excepciones en tiempo de ejecuci\u00f3n, pero que causan un comportamiento incorrecto o no deseado en la aplicaci\u00f3n. Estos errores son dif\u00edciles de detectar porque el c\u00f3digo se ejecuta sin problemas, pero no produce los resultados esperados debido a errores en la l\u00f3gica de programaci\u00f3n. A continuaci\u00f3n, comentamos algunos ejemplo de errores de l\u00f3gica:<\/p>\n<ul>\n<li><b>Errores de l\u00f3gica de negocio:<\/b> No reflejar correctamente las reglas de negocio en el c\u00f3digo, puede llevar a comportamientos incoherentes o incorrectos en una aplicaci\u00f3n.<\/li>\n<li><b>Orden de operaciones incorrecto:<\/b> Cuando se realizan c\u00e1lculos o acciones en un orden incorrecto, lo que lleva a resultados incorrectos. Por ejemplo, realizar una suma antes de una multiplicaci\u00f3n cuando la l\u00f3gica requer\u00eda lo contrario.<\/li>\n<li><b>Condicionales incorrectos<\/b>: Usar una condici\u00f3n incorrecta en una estructura condicional (como un if o un switch) que no refleja la intenci\u00f3n del programa. Esto puede llevar a que se tomen decisiones incorrectas.<\/li>\n<li><b>Bucles infinitos<\/b>: Crear bucles que no terminan cuando deber\u00edan o que terminan antes de lo debido debido a una condici\u00f3n incorrecta.<\/li>\n<li><b>Asignaci\u00f3n de variables incorrectas<\/b>: Asignar un valor incorrecto a una variable, lo que puede afectar el funcionamiento de otras partes del c\u00f3digo.<\/li>\n<li><b>Errores de c\u00e1lculo:<\/b> Realizar c\u00e1lculos incorrectos, como errores en las f\u00f3rmulas matem\u00e1ticas o l\u00f3gicas utilizadas en la aplicaci\u00f3n.<\/li>\n<\/ul>\n<p>La mayor\u00eda de estos errores son especialmente dif\u00edciles de depurar porque el c\u00f3digo no devuelve excepciones ni errores, sin embargo la aplicaci\u00f3n se ejecuta sin problemas en t\u00e9rminos de funcionamiento. Para encontrar y corregir estos errores, normalmente se requiere una comprensi\u00f3n profunda del dise\u00f1o y la l\u00f3gica de la aplicaci\u00f3n, as\u00ed como realizar pruebas exhaustivas y de revisi\u00f3n de c\u00f3digo por parte de desarrolladores y equipos de calidad.<\/p>\n<p>Las t\u00e9cnicas de depuraci\u00f3n, el an\u00e1lisis de flujo del programa y la revisi\u00f3n de c\u00f3digo son herramientas \u00fatiles para detectar y solucionar errores en la l\u00f3gica del programa. Adem\u00e1s, la adopci\u00f3n de buenas pr\u00e1cticas de dise\u00f1o de c\u00f3digo pueden ayudar a prevenir la aparici\u00f3n de estos errores.<\/p>\n<p>De esta forma, el papel del desarrollador en la creaci\u00f3n y gesti\u00f3n de smart contracts es fundamental para garantizar que estos contratos inteligentes sean seguros, funcionales y cumplan con los requisitos del proyecto. Aqu\u00ed tienes un resumen de las responsabilidades y tareas del desarrollador en relaci\u00f3n con los smart contracts:<b><\/b><\/p>\n<ul>\n<li><b>Dise\u00f1o y planificaci\u00f3n:<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Identificaci\u00f3n de los requisitos del contrato inteligente, incluyendo sus funciones, par\u00e1metros y reglas de negocio.<\/li>\n<li>Dise\u00f1o de la arquitectura y la estructura del contrato inteligente.<\/li>\n<li>Planificaci\u00f3n de las interacciones con otros contratos y componentes del ecosistema blockchain.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><b>Desarrollo y codificaci\u00f3n:<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Escritura del c\u00f3digo del contrato inteligente en un lenguaje de programaci\u00f3n compatible con la plataforma blockchain (por ejemplo, Solidity en Ethereum).<\/li>\n<li>Implementaci\u00f3n de las funciones y l\u00f3gica del contrato, incluyendo la gesti\u00f3n de datos y la interacci\u00f3n con otros contratos o activos.<\/li>\n<li>Uso de buenas pr\u00e1cticas de programaci\u00f3n y patrones de dise\u00f1o para garantizar la seguridad y eficiencia del contrato.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><b>Auditor\u00edas de seguridad:<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Identificaci\u00f3n y mitigaci\u00f3n de vulnerabilidades de seguridad como las mencionadas en el <b>OWASP Smart Contract Top 10 [1].<\/b><\/li>\n<li>Realizaci\u00f3n de auditor\u00edas de seguridad o revisiones de c\u00f3digo por parte de expertos en seguridad.<\/li>\n<li>Implementaci\u00f3n de patrones de seguridad recomendados, como el uso de la librer\u00eda <b>OpenZeppelin [4,5,6].<\/b><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><b>Pruebas unitarias y de integraci\u00f3n:<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Creaci\u00f3n y ejecuci\u00f3n de pruebas unitarias y pruebas de integraci\u00f3n para verificar el comportamiento y la funcionalidad del contrato inteligente.<\/li>\n<li>Pruebas exhaustivas para simular escenarios de uso real y comprobar el cumplimiento de los requisitos.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li><b>Despliegue y gesti\u00f3n:<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none\">\n<ul>\n<li>Despliegue del contrato inteligente en la blockchain de destino.<\/li>\n<li>Gesti\u00f3n de las direcciones de contrato y las actualizaciones.<\/li>\n<li>Establecimiento de pol\u00edticas de actualizaci\u00f3n y gobernanza.<\/li>\n<\/ul>\n<\/li>\n<li><b>Documentaci\u00f3n<\/b>:\n<ul>\n<li>Creaci\u00f3n de documentaci\u00f3n t\u00e9cnica y de usuario para el contrato inteligente.<\/li>\n<li>Descripci\u00f3n de las funciones, par\u00e1metros, eventos y pol\u00edticas de uso.<\/li>\n<li>Documentaci\u00f3n de los procedimientos de actualizaci\u00f3n y mantenimiento.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>En resumen, el papel del desarrollador en los smart contracts requiere una comprensi\u00f3n profunda de la plataforma blockchain, as\u00ed como habilidades de programaci\u00f3n, seguridad y buenas pr\u00e1cticas de desarrollo. La seguridad es particularmente cr\u00edtica en la creaci\u00f3n de smart contracts, ya que cualquier vulnerabilidad podr\u00eda resultar en la p\u00e9rdida de activos o datos, por lo que la auditor\u00eda y la revisi\u00f3n de c\u00f3digo por parte de expertos en seguridad son pasos importantes en el proceso de desarrollo.<\/p>\n<h2>Herramientas para realizar auditor\u00edas de seguridad<\/h2>\n<p>Existen varias herramientas y servicios que podemos utilizar para llevar a cabo auditor\u00edas y pruebas de seguridad en smart contracts. Estas herramientas ayudan a identificar vulnerabilidades y errores en el c\u00f3digo antes de su implementaci\u00f3n en la blockchain. Entre las principales herramientas y servicios podemos destacar:<\/p>\n<ul>\n<li><b>Slither[7]<\/b>: Herramienta de c\u00f3digo abierto dise\u00f1ada para la detecci\u00f3n de vulnerabilidades en contratos inteligentes de Ethereum. Proporciona an\u00e1lisis est\u00e1tico y tiene la capacidad de identificar problemas como ataques de reentrada y de desbordamiento.<\/li>\n<li><b>Securify[8]<\/b>: Herramienta de an\u00e1lisis de seguridad para contratos inteligentes en Ethereum que utiliza an\u00e1lisis est\u00e1ticos para detectar vulnerabilidades.<\/li>\n<li><b>Consensys Diligence[9]<\/b>: Ofrecen auditor\u00edas de seguridad profesionales y tienen una amplia experiencia en la revisi\u00f3n de smart contracts.<\/li>\n<li><b>Quantstamp[10]<\/b>: Firma de auditor\u00edas de seguridad que utiliza an\u00e1lisis est\u00e1ticos y din\u00e1micos para identificar vulnerabilidades en contratos inteligentes.<\/li>\n<\/ul>\n<p>Entre las principales caracter\u00edsticas que ofrecen estas herramientas podemos destacar:<\/p>\n<ul>\n<li><b>An\u00e1lisis de vulnerabilidades:<\/b> Utilizan un conjunto de reglas predefinidas para buscar posibles vulnerabilidades en el c\u00f3digo. Puede detectar problemas como el desbordamiento de enteros, condiciones de carrera, problemas de acceso a la informaci\u00f3n y otras vulnerabilidades comunes.<\/li>\n<li><b>Integraci\u00f3n con herramientas de desarrollo<\/b>: Se pueden integrar f\u00e1cilmente en el flujo de trabajo de desarrollo de smart contracts. Pueden ser utilizados desde la l\u00ednea de comandos, como una biblioteca en otro programa o incluirse en nuestro pipeline de desarrollo.<\/li>\n<li><b>Informes detallados:<\/b> Proporcionan informes detallados sobre las vulnerabilidades y debilidades encontradas en el c\u00f3digo. Estos informes incluyen descripciones de los problemas, ubicaciones exactas en el c\u00f3digo fuente y recomendaciones para corregirlos.<\/li>\n<\/ul>\n<p><b>Referencias:<\/b><\/p>\n<p>[1] <a href=\"https:\/\/owasp.org\/www-project-smart-contract-top-10\/\" target=\"_blank\" rel=\"noopener\">https:\/\/owasp.org\/www-project-smart-contract-top-10\/<\/a><\/p>\n<p>[2] <a href=\"https:\/\/ethereum.org\/es\" target=\"_blank\" rel=\"noopener\">https:\/\/ethereum.org\/es<\/a><\/p>\n<p>[3] <a href=\"https:\/\/ethereum.org\/es\/developers\/docs\/gas\/#what-is-gas\" target=\"_blank\" rel=\"noopener\">https:\/\/ethereum.org\/es\/developers\/docs\/gas\/#what-is-gas<\/a><\/p>\n<p>[4] <a href=\"https:\/\/solidity-es.readthedocs.io\" target=\"_blank\" rel=\"noopener\">https:\/\/solidity-es.readthedocs.io<\/a><\/p>\n<p>[5] <a href=\"https:\/\/www.openzeppelin.com\/contracts\" target=\"_blank\" rel=\"noopener\">https:\/\/www.openzeppelin.com\/contracts<\/a><\/p>\n<p>[6] <a href=\"https:\/\/github.com\/OpenZeppelin\/openzeppelin-contracts\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/OpenZeppelin\/openzeppelin-contracts<\/a><\/p>\n<p>[7] <a href=\"https:\/\/github.com\/crytic\/slither\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/crytic\/slither<\/a><\/p>\n<p>[8] <a href=\"https:\/\/github.com\/eth-sri\/securify2\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/eth-sri\/securify2<\/a><\/p>\n<p>[9] <a href=\"https:\/\/consensys.io\/diligence\" target=\"_blank\" rel=\"noopener\">https:\/\/consensys.io\/diligence<\/a><\/p>\n<p>[10] <a href=\"https:\/\/quantstamp.com\" target=\"_blank\" rel=\"noopener\">https:\/\/quantstamp.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los smart contracts (contratos inteligentes) son programas que se ejecutan en una plataforma blockchain cuando se cumplen ciertas condiciones definidas en los contratos. Estos contratos se han vuelto fundamentales en los ecosistemas de las criptomonedas y proyectos blockchain, ya que permiten automatizar y garantizar la ejecuci\u00f3n de acuerdos sin la necesidad de intermediarios. El presente [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":30468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[139,150,149],"class_list":["post-30459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria","tag-blockchain","tag-contratos-inteligentes","tag-smart-contracts"],"_links":{"self":[{"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/posts\/30459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/comments?post=30459"}],"version-history":[{"count":7,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/posts\/30459\/revisions"}],"predecessor-version":[{"id":30467,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/posts\/30459\/revisions\/30467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/media\/30468"}],"wp:attachment":[{"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/media?parent=30459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/categories?post=30459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.metafrase.com\/blog\/wp-json\/wp\/v2\/tags?post=30459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}