> For the complete documentation index, see [llms.txt](https://lunes-labs.gitbook.io/dao-lunes-labs-pt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lunes-labs.gitbook.io/dao-lunes-labs-pt/developers/para-desenvolvedores/smart-contract-ink-4.x/configuracao/chame-seu-contrato.md).

# 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[​](https://use.ink/getting-started/calling-your-contract#rpc-calls-vs-transactions) <a href="#rpc-calls-vs-transactions" id="rpc-calls-vs-transactions"></a>

Existem duas maneiras de chamar um contrato:

#### Dry-run via RPC[​](https://use.ink/getting-started/calling-your-contract#dry-run-via-rpc) <a href="#dry-run-via-rpc" id="dry-run-via-rpc"></a>

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.&#x20;

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.

<img src="https://use.ink/assets/images/rpc-5041374ae33ff356d14564fa95dd19f9.svg" alt="Contract dry-run via RPC" width="563">

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[​](https://use.ink/getting-started/calling-your-contract#state-mutating-via-submitting-a-transaction) <a href="#state-mutating-via-submitting-a-transaction" id="state-mutating-via-submitting-a-transaction"></a>

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.&#x20;

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.

<img src="https://use.ink/assets/images/events-53d529742fe8d0f33d007d7a97a12cc1.svg" alt="Contract execution via transaction" width="563">

### Utilizando a interface do usuário dos Contracts UI[​](https://use.ink/getting-started/calling-your-contract#using-the-contracts-ui) <a href="#using-the-contracts-ui" id="using-the-contracts-ui"></a>

#### 1. `get()` function[​](https://use.ink/getting-started/calling-your-contract#1-get-function) <a href="#id-1-get-function" id="id-1-get-function"></a>

Configuramos o valor inicial do contrato Flipper `value` como `false` quando instanciamos o contrato. Vamos verificar se isso é verdade.&#x20;

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

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

![An image of Flipper RPC call with false](https://use.ink/assets/images/flipper-false-e8506dfd800a64c0d39ebc50ba2813e5.png)

#### 2. `flip()` function[​](https://use.ink/getting-started/calling-your-contract#2-flip-function) <a href="#id-2-flip-function" id="id-2-flip-function"></a>

Vamos fazer o valor se tornar `true` agora!&#x20;

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](https://use.ink/assets/images/send-as-transaction-f551eeeeb6eee601202582d3405efc37.png)

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](https://use.ink/assets/images/flipper-true-5647327602f44a9e51b710f7ece60c77.png)

### Utilizando `cargo-contract`[​](https://use.ink/getting-started/calling-your-contract#using-cargo-contract) <a href="#using-cargo-contract" id="using-cargo-contract"></a>

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

#### 1. `get()` function[​](https://use.ink/getting-started/calling-your-contract#1-get-function-1) <a href="#id-1-get-function-1" id="id-1-get-function-1"></a>

```shell
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[​](https://use.ink/getting-started/calling-your-contract#2-flip-function-1) <a href="#id-2-flip-function-1" id="id-2-flip-function-1"></a>

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://lunes-labs.gitbook.io/dao-lunes-labs-pt/developers/para-desenvolvedores/smart-contract-ink-4.x/configuracao/chame-seu-contrato.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
