Neste artigo, examinaremos o que são contratos inteligentes, o que são, se familiarizar com diferentes plataformas de contratos inteligentes, seus recursos e também discutiremos como eles funcionam e quais vantagens eles podem trazer. Este material será muito útil para leitores que não estão familiarizados com o tópico de contratos inteligentes, mas desejam se aproximar de seu entendimento.
Contrato regular vs. contrato inteligente
Antes de entrarmos em detalhes, vejamos um exemplo da diferença entre um contrato comum, definido no papel, e um contrato inteligente, apresentado em formato digital.

Como isso funcionou antes dos contratos inteligentes? Imagine um grupo de pessoas que deseja estabelecer algumas regras e condições para a distribuição de valores, bem como um certo mecanismo para garantir a implementação dessa distribuição de acordo com as regras e condições fornecidas. Então eles se reuniram, fizeram um trabalho no qual anotaram seus dados de identificação, as condições, os valores envolvidos, marcaram a data e assinaram. Este contrato também foi certificado por uma parte confiável, como um notário público. Além disso, essas pessoas divergiram em direções diferentes com a cópia impressa desse contrato e começaram a executar algumas ações que podem não corresponder ao contrato em si, ou seja, fizeram uma coisa e foi garantido no papel que deveriam fazer algo completamente diferente. E como sair dessa situação? De fato, um dos membros do grupo precisa pegar este documento, pegar algumas evidências, levá-lo a tribunal e buscar conformidade entre o contrato e as ações reais. Muitas vezes, é difícil obter uma execução justa deste contrato, o que leva a conseqüências desagradáveis.
O que se pode dizer sobre contratos inteligentes? Eles combinam a possibilidade de escrever os termos do contrato e o mecanismo para sua estrita implementação. Se as condições foram definidas e a transação ou solicitação correspondente foi assinada, depois de aceitar essa solicitação ou transação, não é mais possível alterar as condições ou afetar sua implementação.
Existe um validador ou toda a rede, além de um banco de dados que armazena todos os contratos inteligentes que foram executados em estrita ordem cronológica. Também é importante que esse banco de dados contenha todas as condições de acionamento para a execução de um contrato inteligente. Além disso, deve levar em consideração o próprio valor, cuja distribuição está descrita no contrato. Se isso se aplica a alguma moeda digital, esse banco de dados deve levar em consideração.
Em outras palavras, os validadores de contratos inteligentes devem ter acesso a todos os dados com os quais o contrato inteligente opera. Por exemplo, um banco de dados deve ser usado para registrar simultaneamente moedas digitais, saldos de usuários, transações de usuários e registros de data e hora. Então, em um contrato inteligente, a condição pode ser o saldo do usuário em uma determinada moeda, o início de um certo tempo ou o fato de uma determinada transação, mas não mais.
Definição de contrato inteligente
Em geral, a terminologia em si foi inventada pelo pesquisador Nick Szabo e foi aplicada pela primeira vez em 1994, e foi documentada em 1997 em um artigo que descreve a própria idéia de contratos inteligentes.
Contratos inteligentes implicam que alguma automação da distribuição de valor seja realizada, o que pode depender apenas daquelas condições predefinidas. Na sua forma mais simples, parece um contrato com condições estritamente especificadas, assinado por certas partes.
Os contratos inteligentes são projetados para minimizar a confiança de terceiros. Às vezes, o centro de decisão, do qual tudo depende, é completamente excluído. Além disso, é mais fácil realizar uma auditoria para esses contratos. Isso é uma consequência de alguns recursos de design de um sistema como esse, mas na maioria das vezes queremos dizer com contrato inteligente um ambiente descentralizado e a presença de funções que permitem a qualquer um analisar o banco de dados e realizar uma auditoria completa da execução dos contratos. Isso garante proteção contra alterações retroativas nos dados que implicam alterações na execução do próprio contrato. A digitalização da maioria dos processos ao criar e lançar um contrato inteligente geralmente simplifica a tecnologia e o custo de sua implementação.
Um exemplo simples - serviço de custódia
Vejamos um exemplo muito simples. Isso ajudará você a entender melhor a funcionalidade dos contratos inteligentes e a navegar melhor nos casos em que eles devem ser usados.

Ele também pode ser implementado usando o Bitcoin, embora agora ainda seja difícil chamar o Bitcoin de uma plataforma completa para contratos inteligentes. Portanto, temos algum comprador e existe uma loja online. O comprador deseja comprar um monitor nesta loja. No caso mais simples, o comprador prepara e envia o pagamento, e a loja on-line aceita, confirma e envia as mercadorias. No entanto, nessa situação, há uma grande confiança - o comprador deve confiar na loja on-line por todo o custo do monitor. Como a loja on-line pode ter uma reputação baixa aos olhos do comprador, existe o risco de que, por algum motivo, depois de aceitar o pagamento, a loja se recuse a prestar serviços de manutenção e não envie a mercadoria ao comprador. Portanto, o comprador faz uma pergunta (respectivamente, e a loja online faz essa pergunta) o que pode ser aplicado nesse caso para minimizar esses riscos e tornar essas transações mais confiáveis.
No caso do Bitcoin, você pode oferecer ao comprador e ao vendedor a oportunidade de escolher um mediador de forma independente. Há muitas pessoas que lidam com questões controversas. E nossos participantes podem escolher da lista geral de mediadores confiáveis, ao mesmo tempo. Juntos, eles criam um endereço de multi-assinatura 2 de 3, em que há três chaves e duas assinaturas são necessárias para quaisquer duas chaves para gastar moedas nesse endereço. Uma chave pertence ao comprador, a segunda à loja online e a terceira ao mediador. E o comprador enviará o valor necessário para pagar pelo monitor para um endereço com várias assinaturas. Agora, quando o vendedor perceber que o dinheiro está bloqueado por um tempo no endereço de várias assinaturas, que depende dele, ele pode enviar o monitor com segurança por correio.
Além disso, o comprador recebe o pacote, inspeciona as mercadorias e toma uma decisão sobre a compra final. Ele pode concordar completamente com o serviço prestado e assinar a transação com sua chave, onde transfere moedas do endereço de várias assinaturas para o vendedor ou pode estar insatisfeito com alguma coisa. No segundo caso, ele entra em contato com o mediador para compor uma transação alternativa, que distribuirá essas moedas de maneira diferente.
Suponha que o monitor tenha chegado um pouco arranhado e não houvesse cabo para conectar a um computador no kit, embora tenha sido escrito no site da loja on-line que o cabo deve ser incluído no kit. Em seguida, o comprador coleta as evidências necessárias para provar ao mediador que ele foi enganado nessa situação: ele tira capturas de tela do site, tira uma foto do cheque pelo correio, tira uma foto de arranhões no monitor e mostra que o selo foi quebrado e o cabo foi retirado. A loja online, por sua vez, coleta suas evidências e as transmite ao mediador.
O mediador está interessado em satisfazer a indignação do comprador e os interesses da loja on-line (será mais compreendido o porquê). Ele realiza uma transação em que moedas com endereços de várias assinaturas serão gastas em alguma proporção entre o comprador, a loja on-line e a picareta, pois ele participa de uma recompensa por seu trabalho. Suponha que 90% do valor total vá para o vendedor, 5% para o mediador e 5% de compensação para o comprador. O mediador assina esta transação com sua chave, mas ainda não pode ser aplicada, porque isso requer duas assinaturas, mas apenas uma. Ele envia essa transação para o comprador e o vendedor. Se pelo menos um deles estiver satisfeito com esta opção de redistribuição de moedas, a transação será assinada e distribuída adicionalmente à rede. Para sua validação, basta que um dos participantes da transação concorde com a opção do mediador.
Nesse caso, é importante escolher inicialmente um mediador para que ambos os participantes confiem nele. Nesse caso, ele agirá independentemente dos interesses de um ou de outro e avaliará objetivamente a situação. Se o mediador não fornecer essa opção para a distribuição de moedas que satisfará pelo menos um participante, então, tendo acordado juntos, o comprador e a loja on-line poderão encaminhar as moedas para um novo endereço de multi-assinatura, colocando suas duas assinaturas. O novo endereço de multi-assinatura será compilado com outra escolha, que talvez seja mais competente no assunto e forneça uma opção melhor.
Exemplo de dormitório e geladeira
Vejamos um exemplo mais complexo que exibe os recursos de um contrato inteligente de maneira mais explícita.

Digamos que há três caras que se instalaram recentemente em um dormitório. Os três estão interessados em comprar uma geladeira no quarto, que eles compartilharão. Um deles se ofereceu para coletar o valor necessário para comprar uma geladeira e negociar com o vendedor. No entanto, eles se conheceram recentemente e não há confiança suficiente entre eles. Obviamente, dois deles estão em risco, dando dinheiro a um terço. Além disso, eles precisam chegar a um acordo sobre a escolha do vendedor.
Eles podem usar o serviço de garantia, ou seja, escolher um mediador que monitorará a execução da transação e resolverá os problemas disputados, se houver. Depois, concordando, eles elaboram um contrato inteligente e prescrevem certas condições.
A primeira condição é que, antes de um certo período, por exemplo, dentro de uma semana, três pagamentos de determinados endereços para um determinado valor sejam recebidos na conta correspondente do contrato inteligente. Se isso não acontecer, o contrato inteligente termina e devolve as moedas a todos os participantes. Se a condição for atendida, os valores dos identificadores do vendedor e do mediador são definidos e a condição de que todos os participantes concordam com a escolha do vendedor e o mediador é verificada. Quando todas as condições forem atendidas, os fundos serão transferidos para os endereços especificados. Essa abordagem pode proteger os participantes contra fraudes de qualquer lado e geralmente elimina a necessidade de confiar.
Vemos neste exemplo o próprio princípio de que essa oportunidade de definir parâmetros passo a passo para cada condição a ser cumprida permite criar sistemas de qualquer complexidade e profundidade dos níveis aninhados. Além disso, primeiro você pode definir a primeira condição em um contrato inteligente e somente após sua conclusão, você já pode definir parâmetros para a próxima condição. Em outras palavras, formalmente, a condição é prescrita e os parâmetros para ela já podem ser definidos durante sua operação.
Classificação de contratos inteligentes
Para classificação, você pode especificar diferentes grupos de critérios. No entanto, no momento do desenvolvimento da tecnologia, quatro deles são relevantes.
Os contratos inteligentes podem ser diferenciados por um ambiente de tempo de execução que pode ser centralizado ou descentralizado. No caso da descentralização, temos muito mais independência e tolerância a falhas ao executar contratos inteligentes.
Eles também podem ser distinguidos pelo processo de definição e cumprimento de condições: eles podem ser arbitrariamente programáveis, limitados ou predefinidos, ou seja, estritamente tipificados. Quando na plataforma de contrato inteligente, existem apenas 4 contratos inteligentes específicos, os parâmetros para eles podem ser definidos arbitrariamente. Assim, defini-los é muito mais fácil: selecionamos um contrato da lista e passamos os parâmetros.
Pelo método de iniciação, existem contratos inteligentes automatizados, ou seja, quando certas condições são atendidas, eles são auto-realizáveis e existem contratos nos quais as condições são especificadas, mas a plataforma não verifica automaticamente seu cumprimento, para isso eles precisam ser iniciados separadamente.
Além disso, os contratos inteligentes variam em termos de privacidade. Eles podem ser completamente abertos, parcialmente ou completamente confidenciais. O último significa que observadores externos não veem os termos dos contratos inteligentes. No entanto, o tópico da privacidade é muito extenso e deve ser considerado separadamente do artigo atual.
A seguir, abordaremos os três primeiros critérios para esclarecer a compreensão do tópico atual.
Contratos inteligentes de tempo de execução

O tempo de execução distingue entre plataformas de contrato inteligente centralizadas e descentralizadas. No caso de contratos digitais centralizados, é utilizado um serviço, onde existe apenas um validador e pode haver um serviço de backup e recuperação, que também é gerenciado centralmente. Há um banco de dados que armazena todas as informações necessárias para definir os termos do contrato inteligente e a distribuição do valor que é levado em consideração nesse mesmo banco de dados do serviço. Esse serviço centralizado tem um cliente que define condições com determinadas solicitações e usa esses contratos. Devido ao fato de a plataforma estar centralizada, os mecanismos de autenticação podem ser menos confiáveis do que nas criptomoedas.
Como exemplo, você pode usar provedores móveis (diferentes operadoras de celular). Suponha que um determinado operador monitore o tráfego em seus servidores de maneira centralizada, que pode ser transmitida em diferentes formatos, por exemplo: na forma de chamadas de voz, SMS, tráfego de Internet móvel e de acordo com vários padrões, além de acompanhar os fundos dos saldos dos usuários. Por conseguinte, um fornecedor de serviços móveis pode elaborar contratos para contabilizar os serviços prestados e o seu pagamento em diferentes condições. Nesse caso, condições como “enviar um SMS com esse código para esse número e você obterá tais e tais condições de distribuição de tráfego” são facilmente definidas.
Mais um exemplo: bancos tradicionais com funcionalidade avançada de Internet banking e contratos muito simples como pagamentos regulares, conversão automática de pagamentos recebidos, dedução automática de juros em uma conta especificada, etc.
Se estamos falando de contratos inteligentes com um tempo de execução descentralizado, temos um grupo de validadores. No caso ideal, qualquer pessoa pode se tornar um validador. Devido ao protocolo de sincronização do banco de dados e à construção de consenso, temos alguns bancos de dados comuns, que agora armazenam todas as transações com contratos estritamente descritos, e não algumas solicitações condicionais, cujos formatos geralmente mudam, mas não há uma especificação aberta. Aqui, as transações conterão instruções sobre como executar um contrato de acordo com especificações rígidas. Essa especificação é aberta e, portanto, os próprios usuários da plataforma podem auditar e validar contratos inteligentes. Aqui vemos que plataformas descentralizadas são superiores às plataformas centralizadas em independência e tolerância a falhas, mas seu design e manutenção são muito mais complicados.
Contratos inteligentes no caminho para definir e atender às condições
Agora, analisaremos mais detalhadamente como os contratos inteligentes podem diferir na maneira como são definidos e cumpridos. Aqui prestamos atenção aos contratos inteligentes, que são programados arbitrariamente e concluídos por Turing. Um contrato inteligente completo de Turing permite especificar quase qualquer algoritmo como condição para o cumprimento do contrato: ciclos de registro, algum tipo de função de cálculo de probabilidade e similares, até seus próprios algoritmos de assinatura eletrônica. Nesse caso, queremos dizer grafia realmente arbitrária da lógica.
Eles também destacam contratos inteligentes arbitrários, mas não completos de acordo com Turing. Isso inclui Bitcoin e Litecoin com seu próprio script. Isso significa que é possível usar apenas determinadas operações em uma ordem arbitrária, mas não é mais possível gravar loops e algoritmos personalizados.
Além disso, existem plataformas inteligentes de contratos que implementam contratos inteligentes predefinidos. Estes incluem Bitshares e Steemit. O Bitshares possui vários contratos inteligentes para negociação, gerenciamento de contas, gerenciamento da própria plataforma e seus parâmetros. O Steemit é uma plataforma semelhante, mas não se concentra mais em emitir tokens e negociar como o Bitshares, mas em blogs, ou seja, armazena e processa conteúdo de maneira descentralizada.
Os contratos arbitrários de conclusão de Turing incluem as plataformas Ethereum e RootStock, que ainda estão em desenvolvimento. Portanto, continuaremos detalhando a plataforma de contratos inteligentes da Ethereum.
Contratos inteligentes pelo método de iniciação
Pelo método de iniciação, os contratos inteligentes também podem ser divididos em pelo menos dois grupos: automatizado e manual (não automatizado).
É comum para os automatizados que, com todos os parâmetros conhecidos e o início das condições, o contrato inteligente seja totalmente executado automaticamente, ou seja, não é necessário enviar nenhuma transação adicional nem gastar uma comissão adicional para cada execução subsequente. A plataforma em si possui todos os dados para calcular como o contrato inteligente terminará. A lógica não é arbitrária, mas predeterminada, e tudo isso é previsível. Ou seja, com antecedência, você pode avaliar a complexidade do contrato inteligente, usar algum tipo de comissão constante e todos os processos para sua implementação são mais eficientes.Para contratos inteligentes programados arbitrariamente, a execução não é automatizada. Para iniciar um contrato inteligente, praticamente a cada etapa, é necessário criar uma nova transação que chamará o próximo estágio de execução ou o próximo método do contrato inteligente, pague a comissão apropriada e aguarde a confirmação da transação. A execução pode ser concluída com êxito ou não, porque o código do contrato inteligente é arbitrário e alguns momentos imprevisíveis podem aparecer, como um ciclo eterno, falta de alguns parâmetros e argumentos, momentos excepcionais não processados etc.Contas Ethereum
Tipos de contas Ethereum
Vamos considerar quais contas na plataforma Ethereum podem ser. Existem apenas dois tipos de contas aqui e não há mais opções. O primeiro tipo é chamado de conta de usuário, o segundo é a conta do contrato. Vamos ver como eles diferem.A conta do usuário é gerenciada apenas pela chave privada da assinatura eletrônica. O proprietário da conta gera seu par de chaves para assinatura eletrônica pelo algoritmo ECDSA (algoritmo de assinatura digital de curva elíptica). Somente as transações assinadas por essa chave podem alterar o estado desta conta.Existe uma lógica separada para a conta do contrato inteligente. Ele pode ser controlado apenas com a ajuda de um código de programa predeterminado que determina completamente o comportamento do contrato inteligente: como ele administrará suas moedas em determinadas circunstâncias, por iniciativa de qual usuário e sob quais condições adicionais essas moedas serão distribuídas. Se alguns pontos não forem fornecidos pelos desenvolvedores no código do programa, poderão surgir problemas. Por exemplo, um contrato inteligente pode receber algum estado específico em que não aceita o início de execução adicional de nenhum dos usuários. Nesse caso, as moedas serão congeladas, porque o contrato inteligente não fornece uma saída para esse estado.Como criar contas no Ethereum
No caso de uma conta de usuário, o proprietário gera independentemente um par de chaves via ECDSA. É importante observar que o Ethereum usa exatamente o mesmo algoritmo e a mesma curva elíptica do Bitcoin para assinatura eletrônica, mas o endereço é calculado de uma maneira ligeiramente diferente. Aqui, o resultado do hash duplo não é mais aplicado, como no Bitcoin, mas é fornecido um hashing único pela função Keccak com um comprimento de 256 bits. Os bits menos significativos são cortados do valor recebido, ou seja, os 160 bits menos significativos do valor de saída da função hash. Como resultado, obtemos o endereço no Ethereum. De fato, são necessários 20 bytes.Observe que o identificador de conta no Ethereum é codificado em hexadecimal sem usar uma soma de verificação, ao contrário do Bitcoin e de muitos outros sistemas em que o endereço é codificado no sistema de números base 58 com a adição de uma soma de verificação. Isso significa que você precisa trabalhar com identificadores de conta no Ethereum com cuidado: mesmo um erro no identificador é garantido para levar à perda de moedas.Há um recurso importante e consiste no fato de que uma conta de usuário no nível geral do banco de dados é criada no momento em que ele aceita a primeira entrada de pagamento.Existe uma abordagem completamente diferente para criar uma conta de contrato inteligente. Inicialmente, um dos usuários grava o código-fonte do contrato inteligente, após o qual o código é passado por um compilador especial para a plataforma Ethereum, recebendo código de bytes para a máquina virtual Ethereum. O bytecode recebido é colocado em um campo de transação especial. É autenticado em nome da conta do iniciador. Além disso, essa transação é distribuída pela rede e hospeda o código do contrato inteligente. A comissão pela transação e, consequentemente, pela execução do contrato é removida do saldo da conta do iniciador.Cada contrato inteligente contém necessariamente seu próprio construtor (deste contrato). Pode estar vazio ou pode ter conteúdo. Após a execução do construtor, é criado um identificador de conta de contrato inteligente, com o qual você pode enviar moedas, chamar certos métodos do contrato inteligente etc.Estrutura de transação do Ethereum
Para tornar mais claro, começaremos a revisar a estrutura da transação Ethereum e o código de contrato inteligente de amostra.
Uma transação Ethereum consiste em vários campos. O primeiro desses nonce é um determinado número de transação relativo à própria conta, que o distribui e é seu autor. Isso é necessário para distinguir as duplas de transações, ou seja, para excluir o caso em que a mesma transação é aceita duas vezes. Através do uso de um identificador, cada transação possui um valor de hash exclusivo.Isto é seguido por um campo como o preço do gás . Esse é o preço pelo qual a moeda base do Ethereum é convertida em gás, que paga pela execução do contrato inteligente e pela alocação do recurso da máquina virtual. O que isso significa?
No Bitcoin, as comissões são pagas diretamente pela moeda base - o próprio Bitcoin. Isso é possível graças a um mecanismo simples para calculá-los: pagamos estritamente a quantidade de dados contida na transação. No Ethereum, a situação é mais complicada, porque é muito difícil começar a partir da quantidade de dados da transação. Aqui, a transação ainda pode conter código de programa que será executado na máquina virtual e cada operação da máquina virtual pode ter complexidade diferente. Também existem operações que alocam memória para variáveis. Eles terão sua própria complexidade, da qual o pagamento para cada operação dependerá.O custo de cada operação em equivalente de gás será constante. É introduzido especificamente para determinar o custo constante de cada operação. Dependendo da carga na rede, o preço do gás mudará, ou seja, o coeficiente segundo o qual a moeda base será convertida nessa unidade auxiliar para pagar a comissão.Há outra característica da transação no Ethereum: o bytecode que ele contém para execução na máquina virtual será executado até terminar com algum resultado (falha de sucesso) ou até um certo número de moedas alocadas pagar uma comissão. É para evitar a situação em que, no caso de algum erro, todas as moedas foram gastas em comissão da conta do remetente (por exemplo, algum tipo de ciclo perpétuo foi lançado na máquina virtual), existe o seguinte campo - start gas (muitas vezes chamado de limite de gás) - define A quantidade máxima de moedas que o remetente está disposto a gastar em uma transação específica.O próximo campo é chamado endereço de destino. Isso inclui o endereço do destinatário das moedas ou o endereço de um contrato inteligente específico, cujos métodos serão chamados. Depois segue o campo do valor , onde é inserida a quantidade de moedas que são enviadas para o endereço de destino.A seguir, é um campo interessante chamado dados , que se ajusta a toda a estrutura. Este não é um campo separado, mas toda a estrutura na qual o código da máquina virtual está definido. Você pode colocar dados arbitrários aqui - existem regras separadas para isso.E o último campo é chamado de assinatura. Ele contém simultaneamente a assinatura eletrônica do autor desta transação e a chave pública com a qual essa assinatura será verificada. Na chave pública, é possível obter o identificador da conta do remetente para esta transação, ou seja, identificar exclusivamente a conta do remetente no próprio sistema. De acordo com a estrutura da transação, descobrimos o principal.Exemplo de código de contrato inteligente para solidez
Vamos agora dar uma olhada no contrato inteligente mais simples usando um exemplo.contract Bank { address owner; mapping(address => uint) balances; function Bank() { owner = msg.sender; } function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) public { if (balances[msg.sender] >= amount) { balances[msg.sender] -= amount; msg.sender.transfer(amount); } } function getMyBalance() public view returns(uint) { return balances[msg.sender]; } function kill() public { if (msg.sender == owner) selfdestruct(owner); } }
Acima está um código-fonte simplificado que pode armazenar moedas do usuário e devolvê-las sob demanda.
Portanto, existe um contrato inteligente do Banco que executa as seguintes funções: ele acumula moedas em seu saldo, ou seja, quando uma transação é confirmada e um contrato inteligente é colocado, é criada uma nova conta que pode conter moedas em seu saldo; lembra os usuários e a distribuição de moedas entre eles; Possui vários métodos para gerenciar saldos, ou seja, é possível reabastecer, retirar e verificar o saldo do usuário.
Vamos analisar cada linha do código fonte. Existem campos constantes neste contrato. Um deles, com o tipo de endereço, é chamado de proprietário. Aqui, o contrato lembra o endereço do usuário que criou este contrato inteligente. Além disso, existe uma estrutura dinâmica que preserva a correspondência entre os endereços e os saldos dos usuários.
Depois disso, segue o método do Banco - ele é chamado da mesma forma que o contrato. Por conseguinte, este é o seu construtor. Aqui, a variável do proprietário recebe o endereço da pessoa que postou este contrato inteligente na rede. Essa é a única coisa que acontece nesse construtor. Ou seja, msg nesse caso são exatamente os dados que foram transferidos para a máquina virtual junto com a transação que contém todo o código desse contrato. Por conseguinte, msg.sender é o autor desta transação, que hospeda esse código. Ele será o proprietário do contrato inteligente.
O método de depósito permite que uma transação transfira um certo número de moedas para uma conta de contrato. Nesse caso, o contrato inteligente, recebendo essas moedas, as deixa em seu balanço, mas escreve para a estrutura de saldos quem exatamente foi o remetente dessas moedas para saber a quem elas pertencem.
O próximo método é chamado de retirada e é necessário um parâmetro - a quantidade de moedas que alguém deseja retirar deste banco. Aqui está uma verificação para ver se há moedas suficientes no saldo do usuário que chama esse método para enviá-las. Se houver um número suficiente, o próprio contrato inteligente retorna essa quantia de moedas para o chamador.
A seguir, é o método de verificar o saldo atual do usuário. Quem chama esse método será usado para obter esse equilíbrio no contrato inteligente. Vale ressaltar que o modificador deste método é view. Isso significa que o próprio método não altera as variáveis de sua classe de forma alguma e, de fato, é apenas um método de leitura. Uma transação separada não é criada para chamar esse método, nenhuma comissão é paga e todos os cálculos são realizados localmente, após o que o usuário recebe o resultado.
O método kill é necessário para destruir o estado de um contrato inteligente. E aqui é feita uma verificação adicional se o chamador deste método é o proprietário deste contrato. Se for, o contrato é autodestrutivo e a função de destruição aceita um parâmetro - o identificador da conta, para o qual o contrato enviará todas as moedas restantes em seu saldo. Nesse caso, as moedas restantes irão automaticamente para o endereço do titular do contrato.
Como um nó de rede Ethereum completo funciona?
Vamos dar uma olhada esquemática em como esses contratos inteligentes são executados na plataforma Ethereum e como um nó de rede completo funciona.

Um nó de rede completo do Ethereum deve ter pelo menos quatro módulos.
O primeiro, como em qualquer protocolo descentralizado, é o módulo de rede P2P - um módulo para conexão de rede e trabalho com outros nós, onde são trocados blocos, transações e informações sobre outros nós. Este é um componente tradicional para todas as criptomoedas descentralizadas.
Além disso, temos um módulo para armazenar dados da blockchain, processar, selecionar uma ramificação prioritária, suplementar blocos, desacoplar blocos, verificar esses blocos etc.
O terceiro módulo é chamado EVM (máquina virtual Ethereum) - essa é a máquina virtual que aceita código de bytes da transação Ethereum. Este módulo pega o estado atual de uma conta específica e faz alterações em seu status com base no bytecode recebido. A versão da máquina virtual em cada um dos nós da rede deve ser a mesma. Os cálculos em cada um dos nós do Ethereum são exatamente os mesmos, mas ocorrem em uma ordem assíncrona: alguém verifica e aceita essa transação anteriormente, ou seja, executa todo o código contido nela e depois alguém. Assim, ao criar uma transação, ela se espalha para a rede, os nós a aceitam e no momento da verificação, assim como o Bitcoin Script é executado no Bitcoin, o código de bytes da máquina virtual é executado aqui.
Uma transação é considerada verificada se todo o código contido nela foi executado, um novo estado para uma conta específica foi gerado e salvo até ficar claro se essa transação foi aplicada ou não. Se a transação for aplicada, esse estado será considerado não apenas concluído, mas já relevante. Há um banco de dados que armazena o status de cada conta para cada host. Como todos os cálculos ocorrem da mesma maneira e o estado da blockchain é o mesmo, o banco de dados que contém o status de todas as contas também será o mesmo para cada nó.
Mitos e limitações dos contratos inteligentes
Quanto às restrições existentes para plataformas de contratos inteligentes do tipo Ethereum, pode-se citar o seguinte:
- execução de código;
- alocar memória;
- dados de blockchain;
- enviar pagamentos;
- criar novo contrato;
- chamar outros contratos.
Vamos examinar as restrições impostas a uma máquina virtual e, consequentemente, dissipar alguns mitos sobre contratos inteligentes. Em uma máquina virtual, que pode estar não apenas no Ethereum, mas também em plataformas similares, você pode executar operações lógicas verdadeiramente arbitrárias, ou seja, escrever código e ele será executado lá, além de poder alocar memória. No entanto, a comissão é paga separadamente por cada operação e por cada unidade de memória alocada adicionalmente.
Além disso, a máquina virtual pode ler dados do banco de dados blockchain para usar esses dados como um gatilho para executar uma ou outra lógica dos contratos inteligentes. Uma máquina virtual pode criar e enviar transações, pode criar novos contratos e chamar métodos de outros contratos inteligentes já publicados na rede: existem, disponíveis, etc.
O mito mais comum é que os contratos inteligentes da Ethereum podem usar informações de qualquer recurso da Internet em suas próprias condições. A verdade é que a máquina virtual não pode enviar uma solicitação de rede para algum recurso externo de informação na Internet, ou seja, é impossível escrever um contrato tão inteligente que distribua o valor entre os usuários, dependendo da temperatura da rua ou que venceu em algum campeonato ou com base em outro incidente ocorrido no mundo exterior, porque as informações sobre esses incidentes simplesmente não estão no banco de dados da plataforma em si. Ou seja, não há nada no blockchain sobre isso. Se não aparecer lá, a máquina virtual não poderá usar esses dados como gatilhos.
Desvantagens do Ethereum
Vamos listar os principais. A primeira desvantagem é que existem algumas dificuldades em projetar, desenvolver e testar contratos inteligentes no Ethereum (o Ethereum usa a linguagem Solidity para escrever contratos inteligentes). De fato, a prática mostra que uma porcentagem muito grande de todos os erros pertence ao fator humano. Isso é realmente verdade para os contratos inteligentes já escritos da Ethereum, que têm uma complexidade de médio ou superior. Se para contratos inteligentes simples a probabilidade de erro é pequena, em contratos inteligentes complexos muitas vezes ocorrem erros que levam ao roubo de fundos, ao seu congelamento, à destruição de contratos inteligentes de maneira inesperada etc. Muitos desses casos já são conhecidos.
A segunda desvantagem é que a própria máquina virtual não é perfeita, pois também é escrita por pessoas. Ele pode executar comandos arbitrários e isso é uma vulnerabilidade: vários comandos podem ser configurados de uma certa maneira, o que levará a consequências imprevisíveis. Essa é uma área muito complexa, mas já existem vários estudos que mostram que essas vulnerabilidades existem na versão atual da rede Ethereum e podem levar à falha de muitos contratos inteligentes.
Outra grande dificuldade, pode ser considerada uma desvantagem. Consiste no fato de que é possível, de maneira prática ou técnica, concluir que, se você compilar o código de bytes do contrato que será executado na máquina virtual, poderá determinar uma ordem específica de operações. Quando executadas em conjunto, essas operações carregam muito a máquina virtual e a desaceleram desproporcionalmente à comissão paga por essas operações.
No passado, já havia um período de desenvolvimento do Ethereum, quando muitos caras que entenderam em detalhes a operação da máquina virtual encontraram essas vulnerabilidades. De fato, as transações pagaram uma comissão muito pequena, mas praticamente desaceleraram toda a rede. Esses problemas são muito difíceis de resolver, porque você precisa determiná-los, em segundo lugar, ajustar o preço para executar essas operações e, em terceiro lugar, realizar um garfo rígido, o que significa atualizar todos os nós da rede para uma nova versão do software e, em seguida, ativação simultânea dessas alterações.
Quanto ao Ethereum, muita pesquisa foi realizada, muita experiência prática foi obtida: positiva e negativa, mas, no entanto, ainda existem dificuldades e vulnerabilidades que ainda precisam ser combatidas de alguma forma.
Assim, como a parte temática do artigo está concluída, passamos às perguntas que surgem com bastante frequência.
Perguntas frequentes
- Se todas as partes do contrato inteligente atual desejarem alterar os termos, poderão cancelar esse contrato inteligente usando várias assinaturas e criar um novo contrato inteligente com condições atualizadas para sua implementação?Aqui a resposta será dupla. Porque Como, por um lado, um contrato inteligente é definido uma vez e não implica em alterações; por outro, pode ter uma lógica predefinida que permita uma alteração completa ou parcial em algumas condições. Ou seja, se você deseja alterar algo em seu contrato inteligente, deve prescrever as condições sob as quais você pode atualizar essas condições. Assim, é apenas de maneira prudente que a renovação do contrato pode ser organizada. Mas também aqui você pode ter problemas: cometer algum tipo de erro e obter a vulnerabilidade correspondente. Portanto, essas coisas precisam ser muito detalhadas, bem projetadas e testadas.
- E se o mediador entrar em conspiração com uma das partes envolvidas: custódia ou contrato inteligente? É necessário um mediador em um contrato inteligente?Um mediador não é necessário em um contrato inteligente. Pode não ser. Se, no caso de custódia, o mediador entrar em conspiração de uma das partes, sim, esse esquema perderá drasticamente todo o seu valor. Portanto, os mediadores são escolhidos de maneira a serem confiáveis ao mesmo tempo por todas as partes envolvidas nesse processo. Dessa forma, você simplesmente não transferirá moedas para um endereço de multi-assinatura com o mediador em que você não confia.
- É possível transferir muitos tokens diferentes de um endereço para diferentes endereços de destino, por exemplo, endereços de troca, onde esses tokens são negociados em uma transação Ethereum?Esta é uma boa pergunta e diz respeito ao modelo de transação Ethereum e suas diferenças em relação ao modelo Bitcoin. E a diferença é dramática. Se no modelo de transação Ethereum você simplesmente transferir moedas, elas serão transferidas apenas de um endereço para outro, sem alteração, apenas a quantia específica que você especificou. Em outras palavras, esse não é um modelo de resultados não gastos (UTXO), mas um modelo de contas e saldos correspondentes. Teoricamente, é possível enviar vários tokens diferentes ao mesmo tempo com uma transação, se você escrever um contrato inteligente complicado, mas ainda precisar fazer muitas transações, criar um contrato, transferir tokens e moedas para ele e chamar o método apropriado. Isso requer esforço e tempo, respectivamente, na prática, não funciona assim e todos os pagamentos no Ethereum são feitos em transações separadas.
- Um dos mitos sobre a plataforma Ethereum é que é impossível descrever condições que dependerão dos dados de um recurso externo da Internet, e então?A solução é que o próprio contrato inteligente possa incluir um ou mais chamados oráculos confiáveis que coletam dados sobre o estado das coisas no mundo exterior e os transferem para contratos inteligentes por métodos especiais. O próprio contrato considera os dados que recebeu de partes confiáveis como verdadeiros. Para maior confiabilidade, eles simplesmente selecionam um grande grupo de oráculos e minimizam o risco de conluio. O contrato em si não pode levar em consideração dados de oráculos que contradizem a maioria.
Este tópico é abordado em uma das palestras do curso online Blockchain - "
Introdução aos contratos inteligentes ".