🔛Chame Seu Contrato

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.

RPC calls vs. Transactions

Existem duas maneiras de chamar um contrato:

Dry-run via RPC

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.

State mutating via submitting a Transaction

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

1. get() function

Configuramos o valor inicial do contrato Flipper value como false quando instanciamos o contrato. Vamos verificar se isso é verdade.

Na seção Message to Send, selecione a mensagem "get(): bool" e aceite os valores padrão para as outras opções.

Pressione "Read" e confirme que ele retorna o valor false:

An image of Flipper RPC call with false

2. flip() function

Vamos fazer o valor se tornar true agora!

A mensagem alternativa a ser enviada pela interface do usuário é flip(). Novamente, aceite os valores padrão para as outras opções e clique em Chamar.

An image of a Flipper transaction

Se a transação foi bem-sucedida, então deveríamos ser capazes de voltar para a função get() e ver nosso armazenamento atualizado:

An image of Flipper RPC call with true

Utilizando cargo-contract

Chamar um contrato também pode ser feito via linha de comando!

1. get() function

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

2. flip() function

cargo contract call --contract ... --message flip --suri //Alice

Last updated

Was this helpful?