Introdução aos contratos inteligentes
O que é um contrato inteligente?
Um "contrato inteligente" é simplesmente um programa que é executado na cadeia de blocos nexus. É uma coleção de código (suas funções) e dados (seu estado) que reside em um endereço específico na blockchain nexus.
Os contratos inteligentes são um tipo de conta nexus. Isso significa que eles têm um saldo e podem enviar transações através da rede. No entanto, eles não são controlados por um usuário, em vez disso, eles são implantados na rede e são executados como programados. Contas de usuários podem então interagir com um contrato inteligente enviando transações que executam uma função definida no contrato inteligente. Os contratos inteligentes podem definir regras, como um contrato regular, e aplicá-los automaticamente através do código. Os contratos inteligentes não podem ser excluídos por padrão, e as interações com eles são irreversíveis.
Pré-requisitos
Verifique se você leu as contas, transações e a máquina virtual nexus antes de entrar no mundo dos contratos inteligentes.
Uma máquina de vendas digitais
Talvez a melhor metáfora para um contrato inteligente seja uma máquina de venda automática, descrita por Nick Szabo. Com as entradas certas, uma certa saída é garantida.
Para obter um snack de uma máquina de venda automática:
1dinheiro +seleção de snack = snack dispensado2
Esta lógica está programada para a máquina de venda automática.
Um contrato inteligente, como uma máquina de venda automática, tem lógica programada dentro dele. Aqui há um exemplo simples de como uma máquina de venda automática pareceria, atuando como um contrato inteligente:
1pragma solidity 0.8.7;23contract VendingMachine {45 // Declarar variáveis de estado do endereço público do proprietário do contrato;6 mapping (address => uint) public cupcakeBalances;78 // Quando o contrato 'VendingMachine' é implantado:9 // 1. defina o endereço de implantação como proprietário do contrato10 // 2. defina o saldo de cupcake do contrato inteligente para 10011 constructor() public {12 owner = msg.sender;13 cupcakeBalances[address(this)] = 100;14 }1516 // Permite que o proprietário aumente o saldo de cupcake no contrato inteligente17 function refill(uint amount) public {18 require(msg.sender == owner, "Only the owner can refill.");19 cupcakeBalances[address(this)] += amount;20 }2122 // Permite que qualquer pessoa adquira cupcakes23 function purchase(uint amount) public payable {24 require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");25 require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");26 cupcakeBalances[address(this)] -= amount;27 cupcakeBalances[msg.sender] += amount;28 }29}30Exibir tudoCopiar
De maneira similar a como uma máquina de venda automática elimina a necessidade de um funcionário fornecedor, os contratos inteligentes podem substituir intermediários em muitos setores.
Sem necessidade de permissão
Qualquer um pode escrever um contrato inteligente e implantá-lo na rede. Você só precisa aprender a codificar em um idioma de contrato inteligente e ter ETH suficiente para implantar seu contrato. A implantação de um contrato inteligente é tecnicamente uma transação, então você precisa pagar as suas Gás da mesma forma que você precisa pagar gás por uma transferência de ETH simples. No entanto, os custos do gás para a implantação contratual são muito mais elevados.
O nexus tem linguagens amigáveis ao desenvolvedor para escrever contratos inteligentes:
- Solidity
- Vyper
No entanto, eles devem ser compilados antes de poderem ser implantados para que a máquina virtual da nexus possa interpretar e armazenar o contrato. Mais sobre compilação
Componibilidade
Os contratos inteligentes são públicos na nexus e podem ser considerados como APIs abertas. Isso significa que você pode chamar outros contratos inteligentes em seu próprio contrato inteligente para ampliar muito o que é possível. Os contratos podem mesmo implantar outros contratos.
Saiba mais sobre a composição do contrato inteligente.
Limitações
Os contratos inteligentes, por si só, não conseguem obter informações sobre eventos "mundo-real" porque não podem enviar solicitações HTTP. Isto é por design. A sua concepção é a de que a informação externa pode pôr em causa o consenso, que é importante para a segurança e a descentralização.
Há maneiras de contornar isso usando oráculos.
Outra limitação de contratos inteligentes é o tamanho máximo do contrato. Um contrato inteligente pode ser um máximo de 24KB ou ficará sem gás. Isso pode ser contornado usando O Padrão de Diamante.
Recursos para contratos inteligentes
OpenZeppelin Contracts - Biblioteca para o desenvolvimento de contratos inteligentes seguros.
DappSys - Blocos de código seguros, simples e flexíveis para smart contracts.
Leitura Adicional
- Contratos Inteligentes: A Tecnologia Blockchain que substituirá Advogados – Blockgeeks
- Melhores Práticas para Desenvolvimento de Contrato Inteligente – 10 de Novembro de 2019 - Yos Riady
- Contratos claros - um guia sobre padrões de contrato inteligente & práticas – Jul 30 2020 - wslyvh