🇵🇹
DAO Lunes Labs - PT
  • 👋Seja Bem-vindo a DAO Lunes Labs
  • Overview
    • 🚪Introdução
    • 🚀Manifesto DAO Lunes Labs
    • 🍕Tokenomics
    • 👑Proposta de Valor
    • 🧑‍🚀Comunidade e Participação
    • 🗺️Roadmap
    • 💼Compromisso com Ética e Responsabilidade
    • 👾Programa de Bug Bounty: Lunes Security Initiative (LSI)
  • Developers
    • 💽Para Nodes
      • 🥾Instalar Node
        • 🏗️Rust toolchain
        • 🐧Linux
    • 🖥️Para Desenvolvedores
      • 📑Smart Contract Ink! 4.x
        • ✨Configuração
          • 📐Criando um projeto com ink!
          • 🖥️Compile Seu Contrato
          • ⛓️Executar um nó Lunes
          • ⬆️Implante seu contrato
          • 🔛Chame Seu Contrato
          • 🛠️Solução de problemas
        • 🪄Fundamentos
          • 👾Modelo de Contrato
          • 👨‍🚀Armazenando Valores
          • 🔭Lendo Valores do Armazenamento
          • 🦸‍♂️Alterando os Valores de Armazenamento
          • 🎡Eventos
          • 👨‍🔧Seletores
          • 🪶Definições de Trait
          • 🗣️Chamadas entre Contratos (Cross-Contract Calls)
          • 🦸Contratos Atualizáveis
          • 🤺Funções do Ambiente
          • 🏟️Tipos de Ambiente de Cadeia
          • 💠Metadados
          • 🧪Testes de Contrato
          • 🕵️‍♂️Depuração de Contratos
          • 🔬Verificação de Contrato
        • 🎙️Macros e Atributos
          • 📇#[ink::contract]
          • 👽#[ink(anonymous)]
          • 👷#[ink(constructor)]
          • 📏#[ink(default)]
          • 🎢#[ink(event)]
          • 🛩️#[ink(impl)]
          • 📧#[ink(message)]
          • 👨‍💼#[ink(namespace = "…")]
          • 💸#[ink(payable)]
          • ⚡#[ink(selector = S:u32)]
          • 💽#[ink(storage)]
          • 💣#[ink(topic)]
          • ⛓️#[ink::chain_extension]
        • 💽Storege & Data Structires
          • Working with Mapping
          • Storage Layout
          • Custom Data Structures
          • Metadata Format
        • 👾Frontend Development
          • Getting Started
          • Connect Wallet
          • Hooks
            • All Hooks
            • Contracts
              • useCall
              • useCallSubscription
              • useContract
              • useDryRun
              • useEventSubscription
              • useEvents
              • useTx
              • useTxPaymentInfo
            • Wallets
              • useWallet
              • useAllWallets
              • useInstalledWallets
              • useUninstalledWallets
            • API
              • useApi
              • useBalance
              • useBlockHeader
          • Configuration
          • useink / core
            • Contracts
              • Call
              • decodeCallResult
              • decodeError
              • getRegistryError
              • toAbiMessage
          • useink / chains
            • Getting Started
            • Chain Configurations
            • ChainId
          • useink / notifications
            • Getting Started
            • Configuration
            • useNotifications
            • toNotificationLevel
          • useink / utils
            • Getting Started
            • Pick Helpers
            • tx Helpers
            • Types
        • 💡Examples
          • 📔Smart Contracts
          • 📱Dapps
        • 🛠️Tools
          • 🖌️OpenBrush
      • 📒Smart Contract - EVM
        • Create ERC-20 Ink Token!
      • 💰Desenvolvendo uma Wallet Lunes
        • 👾Transações de Tokens PSP22
    • 🎨Para Designers
      • 🖌️Brand Lunes
Powered by GitBook
On this page
  • RPC calls vs. Transactions​
  • Utilizando a interface do usuário dos Contracts UI​
  • Utilizando cargo-contract​

Was this helpful?

  1. Developers
  2. Para Desenvolvedores
  3. Smart Contract Ink! 4.x
  4. Configuração

Chame Seu Contrato

Last updated 1 year ago

Was this helpful?

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.

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.

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:

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.

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:

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

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
cargo contract call --contract ... --message flip --suri //Alice

State mutating via submitting a Transaction

Contract execution via transaction

Utilizando a interface do usuário dos Contracts UI

1. get() function

An image of Flipper RPC call with false

2. flip() function

An image of a Flipper transaction
An image of Flipper RPC call with true

Utilizando cargo-contract

1. get() function

2. flip() function

🖥️
📑
✨
🔛
​
​
​
​
​
​
​
​
​