Agora que seu contrato foi totalmente implantado, podemos começar a interagir com ele! O Flipper possui apenas duas funções: flip() e get(). Vamos mostrar a você como é brincar com ambas.
As chamadas de procedimento remoto, ou métodos RPC, são uma maneira de um programa externo - como um navegador ou aplicativo front-end - se comunicar com um nó Substrate. Por exemplo, você pode usar um método RPC para ler um valor armazenado, enviar uma transação ou solicitar informações sobre a cadeia a qual um nó está conectado.
Se uma interface de usuário exibe o valor de um contrato (por exemplo, o saldo de uma conta em um contrato ERC-20), isso geralmente é feito via RPC. Especificamente, é feito executando uma simulação síncrona do método do contrato e retornando seu resultado. O seguinte esquema ilustra isso.
Contract dry-run via RPC
As chamadas RPC não requerem tokens, apenas uma conexão com um nó na rede. É importante observar que a execução não resultará em nenhuma mutação de estado na blockchain, na verdade, é apenas uma simulação.
O outro método de executar uma chamada a um contrato é enviando uma transação na blockchain. Isso requer tokens da rede para pagar pelo custo da transação. A transação será colocada em uma fila de transações e processada de forma assíncrona. A implicação importante aqui é que durante o envio da transação, nenhum resultado está disponível. Isso difere de uma chamada RPC.
O padrão típico para como um cliente pode reconhecer o resultado da chamada do contrato é ter o contrato emitir um evento e fazer com que o cliente ouça ativamente por esse evento. Normalmente, bibliotecas (como polkadot-js/api) fornecem funções de API para fazer exatamente isso. A lição importante é que os desenvolvedores de contratos precisam garantir que eventos sejam emitidos se desejarem que os clientes possam detectá-los.
Contract execution via transaction
Utilizando a interface do usuário dos Contracts UI
cargo contract build
cargo contract upload --suri //Alice
cargo contract instantiate --suri //Alice --args true
# The output of this command will contain the contract address,
# insert it in the command below.
cargo contract call --contract ... --message get --dry-run --suri //Alice