logo

Clarity vs Solidity - una comparación


[Traducción del artículo original en inglés publicado en Medium, firmado por Harini Anantha Rajan]

Clarity es el lenguaje de programación de smart contracts de Blockstack para su uso en la blockchain Stacks. Clarity sostiene el control programático de activos digitales dentro,de la blockchain Stacks (por ejemplo, nombres BNS, Stacks tokens, y más).

A diferencia de los lenguajes de programación Turing complete conocidos hasta hoy, Clarity es un lenguaje non-Turing complete que preste de evitar los problemas de un lenguaje de programación Turing complete, y también persigue ofrecer a los usuarios ala opción de hacer análisis estáticos con tiempo antes de que el código sea implementado.

En mi anterior artículo sobre Clarity, veíamos qué es Clarity y por qué está diseñado como un lenguaje interpretado y non-Turing complete. En este artículo podemos ver cómo Clarity se diferencia de uno de los lenguajes de programación de smart contracts más populares, Solidity.

Clarity vs Solidity

Empezaremos con lo más básico primero.

Solidity es el lenguaje utilizado para escribir programas de smart contract para ma blockchain Ethereum. Mientras Clarity es el lenguajethe language used to write smart contracts for the Stacks 2.0 blockchain.

Solidity fue inicialmente propuesto en 2014 por Gavin Wood y más adelante desarrollado por el equipo de desarrollo Solidiy del proyecto Ethereum. En el momento de escribir este artículo se encuentra en versión v0.7.

Clarity fue lanzado en Abril del presente año (2020) pero ya ha visto una explosión de interés y experimentación. Cientos de programas Clarity están esparcidos por Gitbub, con miembros de la comunidad poniendo en marcha más cada día.

Turing complete

Clarity es un lenguaje non-Turing, mientras que Solidity es un lenguaje Turing complete.

En un lenguaje de programaciónTuring complete como Solidity, puedes expresar por ejemplo infinite loops, mientras que en Clarity no puedes. En otras palabras, en Solidity podría no ser posible explorar todos los caminos de ejecución sin ejecutar realmente el código, en cambio en Clarity podemos analizar estáticamente todos los posibles resultados. Esto ayuda a los desarrolladores a analizar y descubrir fallos, antes incluso de implementar o ejecutar el código. Esto evita todo un mundo de progress a futuro, y en su conjunto la calidad del código mejora.

Estimación del Gas

Clarity es un lenguaje de programación decidible por diseño.

Una de las mayores de ventajas de Clarity por seer un lenguaje decible es que la resolución del contrato y la transacción de la tarifa se pueden garantizar, mientras que en Solidity éste no es el caso.

Compilador/No compilador

Clarity es un lenguaje de programación interpretado mientras que Solidity no lo es.

En Clarity, los contratos están escritos en forma legible por el ser humano y son accesibles por cualquier auditor profesional o observador ocasional. El código implementado en la blockchain Stacks 2.0 es “What You See Is What You Get”- Lo que ves es lo que te llevas, y previene que aparezcan fallos de complació. Por su parte en Solidity, el código fuente no es publicado, y sólo la versión compilada del código fuente es publicada en la blockchain. Esto plantea dificultades para auditar el código una vez introducido en la cadena.

Principios del Diseño

Cuando hablamos de los principios de diseño, Solidity difiere de Clarity por su uso de una programación de estilo imperativo (think C++, Python y JavaScript), mientras que Clarity utiliza un estilo funcional (think Scala, Scheme, and LISP).

Cuando hablamos de estructura, Solidity es un lenguaje de programación object-oriented que admite inheritance, libraries, y user-defined types. En su lugar, Clarity es not object-oriented y prioriza una sintaxis precisa y sin ambigüedades que permite a los desarrolladores predecir exactamente cómo sus contratos serán ejecutados.

Securidad

Si has oído hablar de los smart contracts, seguramente habrás oído sobre alguno de sus notables fallos. Cuantos más activos son creados y almacenados en smart contracts, sus vulnerabilidades se vuelven más consecuentes ya que el precio del dinero para su explotación aumenta.

Cuando hablamos de seguridad, Clarity tiene post-condiciones sobre los tokens. Esto permite a los usuarios defender proactivamente sus activos del robo o destrucción por atacantes desconocidos o errores desconocidos en otros contratos.

Además, el conjunto de código accesible en Clarity se puede determinar de manera eficiente, por lo que puede asegurarse de que una transacción solo ejecuta el código que ha examinado usted mismo primero. En Solidity, es mucho más difícil realizar un seguimiento de todos los tiempos de ejecución posibles de un contrato.

Ha habido unas cuantas vulnerabilidades alto perfil expuestas en torno a la industria de blockchain. En 2017, el DAO hack abusó de una vulnerabilidad de llamada recursiva - recursive call exploit - para destripar completamente uno de los casos de uso de smart contract más prometedores de las primeras blockchains. La duplicidad de entradas - re-entrance - siempre es una preocupación y es lo que ocasionó que la Parity multi-sig wallet perdiera alrededor de 30 millones de dólares en $ETH. El problema de detener, cuando un programa queda atrapado en un particular fragmento de código puede causar graves problemas computacionales, y es lo que obligó a Ethereum a implementar el sistema del gas.

Todas estas vulnerabilidades estaban de algún modo causadas por una innecesaria complejidad que acompaña a los lenguajes de programación Turing-complete como Solodity.

El apoyo de Clarity’s para tipos y comprobación de tipos elimina toda clase de errores como llamadas no intencionadas, vulnerabilidad por duplicidad de entradas, lectura de valores no inicializados, y un montón de vulnerabilidades de seguridad que no se previenen en Solidity.

Compruébalo en este ejemplo:

Ahora que hemos visto las diferencias de diseño entre Clarity y Solidity, veamos lo fácil que resulta empezar con Clarity vs. con Solidity.

Hay muchos marcos por ahí, como Truffle o OpenZeppelin, que ayudan a los desarrolladores a iniciarse en Solidity. Sin embargo, la sintaxis de Solidity no es muy clara y requier mucho tiempo el auditar programas.

Los documentos de Clarity son sencillos y legibles en su forma original. Marcos de desarrollo más avanzados como Truffle están en los trabajos (una idea de proyecto lateral para los más inspirados), pero todo lo que se necesita es un Node Js y un editor de texto.

Mira este otro ejemplo básico: el clásico programa ‘Hello World’ en clarity y en Solidity:

Hello world en Clarity

Hello world en Solidity

Para escribir y ejecutar contratos en Clarity, todo lo que se necesita es la última versión de Node JS, y un editor de texto o IDE a tu elección.

Prueba tu contrato con cualquiera de los nodos de Stacks (local o testnet). Llamamos con cariño al entorno local, un mock net, a diferencia del Testnet que que llamamos Argon. También hay un estupendo starter kit de Clarity, que ayuda a ponerse en marcha de forma incluso más fácil. Hay un montón de recursos, tutoriales, demos, boilerplates y Hackathons, al alcance para ponerse en marcha con Clarity.

Conclusión

Veamos el resumen de las diferencias entre Clarity y Solidity. Cada lenguaje de programación de smart contract tiene sus pros y sus contras, y he intentado anotar las diferencias entre Clarity y Solidity en este artículo. Si Clarity te interesa, busca en los documentos de Stacks - Stacks docs - y ponte en marcha! Construyamos un Internet nuevo en manos de los usuarios con un lenguaje de smart contracts más poderoso y seguro.

Articulo firmado por Harini Anantha Rajan (para el blog de BlockSurvey).

Traducción de Georgina García-Mauriño (Stacks advocate & Smartists co-founder)

Artículo original publicado en el Blog de BlockSurvey.
Sobre
Blocksurvey . BlockSurvey es una plataforma centrada en privacidad para la creación de encuestas y formularios con absoluta confidencialidad. A través de BlockSurvey, todos tus datos son encriptados end to end, y sólo tú puedes verlos. Tú eres el propietario de tus datos. Es tu derecho digital. No hay seguimiento alguno y te mantenemos como anónimo ante los colectores de datos. Nuestra plataforma utiliza Stacks, y ayuda a mantener la privacidad y la anonimidad, produciendo encuestas efectivas. ¡Prueba a crear tus encuestas con nosotros!

Share this story