Exercício – Escrever um contrato inteligente
Nesta unidade, vamos adicionar um novo contrato inteligente ao newSolidityProject que criamos anteriormente.
Criar um contrato de remessa
O contrato inteligente que você criará rastreia o status de itens comprados de um marketplace online. Quando o contrato é criado, o status da remessa é definido para Pending
. Quando um item é despachado, o status do envio muda para Shipped
e um evento é emitido. Após a entrega, o status da remessa do item passa para Delivered
e outro evento é emitido.
Para iniciar este exercício:
No projeto que você criou, no diretório contratos, clique com o botão direito do mouse na pasta e escolha criar um arquivo chamado Shipping.sol.
Copie os conteúdos do contrato a seguir e cole-os no novo arquivo.
pragma solidity >=0.4.25 <0.9.0; contract Shipping { // Our predefined values for shipping listed as enums enum ShippingStatus { Pending, Shipped, Delivered } // Save enum ShippingStatus in variable status ShippingStatus private status; // Event to launch when package has arrived event LogNewAlert(string description); // This initializes our contract state (sets enum to Pending once the program starts) constructor() public { status = ShippingStatus.Pending; } // Function to change to Shipped function Shipped() public { status = ShippingStatus.Shipped; emit LogNewAlert("Your package has been shipped"); } // Function to change to Delivered function Delivered() public { status = ShippingStatus.Delivered; emit LogNewAlert("Your package has arrived"); } // Function to get the status of the shipping function getStatus(ShippingStatus _status) internal pure returns (string memory) { // Check the current status and return the correct name if (ShippingStatus.Pending == _status) return "Pending"; if (ShippingStatus.Shipped == _status) return "Shipped"; if (ShippingStatus.Delivered == _status) return "Delivered"; } // Get status of your shipped item function Status() public view returns (string memory) { ShippingStatus _status = status; return getStatus(_status); } }
Analise o contrato para ver o que está acontecendo. Confirme se você consegue criar o contrato.
No painel Explorar, clique com o botão direito do mouse no contrato e selecione Criar Contratos para compilar o contrato inteligente.
Adicionar uma migração
Agora vamos adicionar um arquivo de migração para podermos implantar o contrato na rede do Ethereum.
No painel Explorar, passe o ponteiro do mouse sobre a pasta migrações e escolha Novo Arquivo. Nomeie o arquivo 2_Shipping.js.
Adicione este código ao arquivo:
const Shipping = artifacts.require("Shipping"); module.exports = function (deployer) { deployer.deploy(Shipping); };
Implantar
Em seguida, confirme se é possível implantar o contrato antes de continuar. Clique com o botão direito do mouse no nome do contrato e selecione Implantar Contratos. Na janela que aparecerá, selecione desenvolvimento e aguarde a conclusão da implantação.
Observe a informação na janela de saída. Procure uma implantação do 2_Shipping.js.