Pular para o conteúdo
0%

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

Alchemy team headshot

Escrito por Alchemy

Publicado em 4 de outubro de 20223 min de leitura

A linguagem de programação 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, o método call deve ser usado sempre que você quiser interagir com outro contrato 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, 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, você pode usar o código abaixo na sua IDE Solidity 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. 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, 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, 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 da Alchemy University é um ótimo pré-requisito antes de começar um bootcamp de Ethereum.

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.