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.

Isenção de responsabilidade: As informações contidas nesta página podem ser provenientes de terceiros e não representam os pontos de vista ou opiniões da Gate. O conteúdo apresentado nesta página é apenas para referência e não constitui qualquer aconselhamento financeiro, de investimento ou jurídico. A Gate não garante a exatidão ou o carácter exaustivo das informações e não poderá ser responsabilizada por quaisquer perdas resultantes da utilização destas informações. Os investimentos em ativos virtuais implicam riscos elevados e estão sujeitos a uma volatilidade de preços significativa. Pode perder todo o seu capital investido. Compreenda plenamente os riscos relevantes e tome decisões prudentes com base na sua própria situação financeira e tolerância ao risco. Para mais informações, consulte a Isenção de responsabilidade.
Comentar
0/400
Nenhum comentário