> For the complete documentation index, see [llms.txt](https://docs.stacks.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stacks.co/learn/es/clarity.md).

# Clarity

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

<div data-with-frame="true"><figure><img src="https://3385590278-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH74xqoobupBWwBsVMJhK%2Fuploads%2FhNoJj4p1Tn1ICZ3RHBqb%2Fclarity-cover.png?alt=media&amp;token=bfe03cb2-6bc9-4bd7-840c-bd5a5b3d6e84" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Ve al [Curso intensivo de Clarity](/get-started/clarity-crash-course.md) para crear tu primer contrato inteligente de Clarity.
{% endhint %}

Clarity es un **decidible** lenguaje de contratos inteligentes que optimiza la previsibilidad y la seguridad, diseñado para la blockchain de Stacks. Se ha 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 los errores comunes en Solidity y en crear un lenguaje diseñado específicamente pensando en la seguridad.

{% hint style="info" %}
La versión actual del lenguaje es Clarity 6, que se activó con Epoch 4.0 en el bloque de Bitcoin 960,230 ([SIP-044](https://github.com/stacksgov/sips/blob/main/sips/sip-044/sip-044-clarity6.md)). Una implementación de contrato que no establece una versión obtiene Clarity 6. Una transacción de despliegue todavía puede fijar una versión anterior, y las herramientas pueden establecer su propio valor predeterminado: `@stacks/transactions` 7.6.0 se despliega como Clarity 4 a menos que pases `clarityVersion`. La [referencia de funciones](https://docs.stacks.co/reference/clarity/functions) marca cada función incorporada con la versión que la introdujo.
{% endhint %}

### Qué hace diferente a Clarity

La siguiente sección es un extracto de [el libro de Clarity](https://book.clarity-lang.org/ch00-00-introduction.html):

El número de lenguajes de contratos inteligentes crece cada año. Elegir un primer lenguaje puede ser difícil, especialmente para un principiante. La elección está determinada en gran medida por el ecosistema que te interese, aunque algunos lenguajes son aplicables a más de una plataforma. Cada lenguaje tiene sus propias ventajas y desventajas, y no es objetivo de este libro analizarlas todas. En su lugar, nos centraremos en lo que distingue a Clarity y en por qué es una opción principal si necesitas la máxima seguridad y transparencia.

Uno de los principios fundamentales de Clarity es que es seguro por diseño. El proceso de diseño se guió examinando los errores, fallos y vulnerabilidades comunes en el campo de la ingeniería de contratos inteligentes en su conjunto. Hay innumerables ejemplos reales de cómo el fracaso de un desarrollador llevó a la pérdida o al robo de enormes cantidades de tokens. Por nombrar dos casos importantes: un problema que llegó 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ó realizar un controvertido hard fork que deshizo el robo. Estos y muchos otros errores podrían haberse evitado en el diseño del propio 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 código de bytes 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 dar lugar a un código de bytes distinto del previsto y, por tanto, introduce el riesgo de una vulnerabilidad. Segundo, el código de bytes no es legible por humanos, lo que dificulta mucho verificar qué está haciendo realmente el contrato inteligente. Pregúntate: ¿firmarías un contrato que no puedes leer? Si tu respuesta es no, ¿por qué debería ser diferente con 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 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, 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 mitad 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 la reentrancia

La reentrancia es una situación en la que un contrato inteligente llama a otro, que a su vez llama de vuelta al primer contrato: la llamada "reingresa" en la misma lógica. Esto puede permitir que un atacante provoque múltiples retiros de tokens antes de que el contrato tenga la oportunidad de actualizar su balance interno. El diseño de Clarity considera la reentrancia como una anti-funcionalidad y la prohíbe a nivel de 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 desestabilizan los contratos inteligentes y pueden ser activados intencionadamente en contratos mal escritos por atacantes. Normalmente esto lleva a una situación en la que el contrato queda congelado o se vacía de tokens. Los desbordamientos y subdesbordamientos de cualquier tipo hacen que una transacción se cancele 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 de los contratos inteligentes. Las funciones de tokens personalizados están integradas en el lenguaje Clarity. Los desarrolladores no necesitan preocuparse por crear un balance interno, gestionar la oferta y 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 del usuario, se pueden adjuntar condiciones posteriores a las transacciones para afirmar que el estado de la cadena ha cambiado de una determinada manera una vez completada la transacción. Por ejemplo, un usuario que llame a un contrato inteligente puede adjuntar una condición posterior que indique que, después de completarse la llamada, exactamente 500 STX deberían haberse transferido de una dirección a otra. Si la comprobación de la condición posterior falla, se revierte toda la transacción. Dado que el soporte para 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 dejarse sin verificar

Las llamadas públicas a contratos deben devolver la llamada respuesta, llamada response, 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 desplegarse en la red. Otros lenguajes como Solidity permiten el uso de llamadas de bajo nivel sin exigir que se compruebe 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 obviamente eso sí evita una gestión de errores defectuosa 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 sobre herencia

Clarity adopta la composición sobre 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 implementan distintos contratos inteligentes. Esto permite que los contratos se ajusten a diferentes 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. ¡Eso 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.

### Lo que añade Clarity 6

Las condiciones posteriores protegen una transacción desde el exterior. Desde Clarity 4, un contrato también puede proteger sus propias llamadas desde el interior con `restrict-assets?` y `as-contract?`, que enumeran los activos que un bloque de código puede mover. En Clarity 6, los permisos de staking para estos son [`with-staking`](https://docs.stacks.co/reference/clarity/functions#with-staking), el nombre de Clarity 6 para `with-stacking`, que limita los micro-STX (uSTX) totales que una llamada a `pox-5` puede bloquear, y el nuevo [`with-pox`](https://docs.stacks.co/reference/clarity/functions#with-pox), que permite las llamadas que cambian una posición de staking sin bloquear más, como `unstake`.

Dos funciones incorporadas realizan ahora las comprobaciones de transacciones de Bitcoin que antes los contratos delegaban a un contrato de biblioteca: [`get-bitcoin-tx-output?`](https://docs.stacks.co/reference/clarity/functions#get-bitcoin-tx-output) analiza una transacción bruta de Bitcoin y devuelve el script y la cantidad de una salida junto con el txid, y [`verify-merkle-proof`](https://docs.stacks.co/reference/clarity/functions#verify-merkle-proof) comprueba que un txid esté en el árbol de Merkle de un bloque. Clarity 6 también añade [`ed25519-verify`](https://docs.stacks.co/reference/clarity/functions#ed25519-verify) y [`secp256k1-decompress?`](https://docs.stacks.co/reference/clarity/functions#secp256k1-decompress)y `concat` acepta más de dos argumentos.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.stacks.co/learn/es/clarity.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
