No Sui, escreve-se Smart Contracts com a linguagem de programação Sui Move. Esta página liga aos principais recursos Move e compara as linguagens de programação Move e Solidity. Para uma descrição completa dos problemas com as linguagens tradicionais de contratos inteligentes, consulte a Move Problem Statement.
Sui Move
Primeiro, note que o Move é baseado na bem suportada linguagem de programação Rust. E o Sui Move difere do Core Move de formas subtis mas distintas. Aqui estão os recursos para se aperfeiçoar no Sui Move:
Recursos do Move
Esta secção agrega links para recursos externos sobre a linguagem de programação Move. Veja também a nossa página Smart Contracts with Move e a série de tutoriais Move Programming with Objects para os principais recursos Move neste site.
- Podcast Move & Sui na Zero Knowledge onde os objectos programáveis são descritos em pormenor.
- Livro original Move Book escrito por um membro da equipa Sui.
- Documentação Core Move, incluindo:
- Tutorial - Um guia passo-a-passo para escrever um módulo Move.
- Livro - Um resumo com páginas sobre vários tópicos.
- Exemplos - Um conjunto de exemplos, como para definir uma moeda e trocá-la.
- Awesome Move - Um resumo dos recursos relacionados com o Move, desde cadeias de blocos a exemplos de código.
Move vs. Solidity
Actualmente, o principal interveniente no cenário das linguagens de cadeia de blocos é o Solidity. Como uma das primeiras linguagens de blockchain, o Solidity foi concebido para implementar conceitos básicos de linguagem de programação usando tipos de dados bem conhecidos (por exemplo, array de bytes, string) e estruturas de dados (como hashmaps) com a capacidade de construir abstrações personalizadas usando uma base bem conhecida.
No entanto, à medida que a tecnologia de cadeias de blocos se desenvolveu, tornou-se claro que o principal objectivo das linguagens de cadeias de blocos é operar em activos digitais, e a principal qualidade dessas linguagens é a segurança e a verificabilidade (que é uma camada adicional de segurança).
A linguagem Move foi especificamente concebida para resolver ambos os problemas: representação de activos digitais e operações seguras sobre os mesmos. Para proporcionar uma protecção adicional, foi desenvolvida em conjunto com a ferramenta de verificação Move Prover. Isto permite que os criadores da Move escrevam especificações formais para as principais propriedades de correcção da sua aplicação e, em seguida, utilizem o verificador para verificar se essas propriedades se mantêm para todas as transacções e entradas possíveis.
Uma diferença fundamental entre a EVM e a Move é o modelo de dados para os activos:
- Os activos do EVM são codificados como entradas nos mapas hash
owner_address -> <bytes encoding asset>
. As actualizações e transferências de activos funcionam através da actualização das entradas neste mapa. Não existe um tipo ou valor que represente um activo e, portanto, um activo não pode ser passado como argumento, devolvido de uma função ou armazenado dentro de outro activo. Apenas bytes não estruturados podem ser passados através dos limites do contrato e, portanto, cada activo está para sempre preso dentro do contrato que o define.
- Os activos de movimento são tipos arbitrários definidos pelo utilizador. Os activos podem ser passados como argumentos, devolvidos a partir de funções e armazenados dentro de outros activos. Além disso, os activos podem fluir livremente através das fronteiras dos contratos sem perder a sua integridade, graças às protecções resource safety incorporadas no Move 1 2.
O Sui utiliza fortemente o modelo de dados Move para obter desempenho. O estado persistente do Sui é um conjunto de objectos Move programáveis que podem ser actualizados, criados e destruídos por transacções. Cada objecto tem metadados de propriedade que permitem aos validadores do Sui executar e confirmar transacções que utilizam o objecto em paralelo com transacções causalmente não relacionadas. O sistema de tipos do Move garante a integridade desses metadados de propriedade em todas as execuções. O resultado é um sistema em que os programadores escrevem contratos inteligentes Move normais, mas os validadores tiram partido do modelo de dados para executar e confirmar transacções da forma mais eficiente possível.
Isso simplesmente não é possível com o modelo de dados EVM. Uma vez que os activos são armazenados em mapas indexáveis dinamicamente, um validador seria incapaz de determinar quando as transacções poderiam tocar no mesmo activo. O esquema de execução paralela e de compromisso da Sui precisa de uma linguagem como a Move, com o vocabulário necessário para descrever activos estruturados que possam fluir livremente entre contratos. Para ser franco: mesmo que a comunidade preferisse o EVM/Solidity ao Move, o Sui não poderia utilizá-los sem sacrificar os avanços de desempenho que tornam o Sui único.
Uma das principais vantagens do Move é a capacidade de composição de dados. É sempre possível criar uma nova estrutura (activo) Y que conterá o activo inicial X. Mais ainda - com a adição de genéricos, é possível definir o wrapper genérico Z(T) que será capaz de envolver qualquer activo, fornecendo propriedades adicionais a um activo envolvido ou combinando-o com outros. Veja como funciona a capacidade de composição no nosso Exemplo de sanduíche.