---
title: "O que é a função call do Solidity?"
description: "Aprenda como funcionam as funções call do Solidity"
---

# O que é a função call do Solidity?

A linguagem de programação [Solidity](https://www.alchemy.com/overviews/solidity) é usada principalmente para criar smart contracts na blockchain Ethereum. Este artigo vai cobrir todos os detalhes que você precisa saber sobre o que é a função call em Solidity.

## **O que é a função call em Solidity?**

A função `call`** em Solidity é uma função de baixo nível usada por desenvolvedores para interagir com outros contratos.**

Ao construir um [smart contract em Solidity](https://www.alchemy.com/overviews/solidity-smart-contract), o método `call` deve ser usado sempre que você quiser [interagir com outro contrato](https://www.alchemy.com/overviews/solidity-call-another-contract) a partir do seu próprio contrato.

Calls também podem ser usadas para executar outras funções no smart contract destinatário, usando Ether fornecido pelo chamador para pagar a transação. A função `call` também tem a vantagem de retornar o status da transação como um booleano, com o valor de retorno enviado como uma variável.

### **O que é calldata?**

`Calldata` é um tipo de armazenamento temporário, contendo os dados especificados nos argumentos de uma função. A diferença entre ele e memory, outro tipo de armazenamento temporário, é a imutabilidade de _calldata_—o que estiver armazenado em `calldata` não pode ser alterado.

## **Como funciona a função call em Solidity?**

A função call em Solidity funciona pegando `calldata`, que pode ser zero no caso de uma transferência nativa de ETH, e executando esse `calldata` no destinatário pretendido com base no [opcode CALL da EVM](https://ethereum.org/en/developers/docs/evm/opcodes/), de baixo nível.

Quando dados (ou seja, a função a ser chamada no smart contract destinatário) e gas são fornecidos, o método `call` é capaz de usar esses dois elementos para executar funções dentro de smart contracts.

### **Como usar o método call para enviar ether?**

Como uma das suas [funções Solidity](https://www.alchemy.com/overviews/solidity-functions), você pode usar o código abaixo na sua [IDE Solidity](https://www.alchemy.com/overviews/solidity-ide) de preferência e substituir `address payable _to` pelo endereço do destinatário.

Abaixo está um código que cria um contrato capaz de receber Ether de calls.

### Qual a diferença entre call e delegatecall?

A diferença entre `call` e `delegatecall` é que `delegatecall` vai executar a função chamada como se o seu código fizesse inteiramente parte do smart contract que está fazendo a chamada. Já o método `call` vai chamar a função como ela é, como parte de outro smart contract. Na prática, isso significa que a função chamada vai usar o storage, `msg.sender` e `msg.value` do chamador.

### Qual a diferença entre call e transfer?

Transfers têm um limite de gas fixo e serão canceladas em caso de falha. Calls têm um limite de gas customizável usando `someAddress.call.value(ethAmount).gas(gasAmount)()` no lugar da call usual, e retornarão false se a transação falhar.

O método `transfer` não é mais recomendado para uso. No entanto, historicamente, `transfer` era preferido porque usa um limite embutido de gas, o que ajudava a [prevenir exploits de reentrância](https://www.alchemy.com/overviews/reentrancy-attack-solidity). O limite de gas imutável do método transfer também o tornava uma escolha melhor para cálculos em que você desejava definir um limite máximo de 2300 gas.

## **Como aprender mais sobre o método call em Solidity**

Para [continuar aprendendo sobre calls em Solidity](https://www.alchemy.com/overviews/learn-solidity), garanta sua vaga no curso intensivo gratuito e online de desenvolvimento em Solidity da Alchemy University. Este bootcamp de Ethereum de 7 semanas, [assíncrono](https://university.alchemy.com/?a=5f566a8c97), foi reformulado após a aquisição pela Alchemy da ChainShot, empresa líder em educação sobre Ethereum.

Se os desenvolvedores forem novos em desenvolvimento de forma geral, o [**curso intensivo de JavaScript de 3 semanas**](https://www.alchemy.com/university/courses/js) da Alchemy University é um ótimo pré-requisito antes de começar um bootcamp de Ethereum.
