En Sui, escribes Smart Contracts con el lenguaje de programación Sui Move. Esta página enlaza con recursos clave de Move y compara los lenguajes de programación Move y Solidity. Para una descripción completa de los problemas con los lenguajes de contratos inteligentes tradicionales, véase la Declaración del problema de Move.
Sui Move
En primer lugar, tenga en cuenta que Move se basa en el lenguaje de programación Rust. Y Sui Move difiere del núcleo de Move en formas sutiles pero distintas. Aquí tienes recursos para ponerte al día sobre Sui Move:
- Sui Move, ejemplos
Recursos
Esta sección agrega enlaces a recursos externos sobre el lenguaje de programación Move. Ver también nuestra página[ y la serie de tutoriales para recursos clave sobre Move en este sitio.
- Podcast Move & Sui en Zero Knowledge donde se describen en detalle los objetos programables.
- Original Move Book escrito por un miembro del equipo Sui.
- Documentación Core Move, que incluye:
- Ejemplos - Un conjunto de ejemplos, como para definir una moneda.
- Awesome Move - Un resumen de recursos relacionados con Move, desde blockchains hasta ejemplos de código.
Move vs. Solidity
Actualmente, el principal actor en la escena de los lenguajes de blockchain es Solidity. Como uno de los primeros lenguajes blockchain, Solidity fue diseñado para implementar conceptos básicos de lenguaje de programación utilizando tipos de datos bien conocidos (por ejemplo, matriz de bytes, cadena) y estructuras de datos (como hashmaps) con la capacidad de construir abstracciones personalizadas utilizando una base bien conocida.
Sin embargo, a medida que se desarrollaba la tecnología blockchain quedó claro que el principal objetivo de los lenguajes blockchain es operar con activos digitales, y la principal cualidad de dichos lenguajes es la seguridad y la verificabilidad (que es una capa adicional de seguridad).
Move se diseñó específicamente para abordar ambos problemas: la representación de activos digitales y las operaciones seguras sobre ellos. Para proporcionar una protección adicional, se ha co-desarrollado junto con la herramienta de verificación Move Prover. Esto permite a los desarrolladores de Move escribir especificaciones formales para las propiedades clave de corrección de su aplicación, y luego utilizar el prover para comprobar que estas propiedades se mantienen para todas las transacciones y entradas posibles.
Una diferencia fundamental entre el EVM y Move es el modelo de datos de los activos:
- Los activos EVM se codifican como entradas en los mapas hash
dirección_propietario -> <bytes codificación activo>
. Las actualizaciones y transferencias de activos funcionan actualizando las entradas de este mapa. No hay ningún tipo o valor que represente un activo, y por lo tanto un activo no puede ser pasado como argumento, devuelto desde una función, o ser almacenado dentro de otro activo. Sólo se pueden pasar bytes no estructurados a través de los límites del contrato, y por lo tanto cada activo está atrapado para siempre dentro del contrato que lo define.
- Los activos de movimiento son tipos arbitrarios definidos por el usuario. Los activos pueden pasarse como argumentos, devolverse desde funciones y almacenarse dentro de otros activos. Además, los activos pueden fluir libremente a través de los límites del contrato sin perder su integridad gracias a las protecciones integradas de resource safety 1 2 de Move.
Sui aprovecha en gran medida el modelo de datos Move para mejorar el rendimiento. El estado persistente de Sui es un conjunto de objetos Move programables que pueden ser actualizados, creados y destruidos por transacciones. Cada objeto tiene metadatos de propiedad que permiten a los validadores de Sui ejecutar y confirmar transacciones utilizando el objeto en paralelo con transacciones causalmente no relacionadas. El sistema de tipos de Move garantiza la integridad de estos metadatos de propiedad en todas las ejecuciones. El resultado es un sistema en el que los desarrolladores escriben contratos inteligentes Move ordinarios, pero los validadores aprovechan el modelo de datos para ejecutar y comprometer transacciones de la forma más eficiente posible.
Esto simplemente no es posible con el modelo de datos EVM. Dado que los activos se almacenan en mapas indexables dinámicamente, un validador sería incapaz de determinar cuándo las transacciones podrían tocar el mismo activo. El esquema de compromiso y ejecución paralela de Sui necesita un lenguaje como Move con el vocabulario necesario para describir activos estructurados que puedan fluir libremente entre contratos. Para ser franco: incluso si la comunidad prefiriera EVM/Solidity a Move, Sui no podría utilizarlos sin sacrificar los avances en rendimiento que hacen único a Sui.
Una de las principales ventajas de Move es la componibilidad de los datos. Siempre es posible crear una nueva estructura (activo) Y que contenga el activo inicial X en ella. Aún más - con la adición de genéricos, es posible definir una envoltura genérica Z(T) que será capaz de envolver cualquier activo, proporcionando propiedades adicionales a un activo envuelto o combinándolo con otros. Vea cómo funciona la componibilidad en nuestro Ejemplo de sándwich.