---
title: "O que é a interface de contrato do Solidity?"
description: "Tudo o que você precisa saber sobre a interface de smart contract do Solidity"
---

# O que é a interface de contrato do Solidity?

**[Solidity](https://www.alchemy.com/overviews/solidity)** é uma linguagem de alto nível orientada a objetos para implementar smart contracts. Ao [escrever smart contracts em Solidity](https://www.alchemy.com/overviews/solidity-smart-contract), você pode querer usar interfaces para interagir com outros smart contracts. Saber usar interfaces vai ajudar a aumentar seu conhecimento da linguagem Solidity e pode te dar novas ideias sobre outros smart contracts interessantes que você pode construir.

Neste artigo, explicamos o que é uma interface de contrato Solidity e mostramos como criar uma. Fornecemos alguns exemplos de implementação e declaração de interface para servir de guia enquanto você escreve a sua.

## **O que é a interface Solidity?**

**Uma interface de contrato Solidity é uma lista de definições de funções sem implementação.** Em outras palavras, uma interface é uma descrição de todas as funções que um objeto precisa ter para operar. A interface impõe um conjunto definido de propriedades e funções a um contrato.

Solidity permite que você interaja com outros contratos sem ter o código deles, usando a interface deles. Por exemplo, se você quiser interagir com outro contrato a partir do seu próprio contrato, você fornece suas chamadas com um wrapper de interface. Ao declarar uma interface, você pode interagir com outros contratos e [chamar funções de outro contrato](https://www.alchemy.com/overviews/solidity-call-another-contract).

Interfaces geralmente ficam no topo de um contrato Solidity, e são identificadas usando a palavra-chave "interface". Como interfaces reduzem a duplicação de código e o overhead, elas são mais úteis quando aplicações descentralizadas precisam de extensibilidade e querem evitar complexidade.

### **Características da interface Solidity**

1. A interface Solidity pode herdar de outras interfaces
1. Contratos podem herdar interfaces da mesma forma que herdam outros contratos
1. Você pode sobrescrever (override) uma função de interface
1. Tipos de dados definidos dentro de interfaces podem ser acessados a partir de outros contratos

Todas as funções que herdam da interface precisam definir o modificador override em toda função que sobrescreve uma função de interface. Caso contrário, [o compilador Solidity](https://www.alchemy.com/overviews/solidity-compiler) vai gerar um erro.

### **Contratos abstratos vs. interfaces**

**Contratos abstratos e interfaces são duas maneiras de desenvolvedores web3 construírem aplicações distribuídas maiores e mais complexas, pois permitem extensibilidade dentro do Solidity.**

Contratos abstratos possuem ao menos uma função sem implementação e, por isso, não podem ser compilados. No entanto, contratos abstratos podem ser usados como contratos base dos quais outros contratos podem herdar.

Interfaces são parecidas com contratos abstratos, mas não podem ter nenhuma função implementada. Além disso, interfaces são limitadas ao que a [Application Binary Interface (ABI)](https://www.alchemy.com/overviews/solidity-abi) do contrato consegue representar. A conversão entre a ABI e uma interface é possível sem perda de informação.

## **Como criar uma interface Solidity**

**Interfaces geralmente ficam no topo do seu programa e são declaradas com a palavra-chave "interface". Depois você pode usar essa interface para se comunicar com outro contrato, ou pode implementar a interface.**

Suponha que você estivesse escrevendo uma smart contract wallet, ela poderia se parecer com isto:

<ImageBlock
  src="https://media.alchemy.com/1703924327-how-to-create-a-solidity-interface.png"
  alt="Como Criar uma Interface Solidity"
  width={1346}
  height={894}
  caption="Como Criar uma Interface Solidity"
/>

Observe o uso de "`is IWallet`" aqui. Nesse caso, estamos herdando a interface `IWallet` e implementando-a em nosso contrato, `Wallet`.

Então, se você tivesse algum smart contract que quisesse conseguir se comunicar com wallets (`WalletFriendlyContract` aqui), você poderia reutilizar a interface:

<ImageBlock
  src="https://media.alchemy.com/1703924551-re-use-solidity-interface.png"
  alt="Reutilizar interface Solidity"
  width={1548}
  height={894}
  caption="Reutilizar interface Solidity"
/>

### Requisitos da interface Solidity

Existem algumas restrições ao criar interfaces em Solidity, e os desenvolvedores devem lembrar desta lista dos principais requisitos de interface:

1. A interface não pode ter nenhuma função implementada
1. [Funções](https://www.alchemy.com/overviews/solidity-functions) de uma interface só podem ser do tipo external
1. A interface não pode declarar um construtor
1. A interface não pode declarar variáveis de estado

## **Exemplos de interface Solidity**

Esta seção contém alguns exemplos para te guiar na escrita de código de interface Solidity.

O seguinte [exemplo de código de interface](https://docs.soliditylang.org/en/v0.8.17/contracts.html#interfaces), retirado da **documentação do Solidity**, cria uma interface chamada "Token" para obter informações sobre transações. Ela contém uma função para acessar informações sobre o endereço do destinatário e o valor transferido a partir de outros contratos.

<ImageBlock
  src="https://media.alchemy.com/1703924819-example-interface-code.png"
  alt="Exemplo de código de interface"
  width={1318}
  height={550}
  caption="Exemplo de código de interface"
/>

O próximo [exemplo de interface Solidity](https://www.solidity-by-example.org/interface/), retirado de **Solidity by Example**, mostra um contrato completo com declaração e implementação de interface.

<ImageBlock
  src="https://media.alchemy.com/1703924953-full-contract-with-interface-declaration-and-implementation.jpg"
  alt="Contrato completo com declaração e implementação da interface"
  width={1053}
  height={1600}
  caption="Contrato completo com declaração e implementação da interface"
/>

## **Comece a construir aplicações Solidity com a Alchemy**

Este artigo apresentou as interfaces Solidity e demonstrou como desenvolvedores podem usar interfaces para economizar tempo e reduzir complexidade ao construir aplicações em Solidity. Para [continuar aprendendo sobre Solidity](https://www.alchemy.com/overviews/learn-solidity), explore o [Ethereum Developer Bootcamp gratuito](https://university.alchemy.com/?a=d3f70d2955) da Alchemy University, que explica os conceitos fundamentais do desenvolvimento em Solidity ao longo de um curso autoguiado de 7 semanas, repleto de desafios de código, videoaulas e os melhores recursos para dominar Solidity.

Se os desenvolvedores forem novos no desenvolvimento em geral, o **curso intensivo de JavaScript de 3 semanas** da Alchemy University é um ótimo pré-requisito antes de começar um bootcamp de Ethereum.
