Clarity
Un lenguaje de contratos inteligentes diseñado para ser legible y predecible.

Dirígete a la Curso intensivo de Clarity para crear tu primer contrato inteligente en Clarity.
Clarity es un decidible lenguaje de contratos inteligentes que optimiza la previsibilidad y la seguridad, diseñado para la cadena de bloques Stacks. Se ha construido desde cero para facilitar a los desarrolladores la escritura de contratos inteligentes seguros y confiables. Clarity tiene varias características únicas que lo convierten en una opción ideal para escribir contratos inteligentes.
Las decisiones de diseño detrás de Clarity se basaron en gran medida en aprender de las vulnerabilidades comunes de Solidity y en crear un lenguaje diseñado específicamente pensando en la seguridad.
Qué hace diferente a Clarity
La siguiente sección es un extracto del libro de Clarity:
El número de lenguajes de contratos inteligentes crece cada año. Elegir un primer lenguaje puede ser un desafío, especialmente para un principiante. La elección está en gran medida dictada por el ecosistema que te interesa, aunque algunos lenguajes son aplicables a más de una plataforma. Cada lenguaje tiene sus ventajas y desventajas, y no entra en el ámbito de este libro analizarlos todos. En su lugar, nos centraremos en lo que distingue a Clarity y por qué es una opción principal si requieres la máxima seguridad y transparencia.
Uno de los preceptos fundamentales de Clarity es que es seguro por diseño. El proceso de diseño se guió examinando errores comunes, equivocaciones y vulnerabilidades en el campo de la ingeniería de contratos inteligentes en general. Hay innumerables ejemplos reales de cómo el fallo de un desarrollador llevó a la pérdida o el robo de enormes cantidades de tokens. Por nombrar dos grandes casos: un problema que pasó a conocerse como el bug de Parity provocó la pérdida irreparable de millones de dólares en Ethereum. En segundo lugar, el hackeo de The DAO (una "Organización Autónoma Descentralizada") causó un daño financiero tan grande que la Fundación Ethereum decidió emitir una controvertida bifurcación dura que deshizo el robo. Estos y muchos otros errores podrían haberse evitado en el propio diseño del lenguaje.
Clarity se interpreta, no se compila
El código de Clarity se interpreta y se registra en la cadena exactamente como está escrito. Solidity y otros lenguajes se compilan a bytecode antes de enviarse a la cadena. El peligro de los lenguajes compilados para contratos inteligentes es doble: primero, un compilador añade una capa de complejidad. Un error en el compilador puede generar un bytecode distinto al previsto y, por tanto, introduce el riesgo de vulnerabilidades. Segundo, el bytecode no es legible para humanos, lo que hace muy difícil verificar qué está haciendo realmente el contrato inteligente. Pregúntate: ¿firmarías un contrato que no puedes leer? Si tu respuesta es no, entonces ¿por qué debería ser diferente en el caso de los contratos inteligentes? Con Clarity, lo que ves es lo que obtienes.
Clarity es decidible
Un lenguaje decidible tiene la propiedad de que, a partir del propio código, puedes saber con certeza qué hará el programa. Esto evita problemas como el problema de la parada. Con Clarity sabes con seguridad que, dado cualquier entrada, el programa terminará en un número finito de pasos. En términos simples: está garantizado que la ejecución del programa terminará. La decidibilidad también permite un análisis estático completo del grafo de llamadas, de modo que obtienes una imagen precisa del coste exacto antes de la ejecución. No hay forma de que una llamada de Clarity se quede sin "gas" en medio de la llamada. Exploramos esta idea más a fondo, junto con una discusión sobre la completitud de Turing, en el análisis profundo de seguridad sobre la decidibilidad.
Clarity no permite reentrancia
La reentrancia es una situación en la que un contrato inteligente llama a otro, y este luego vuelve a llamar al primer contrato; la llamada "reingresa" en la misma lógica. Puede permitir que un atacante desencadene múltiples retiros de tokens antes de que el contrato haya tenido la oportunidad de actualizar su estado interno. El diseño de Clarity considera la reentrancia una característica no deseable y la prohíbe a nivel del lenguaje.
Clarity protege contra desbordamientos y subdesbordamientos
Los desbordamientos y subdesbordamientos ocurren cuando un cálculo da como resultado un número demasiado grande o demasiado pequeño para ser almacenado, respectivamente. Estos eventos desorganizan los contratos inteligentes y pueden ser provocados intencionalmente por atacantes en contratos mal escritos. Normalmente esto lleva a una situación en la que el contrato queda congelado o es vaciado de tokens. Cualquier tipo de desbordamiento o subdesbordamiento hace que una transacción se anule automáticamente en Clarity.
La compatibilidad con tokens personalizados está integrada
La emisión de tokens fungibles y no fungibles personalizados es un caso de uso popular para los contratos inteligentes. Las funciones de tokens personalizados están integradas en el lenguaje Clarity. Los desarrolladores no necesitan preocuparse por crear un estado interno, gestionar la oferta ni emitir eventos de tokens. La creación de tokens personalizados se cubre en profundidad en capítulos posteriores.
En Stacks, las transacciones están protegidas por condiciones posteriores
Para proteger aún más los tokens de los usuarios, se pueden adjuntar condiciones posteriores a las transacciones para afirmar que el estado de la cadena ha cambiado de cierta manera una vez finalizada la transacción. Por ejemplo, un usuario que llama a un contrato inteligente puede adjuntar una condición posterior que indique que, una vez completada la llamada, exactamente 500 STX deberían haber sido transferidos de una dirección a otra. Si la comprobación de la condición posterior falla, toda la transacción se revierte. Dado que la compatibilidad con tokens personalizados está integrada directamente en Clarity, las condiciones posteriores también pueden utilizarse para proteger cualquier otro token de la misma manera.
Las respuestas devueltas no pueden quedar sin verificar
Las llamadas públicas a contratos deben devolver una llamada respuesta que indique éxito o fracaso. Cualquier contrato que llame a otro contrato está obligado a gestionar correctamente la respuesta. Los contratos de Clarity que no lo hagan son inválidos y no pueden implementarse en la red. Otros lenguajes como Solidity permiten el uso de llamadas de bajo nivel sin exigir que se verifique el valor de retorno. Por ejemplo, una transferencia de tokens puede fallar en silencio si el desarrollador olvida comprobar el resultado. En Clarity no es posible ignorar los errores, aunque eso obviamente impide una gestión errónea de errores por parte del desarrollador. Las respuestas y la gestión de errores se tratan ampliamente en los capítulos sobre funciones y flujo de control.
Composición por encima de herencia
Clarity adopta la composición por encima de la herencia. Esto significa que los contratos inteligentes de Clarity no heredan unos de otros como ocurre en lenguajes como Solidity. En su lugar, los desarrolladores definen traits que luego son implementados por diferentes contratos inteligentes. Esto permite que los contratos se ajusten a distintas interfaces con mayor flexibilidad. No hay necesidad de preocuparse por árboles de clases complejos ni por contratos con comportamiento heredado implícito.
Acceso a la cadena base: Bitcoin
Los contratos inteligentes de Clarity pueden leer el estado de la cadena base de Bitcoin. ¡Esto significa que puedes usar transacciones de Bitcoin como desencadenante en tus contratos inteligentes! Clarity también incluye una serie de funciones integradas para verificar firmas secp256k1 y recuperar claves.
Última actualización
¿Te fue útil?