¿Debería aprender Rust o Solidity para desarrollar contratos inteligentes?

Rust vs Solidity

TLDR

La tecnología Web3 y blockchain se van al espacio. En el corazón de esta revolución tecnológica está el contrato inteligente. La programación de contratos inteligentes no se hace de la misma manera y con las mismas tecnologías que programamos aplicaciones y sitios web tradicionales.

Los dos blockchains principales que compiten por desarrolladores de contratos inteligentes son Solana y Ethereum. Como lenguaje de programación para desarrollar contratos inteligentes (programas) en Solana tienes Rust y para desarrollar contratos inteligentes en Ethereum tienes Solidity.

Puedes comparar cada lenguaje de programación según sus habilidades transferibles, madurez, curva de aprendizaje, tamaño del blockchain objetivo, herramientas y salarios prospectivos.

Intro

Las motivaciones para aprender un lenguaje de programación varían de persona a persona.

Las consideraciones pueden incluir antecedentes previos, stack de tecnología, paradigma de programación, documentación, soporte de la comunidad, oportunidades de trabajo, casos de uso e interés industrial, solo por mencionar algunos.

Si estás interesado en Web3, es posible que no escapes de Rust o Solidity.

Sin más preámbulos, vamos a algunos detalles.

Habilidades transferibles

Este aspecto está relacionado con el rango de blockchains (protocolos), plataformas, stacks de tecnología, dominios e industrias soportados por el lenguaje.

Tanto Rust como Solidity se usan para programar contratos inteligentes, pero para Solidity este es su único uso.

Los contratos inteligentes escritos por Solidity están destinados a ejecutarse en la Máquina Virtual de Ethereum (EVM). Los ejemplos de blockchains que usan Solidity son Ethereum, Avalanche, Polygon, Binance Smart Chain (BSC), Monax, Hyperledger y Burrow.

Rust se usa para codificar muchos tipos de sistemas:

  • Motores de navegador web (Servo y Gecko).
  • Sistemas operativos (Redox, Theseus).
  • Motores de juegos (Bevy, Amethyst).
  • Entorno de ejecución para JavaScript (Deno).
  • Gestor de sistema de archivos (Stratis).
  • Aplicaciones (Figma, Dropbox).

Rust es usado por Mozilla, Google, Microsoft, AWS, Meta, Discord, Cloudflare, etc.

Algunos conceptos generales sobre el funcionamiento y la programación de blockchain pueden transferirse, pero Solana y Ethereum tienen diferentes enfoques sobre cómo implementar los contratos inteligentes o programas, gestionar memoria, seguridad, etc. Entonces hay cierto esfuerzo que poner cuando se hace la transición de una red a otra.

También es posible buscar puentes que hagan posible la interoperabilidad entre Solana y Ethereum.

Plataforma objetivo (blockchain)

Asumiendo que la elección de la plataforma (blockchain) fue el primer paso, entonces selecciona un lenguaje que soporte la codificación de contratos inteligentes que se ejecutarán en ese protocolo.

Para Solana y Polkadot tienes Rust.

Para protocolos compatibles con la Máquina Virtual de Ethereum (EVM) tienes Solidity.

De lo contrario, la prioridad cambia del lenguaje en sí para identificar la plataforma que mejor soporta tus casos de uso comparando atributos como tamaño del ecosistema, velocidad de transacción, comisiones, número de validadores, seguridad incorporada, fondo de liquidez, L2, etc.

Curva de aprendizaje, soporte de la comunidad y recursos.

Sumergirse en un nuevo lenguaje podría ser intimidante incluso para algunos programadores curados. Para principiantes podría ser un dolor de cabeza simplemente poner tu entorno funcionando. La complejidad de la tecnología blockchain y el tamaño del ecosistema aumentan la curva de aprendizaje.

Tener un compañero de codificación, soporte de la comunidad o recursos de calidad para recurrir cuando estés atrapado podría hacer o deshacer tu viaje de codificación.

Comienza lentamente, con pequeños proyectos para retroalimentación continua y objetivos de auto-recompensa pero lo suficientemente desafiantes para mantener tu interés vivo. Aumenta la complejidad gradualmente, verifica los fundamentos y profundiza cuando sea necesario. Reevalúa qué funciona para ti y ajusta en consecuencia. Aprende haciendo.

Considero que la curva de aprendizaje está relacionada con tu experiencia de programación previa: lenguajes de programación, paradigmas o exposición de arquitectura.

Para simplificar, el aprendizaje se reduce a adquirir la sintaxis, construcciones y modelos mentales del lenguaje.

Rust está asociado con una curva de aprendizaje empinada y ser un lenguaje muy complicado para comenzar en Web3, de alguna manera atribuido a sus mecanismos para aumentar seguridad y rendimiento, y porque estás a cargo de gestionar la vida útil de las variables.

Solidity se considera que tiene un punto de entrada más fácil dado su similitud con JavaScript.

En cualquier caso, se recomienda comenzar adquiriendo los fundamentos de la tecnología blockchain y Web3. He hecho una selección de recursos para aprender fundamentos de blockchain que incluye materiales del MIT, Berkeley, a16z, y la Fundación Web3.

Puedes sentirte más cómodo con Rust si has estado expuesto a lenguajes de alto nivel e tipificados antes. Rust soporta paradigmas de programación estructurada, genérica, imperativa, concurrente y funcional. Ha sido influenciado por C++, C#, Ruby, Swift, Haskell, Scheme, etc., y es sintácticamente similar a C++.

Navega al sitio web de Rust para encontrar materiales de aprendizaje.

Si tu trasfondo es en programación web con ECMAScript (JavaScript), entonces puedes sentirte más familiarizado con Solidity. Solidity tiene influencia de JavaScript, C++, Eiffel y Python. Soporta programación orientada a objetos con herencia, y tiene tipificación estática y tipos de retorno variádicos. Aún necesitarás ajustarte a la mentalidad de bajo nivel de Solidity, estarás operando directamente en bits de una variable más a menudo.

En el sitio web de Solidity puedes encontrar buenos recursos para comenzar tu viaje.

IDE, frameworks y librerías

IDEs y Editores

Rust tiene soporte de editor de primera clase en muchos IDE y editores como VS Code, SublimeText3, Atom, Intellij Idea, Eclipse, Vim, Emacs y Geany.

Rust utiliza Cargo como herramienta de compilación, útil para instalar paquetes creados por la comunidad, para probar y desplegar tu código, y para crear documentación para tu código. Con Rustfmt obtienes código formateado automáticamente, y coherencia en todo el equipo. Clippy ayuda a desarrolladores junior y experimentados a escribir código idiomático e implementar estándares.

Rust también tiene un playground en línea listo para que comiences tu viaje de codificación.

Puedes usar Solidity en varios editores e IDEs.

Solidity tiene plugins para Atom, Emacs, Intellij, Sublime, Vim y VS Code.

Solidity tiene un IDE llamado Remix con una versión web y una versión de escritorio. Es de código abierto, usado para desarrollar contratos inteligentes con Solidity y como un playground para aprender y enseñar Ethereum. Es extensible a través de plugins. Tiene módulos para pruebas, depuración e implementación de contratos inteligentes, etc.

Frameworks

Para el ecosistema de Solana puedes usar Anchor al codificar contratos inteligentes con Rust.

Anchor es un framework que proporciona algunas amenidades:

Crates de Rust y eDSL, especificación IDL, paquetes TypeScript para generar clientes a partir de IDL, y herramientas de CLI y gestión de workspace.

En el ecosistema de Ethereum hay algunos frameworks que facilitan tu tarea de programación de contratos inteligentes:

Hardhat, auto-definido como el entorno de desarrollo de Ethereum para profesionales que te hará 10X más rápido, ofrece muchas características como:

Facilita ejecutar Solidity localmente, sin tratar con entornos en vivo, cuando depuras, pruebas o despliegas tus contratos inteligentes. Diseñado como una herramienta enfocada en depuración para Solidity, con stack traces, console.log y mensajes de error explícitos. Permite la personalización de tus tareas y entorno, si necesitas algo más específico que la configuración por defecto. Facilita la integración con otras herramientas y es extensible usando plugins.

Truffle con características que incluyen gestión del ciclo de vida del contrato inteligente, pruebas automatizadas de contratos, despliegue scriptable y migraciones, gestión de redes simple, consola interactiva poderosa, y ejecutor de scripts externo.

Stack de tecnología

El stack de tecnología de Solana incluye (esto podría variar):

El stack de tecnología de Ethereum incluye (esto podría variar):

Oportunidades de trabajo y salarios

Los desarrolladores de Rust ganan un promedio de $144 208 según Hired, más de $180,000 según la encuesta de O'reilly de 2021, un salario anual promedio de $120 000 según lo informado por Web3 Jobs y un salario anual medio de $77 530 como se descubrió en la encuesta de Stack Overflow de 2021.

Solidity tiene un salario base promedio para una posición remota de $145 000 y un salario base promedio de $127 500 en Estados Unidos según se ve en cryptocurrencyjobs, un salario anual promedio de $100 000 según Web3 Jobs y un salario promedio de $86 100 según lo informado por CryptoJobsList.

En general, los salarios de Web3 son un promedio de $92 000 al año. El salario anual promedio para Smart Contract Developer es $117 000, y Blockchain Developer es $74 000.

También se necesitan roles más tradicionales en el espacio Web3. Basado en datos de Web3 Jobs, el salario anual promedio para diferentes posiciones de Web3 es:

  • Desarrollador Mobile $125 000.
  • Desarrollador Senior $120 000.
  • Desarrollador Líder $100 000.
  • Desarrollador React $100 000.
  • Desarrollador Full Stack $100 000.
  • Desarrollador Back End $100 000.
  • Desarrollador Front End $85 000.

Escalabilidad, velocidad y tamaño del ecosistema

El tamaño de la cadena puede informarte sobre estabilidad, madurez, etc. Esto podría interpretarse y usarse de muchas maneras.

Por ejemplo, el hecho de que Solana sea más pequeña y joven que Ethereum es una indicación de que hay oportunidades, servicios para crear, herramientas para construir. Pero también indica que hay incógnitas que impactarían tu trabajo.

Por otro lado, ver a Ethereum como una cadena más grande y madura, podría indicar que hay muchos recursos, y usuarios con los que trabajar, con un radio de influencia aumentado.

Escalabilidad y velocidad de Solana

Solana con más de 50 mil millones de transacciones hasta la fecha, a una velocidad de 1679 transacciones por segundo, y un costo de $0.00025 por transacción ofrece muchas oportunidades para escalar. El valor de SOL es $141.99. Estos valores se actualizan frecuentemente, para obtener la información más reciente visita su sitio web oficial y el sitio web de messari.

Tamaño del ecosistema de Solana

Solana tiene un valor total bloqueado de $9,8 mil millones según el Índice del Proyecto Solana y Defi Llama, los valores se actualizan frecuentemente. El valor total bloqueado incluye el valor de todos los proyectos construidos alrededor del blockchain de Solana que estaban en más de $5 millones en el momento de escribir esto. Para una lista completa consulta la clasificación de TVL de Solana de Defi Llama:

El explorador de Solana también incluye otros proyectos en el ranking superior:

Escalabilidad y velocidad de Ethereum

Ethereum tiene un total de transacciones de 1,429.18 millones, a una velocidad de 12.9 transacciones por segundo, un precio de gas de $5.6, y el valor de ETH es $3177.05 según los datos de Etherscan.

A veces tienes que recurrir a capas de escalado (L2) para eludir las limitaciones de escalabilidad en la cadena principal (L1) como la velocidad y el costo de las transacciones. En este escenario puedes considerar algunos compromisos: transacciones de roll up (Arbitrum), descentralización (Polygon), tamaño de bloque (BSC), algoritmo de consenso (Avalanche).

La transición de prueba de trabajo a prueba de participación, como mecanismo de consenso de Ethereum, se espera que aumente la velocidad de transacción y reduzca la comisión de gas.

Tamaño del ecosistema de Ethereum

Ethereum tiene un valor total bloqueado de $145.01 mil millones según Defi Llama. Estos ejemplos son proyectos que estaban en más de 1 mil millones en el momento de escribir esto. Para una lista completa consulta la clasificación de TVL de Ethereum de Defi Llama

Si agregas Avalanche (18.51 mil millones), Polygon (9.52 mil millones), Binance Smart Chain (19.54 mil millones), el tamaño del ecosistema donde puedes usar Solidity es aún más grande.

Conclusión

Intenté reunir información e ideas para ayudarte a tomar una decisión.

Si tengo que elegir, elegiría Rust. Lo que me gusta de Rust es su velocidad, seguridad y cómo facilita encontrar qué está mal con el código. También que Rust se usa para codificar diferentes tipos de sistemas, y se usa para codificar contratos inteligentes en el blockchain de Solana. Las aplicaciones codificadas en Solana pueden beneficiarse de su alta velocidad de transacciones por segundo y bajas comisiones, lo que da mucho espacio para escalar y adopción masiva.

Pensando un poco fuera de la caja, elegiría ambas, teniendo tiempo para gastar. La exposición a un entorno y estilo de programación diferente es invaluable. Además, aprender cómo se implementan las cosas en otros blockchains se sumaría a tus fundamentos de blockchain.

Y si sigues empujándome, diría, "simplemente olvida Solidity y Rust". Hay librerías de alto nivel que te permiten usar JavaScript para codificar tus aplicaciones DeFi, y algunos blockchains usan Python, Go, o un lenguaje que ya conoces.

De cualquier forma YAGMI.

  • 6 recursos gratuitos para aprender Rust para principiantes.

    Una lista de recursos que estoy usando para aprender Rust. Incluye videos, la documentación oficial y artículos de blog. Estos recursos se complementan entre sí, cubriendo diferentes estilos de aprendizaje y enfoques del lenguaje. Los considero amigables para principiantes y capaces de facilitar el aprendizaje en pequeños fragmentos a la vez. Hay más de una manera de aprender el proceso de masticar vidrio con Rust, y todos tenemos preferencias. Esta lista no es exhaustiva, tal vez esté sesgada. La actualizaré para incluir nuevos hallazgos y tus recomendaciones.

  • 7 recursos gratuitos para aprender los fundamentos de blockchain.

    Esta selección de 7 recursos cubre un amplio espectro de temas sobre blockchain, que lo explican en relación con el mundo real, utilizando formatos académicos y bootcamp. Incluye materiales de MIT, Berkeley, a16z y Web3 Foundation. Está dirigido a personas interesadas en los fundamentos de blockchain y finanzas descentralizadas.

  • La gig cripto economía está llegando a la consola, el teléfono, la tableta o la PC. Gana dinero mientras aprendes, juegas, creas y socializas.

    Los modelos de remuneración-por-trabajo (labor-to-earn) han evolucionado para incluir otras opciones como renumeración-por-jugar (play-to-earn) donde obtienes ganancias de la reventa de los NTFs que has ganado en batallas, comprado anteriormente o recolectado según las dinámicas del juego. Remuneración-por-aprendizaje (learn-to-earn) donde acumulas criptomodenas por haber pasado lecciones y exámenes relacionados a determinada blockchain, protocolo, plataforma, app. Remuneración-por-participar (participate-to-earn) donde obtienes recompensas por postear, dar me gusta y compartir en redes sociales como Minds. Remuneración-por-crear (create-to-earn) donde tus creaciones se venden como algún tipo de coleccionable o NFT, como en OpenSea, o tu lista de reproducción en Audius. Incluso tienes la posibilidad de influenciar alguna causa que consideres importante en la modalidad jugar-con-propósito (play-for-purpose), como la protección del medio ambiente y la lucha contra el cambio climático, como es el caso del juego Zeedz.