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

Dirígete a Curso intensivo de Clarity para construir 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. Ha sido construido desde cero para facilitar a los desarrolladores la escritura de contratos inteligentes seguros y protegidos. 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 explotaciones comunes de Solidity y en crear un lenguaje diseñado específicamente con la seguridad y la protección en mente.
Qué hace a Clarity diferente
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á dictada en gran medida por el ecosistema que te interese, aunque algunos lenguajes son aplicables a más de una plataforma. Cada lenguaje tiene sus ventajas y desventajas y está fuera del alcance de este libro analizar todos ellos. En su lugar, nos centraremos en lo que distingue a Clarity y por qué es una elección principal si requieres la máxima seguridad y transparencia.
Uno de los preceptos centrales de Clarity es que es seguro por diseño. El proceso de diseño se guió examinando los errores comunes, fallos y vulnerabilidades en el campo de la ingeniería de contratos inteligentes en su conjunto. Existen innumerables ejemplos del mundo real donde la falla del desarrollador condujo a la pérdida o el robo de grandes cantidades de tokens. Para nombrar dos grandes: un problema que se ha conocido como el error de Parity llevó a 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 un hard fork polémico que deshizo el robo. Estos y muchos otros errores podrían haberse prevenido en el diseño del propio lenguaje.
Clarity es interpretado, no compilado
El código 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 de contratos inteligentes compilados es doble: primero, un compilador añade una capa de complejidad. Un error en el compilador puede llevar a un bytecode diferente del intencionado y por tanto conlleva el riesgo de introducir una vulnerabilidad. Segundo, el bytecode no es legible por 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 para 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 detención. Con Clarity sabes con seguridad que, dado cualquier entrada, el programa se detendrá en un número finito de pasos. En términos simples: se garantiza que la ejecución del programa terminará. La decidibilidad también permite un análisis estático completo del grafo de llamadas para que obtengas una imagen precisa del costo exacto antes de la ejecución. No hay forma de que una llamada en 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 de seguridad sobre decidibilidad.
Clarity no permite reentradas
La reentrancia es una situación en la que un contrato inteligente llama a otro, que luego vuelve a llamar al primer contrato—la llamada "reingresa" la misma lógica. Puede permitir que un atacante provoque múltiples retiros de tokens antes de que el contrato tenga la oportunidad de actualizar su contabilidad interna. El diseño de Clarity considera la reentrancia como una anti-característica 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 que es demasiado grande o demasiado pequeño para ser almacenado, respectivamente. Estos eventos sumen a los contratos inteligentes en el caos y pueden ser desencadenados intencionalmente en contratos mal escritos por atacantes. Normalmente esto conduce a una situación en la que el contrato queda congelado o agotado de tokens. Los desbordamientos y subdesbordamientos de cualquier tipo hacen que la transacción se aborte automáticamente en Clarity.
El soporte para tokens personalizados está integrado
La emisión de tokens fungibles y no fungibles personalizados es un caso de uso popular para los contratos inteligentes. Las funcionalidades de tokens personalizados están integradas en el lenguaje Clarity. Los desarrolladores no necesitan preocuparse por crear una contabilidad interna, gestionar la oferta o emitir eventos de tokens. La creación de tokens personalizados se trata en profundidad en capítulos posteriores.
En Stacks, las transacciones se aseguran mediante condiciones posteriores
Para salvaguardar 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 que la transacción ha finalizado. Por ejemplo, un usuario que invoque un contrato inteligente puede adjuntar una condición posterior que indique que, después de que la llamada se complete, exactamente 500 STX deberían haberse transferido de una dirección a otra. Si la verificación de la condición posterior falla, entonces toda la transacción se revierte. Dado que el soporte de tokens personalizados está integrado directamente en Clarity, las condiciones posteriores también pueden usarse 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 denominada response que indica éxito o fracaso. Cualquier contrato que llame a otro está obligado a manejar correctamente la respuesta. Los contratos Clarity que no lo hagan son inválidos y no pueden desplegarse en la red. Otros lenguajes como Solidity permiten el uso de llamadas de bajo nivel sin requerir que se compruebe el valor devuelto. Por ejemplo, una transferencia de tokens puede fallar silenciosamente si el desarrollador olvida comprobar el resultado. En Clarity no es posible ignorar errores, aunque eso obviamente previene el manejo de errores con bugs por parte del desarrollador. Las responses y el manejo de errores se tratan extensamente en los capítulos sobre funciones y flujo de control.
Composición en lugar de herencia
Clarity adopta la composición en lugar de la herencia. Esto significa que los contratos inteligentes Clarity no heredan unos de otros como se ve en lenguajes como Solidity. En su lugar, los desarrolladores definen traits que luego son implementados por diferentes contratos inteligentes. Esto permite que los contratos cumplan con distintas interfaces con mayor flexibilidad. No hay necesidad de preocuparse por árboles de clases complejos ni por contratos con comportamientos heredados implícitos.
Acceso a la cadena base: Bitcoin
Los contratos inteligentes Clarity pueden leer el estado de la cadena base de Bitcoin. Esto significa que puedes usar transacciones de Bitcoin como un disparador 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?