Introdução à Solidez|Aula 21: Invocando Outros Contratos

律动

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

Invoque o contrato implantado

Os desenvolvedores escrevem contratos inteligentes para invocar outros contratos, o que permite que programas na rede Ethereum sejam reutilizados, construindo assim um ecossistema próspero. Muitos projetos web3 dependem da invocação de outros contratos, como a agricultura de rendimento. Nesta palestra, mostraremos como chamar a função do contrato de destino quando o código do contrato (ou interface) e o endereço são conhecidos.

Contrato-alvo

Vamos começar escrevendo um contrato simples, OtherContract, para chamá-lo.

Este contrato contém uma variável de estado x, um log de eventos que é acionado quando o ETH é recebido e três funções:

getBalance(): Devolve o saldo ETH do contrato.

setX(): função externa a pagar, que pode definir o valor de x e enviar ETH para o contrato.

getX(): Lê o valor de x.

Ligue para o contrato OtherContract

Podemos criar uma referência ao contrato usando o endereço do contrato e o código do contrato (ou interface): _Name(_Address), onde _Name é o nome do contrato e _Address é o endereço do contrato. Em seguida, chame sua função com uma referência ao contrato: _Name(_Address).f(), onde f() é a função a ser chamada.

Aqui estão 4 exemplos de invocar contratos:

1. Passe no endereço do contrato

Podemos passar o endereço do contrato de destino para a função, gerar uma referência ao contrato de destino e, em seguida, chamar a função de destino. Por exemplo, escrevemos uma função callSetX no novo contrato, passando o endereço do contrato OtherContract implantado _Address e o parâmetro x do setX:

2. Aprovação em variáveis contratuais

Podemos passar diretamente a referência de contrato na função, e só precisamos alterar o tipo de endereço do parâmetro acima para o nome do contrato de destino, que é melhor do que OtherContract. O exemplo a seguir implementa a função getX() que chama o contrato de destino.

3. Criar uma variável de contrato

Podemos criar uma variável de contrato e, em seguida, usá-la para chamar a função objetiva. No exemplo a seguir, armazenamos uma referência ao contrato OtherContract para a variável oc:

4. Ligue para o contrato e envie ETH

Se a função do contrato alvo for pagável, então podemos transferir dinheiro para o contrato chamando-o: _Name(_Address).f{value: _Value}(), onde _Name é o nome do contrato, _Address é o endereço do contrato, f é o nome da função objetiva e _Value é a quantidade de ETH a ser transferida (em wei).

A função setX do contrato OtherContract é pagável e, no exemplo a seguir, transferimos dinheiro de e para o contrato de destino chamando setX.

Após a transferência, podemos observar a alteração do saldo ETH do contrato alvo através do evento Log e da função getBalance().

Resumo

Nesta palestra, mostraremos como criar uma referência ao contrato através do código do contrato de destino (ou interface) e endereço, de modo a chamar as funções do contrato de destino.

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