Introduction to smart-contracts
This chapter will give you a high level introduction to what smart-contracts are, what are they used for and why would blockchain developers use Cairo and Starknet. If you are already familiar with blockchain programming, feel free to skip this chapter. The last part might still be interesting though.
Smart-contracts
Los contratos inteligentes ganaron popularidad y se generalizaron con el nacimiento de Ethereum. Los contratos inteligentes son esencialmente programas desplegados en una blockchain. El término "smart contract" es algo engañoso, ya que no son ni "inteligentes" ni "contratos", sino más bien código e instrucciones que se ejecutan en función de entradas específicas. Constan principalmente de dos componentes: almacenamiento y funciones. Una vez desplegados, los usuarios pueden interactuar con los contratos inteligentes iniciando transacciones en la cadena de bloques que contengan datos de ejecución (a qué función llamar y con qué datos de entrada). Los contratos inteligentes pueden modificar y leer el almacenamiento de la blockchain subyacente. Un contrato inteligente tiene su propia dirección y se considera una cuenta de blockchain, lo que significa que puede contener tokens.
El lenguaje de programación utilizado para escribir contratos inteligentes varía en función de la blockchain. Por ejemplo, en Ethereum y en el ecosistema compatible con EVM, el lenguaje más utilizado es Solidity, mientras que en Starknet es Cairo. La forma de compilar el código también difiere en función del blockchain. En Ethereum, Solidity se compila en bytecode. En Starknet, Cairo se compila en Sierra y luego en Cairo Assembly (casm).
Smart contracts possess several unique characteristics. They are permissionless, meaning anyone can deploy a smart contract on the network (within the context of a decentralized blockchain, of course). Smart contracts are also transparent; the data stored by the smart contract is accessible to anyone. The code that composes the contract can also be transparent, enabling composability. This allows developers to write smart contracts that use other smart contracts. Smart contracts can only access and interact with data from the blockchain they are deployed on. They require third-party software (called oracles
) to access external data (the price of a token for instance).
Para que los desarrolladores puedan crear contratos inteligentes que interactúen entre sí, es necesario saber cómo son los demás contratos. Por ello, los desarrolladores de Ethereum empezaron a crear estándares para el desarrollo de contratos inteligentes, los "ERCxx". Los dos estándares más usados y famosos son el ERC20
, usado para construir tokens como USDC
, DAI
o STARK
, y el ERC721
, para NFTs (Non-fungible tokens) como CryptoPunks
o Everai
.
Use cases
Hay muchos casos de uso posibles para los smart-contracts. Los únicos límites son las restricciones técnicas de la cadena de bloques y la creatividad de los desarrolladores.
DeFi
Ahora mismo, el principal caso de uso de los smart contracts es similar al de Ethereum o Bitcoin, que consiste esencialmente en manejar dinero. En el contexto del sistema de pago alternativo prometido por Bitcoin, los smart contracts en Ethereum permiten crear aplicaciones financieras descentralizadas que ya no dependen de los intermediarios financieros tradicionales. Es lo que llamamos DeFi (finanzas descentralizadas). DeFi consta de varios proyectos, como aplicaciones de préstamo/endeudamiento, intercambios descentralizados (DEX), derivados en cadena, stablecoins, fondos de cobertura descentralizados, seguros y muchos más.
Tokenization
Los smart contracts pueden facilitar la tokenización de activos del mundo real, como bienes inmuebles, obras de arte o metales preciosos. La tokenización divide un activo en fichas digitales, que pueden negociarse y gestionarse fácilmente en plataformas de cadena de bloques. Esto puede aumentar la liquidez, permitir la propiedad fraccionaria y simplificar el proceso de compraventa.
Voting
Los smart contracts pueden utilizarse para crear sistemas de votación seguros y transparentes. Los votos pueden registrarse en la cadena de bloques, lo que garantiza la inmutabilidad y la transparencia. A continuación, el contrato inteligente puede contabilizar automáticamente los votos y declarar los resultados, minimizando las posibilidades de fraude o manipulación.
Royalties
Los smart contracts pueden automatizar el pago de derechos de autor para artistas, músicos y otros creadores de contenidos. Cuando un contenido se consume o se vende, el contrato inteligente puede calcular y distribuir automáticamente los derechos de autor a los legítimos propietarios, garantizando una compensación justa y reduciendo la necesidad de intermediarios.
Decentralized identities DIDs
Los smart contracts pueden utilizarse para crear y gestionar identidades digitales, permitiendo a las personas controlar su información personal y compartirla con terceros de forma segura. El smart contract podría verificar la autenticidad de la identidad de un usuario y conceder o revocar automáticamente el acceso a servicios específicos en función de sus credenciales.
As Ethereum continues to mature, we can expect the use cases and applications of smart contracts to expand further, bringing about exciting new opportunities and reshaping traditional systems for the better.
The rise of Starknet and Cairo
Ethereum, being the most widely used and resilient smart-contract platform, became a victim of its own success. With the rapid adoption of some previously mentioned use cases, mainly DeFi, the cost of performing transactions became extremely high, rendering the network almost unusable. Engineers and researchers in the ecosystem began working on solutions to address this scalability issue.
A famous trilemma (The Blockchain Trilemma) in the blockchain space states that it is impossible to achieve a high level of scalability, decentralization, and security simultaneously; trade-offs must be made. Ethereum is at the intersection of decentralization and security. Eventually, it was decided that Ethereum's purpose would be to serve as a secure settlement layer, while complex computations would be offloaded to other networks built on top of Ethereum. These are called Layer 2s (L2s).
The two primary types of L2s are optimistic rollups and validity rollups. Both approaches involve compressing and batching numerous transactions together, computing the new state, and settling the result on Ethereum (L1). The difference lies in the way the result is settled on L1. For optimistic rollups, the new state is considered valid by default, but there is a 7-day window for nodes to identify malicious transactions.
In contrast, validity rollups, such as Starknet, use cryptography to prove that the new state has been correctly computed. This is the purpose of STARKs, this cryptographic technology could permit validity rollups to scale significantly more than optimistic rollups. You can learn more about STARKs from Starkware's Medium article, which serves as a good primer.
Starknet's architecture is thoroughly described in the Starknet Book, which is a great resource to learn more about the Starknet network.
Remember Cairo? It is, in fact, a language developed specifically to work with STARKs and make them general-purpose. With Cairo, we can write provable code. In the context of Starknet, this allows proving the correctness of computations from one state to another.
Unlike most (if not all) of Starknet's competitors that chose to use the EVM (either as-is or adapted) as a base layer, Starknet employs its own VM. This frees developers from the constraints of the EVM, opening up a broader range of possibilities. Coupled with decreased transaction costs, the combination of Starknet and Cairo creates an exciting playground for developers. Native account abstraction enables more complex logic for accounts, that we call "Smart Accounts", and transaction flows. Emerging use cases include transparent AI and machine learning applications. Finally, blockchain games can be developed entirely on-chain. Starknet has been specifically designed to maximize the capabilities of STARK proofs for optimal scalability.
Learn more about Account Abstraction in the Starknet Book.
Cairo programs and Starknet contracts: what is the difference?
Starknet contracts are a special superset of Cairo programs, so the concepts previously learned in this book are still applicable to write Starknet contracts.
As you may have already noticed, a Cairo program must always have a function main
that serves as the entry point for this program:
fn main() {}
Starknet contracts are essentially programs that can run on the Starknet OS, and as such, have access to Starknet's state. For a module to be handled as a contract by the compiler, it must be annotated with the #[starknet::contract]
attribute.