Introdução ao Solidity|Aula 29: Seletor de Funções

Recentemente, tenho reaprendido a solidez, consolidado os detalhes e escrito uma “Cartilha Minimalista de Solidez” para iniciantes usarem (os caras da programação podem encontrar outro tutorial), atualizada 1-3 vezes por semana.

Todos os códigos e tutoriais são de código aberto no github:github.com/AmazingAng/WTFSolidity

seletor

Quando chamamos uma função de um contrato inteligente, os primeiros 4 bytes do bytecode enviado são o seletor. Nesta palestra, abordaremos o que é um seletor e como usá-lo.

msg.data

msg.data é uma variável global no Solidity com o valor de calldata completo (o bytecode que chama a função).

No código a seguir, podemos usar o evento Log para gerar os dados de chamada que chamam a função hortelã:

Quando o parâmetro é 0x2c44b726ADF1963cA47Af88B284C06f30380fC78, os dados de chamada de saída são

Este bytecode confuso pode ser dividido em duas partes:

Na verdade, calldata diz ao contrato inteligente qual função eu quero chamar e quais são os parâmetros.

Assinaturas e seletores de função

Um seletor é definido como os primeiros 4 bytes do hash da assinatura da função, então o que é uma assinatura de função?

Na verdade, na Aula 21, introduzimos brevemente a assinatura da função, que é “nome da função (tipo de parâmetro separado por vírgula)”. Por exemplo, a assinatura da função para casa da moeda no código acima é “casa da moeda (endereço)”. Em contratos inteligentes, diferentes funções têm assinaturas de função diferentes, para que possamos determinar qual função chamar através da assinatura de função.

Observe que na assinatura da função, uint e int devem ser escritos como uint256 e int256.

Vamos escrever uma função para verificar se o seletor da função hortelã está 0x6a627842. Você pode executar a seguinte função e ver o resultado.

Use o seletor

Podemos usar o seletor para chamar a função de destino. Por exemplo, se eu quiser chamar a função hortelã, eu só preciso usar abi.encodeWithSelector para codificar o seletor e os parâmetros da função hortelã e passá-la para a função de chamada:

No log, podemos ver que a função hortelã é chamada com êxito e o evento Log é saída.

Resumo

Nesta palestra, apresentamos o que é um seletor de função, como ele se relaciona com msg.data, assinaturas de função e como usá-lo para chamar uma função objetiva.

Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • Comentário
  • Repostar
  • Compartilhar
Comentário
0/400
Sem comentários
  • Marcar

Negocie criptomoedas a qualquer hora e em qualquer lugar
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)