Початок роботи з Solidity|Лекція 21: Звернення до інших контрактів

律动

Нещодавно я заново вивчав solidity, консолідував деталі та писав “Solidity Minimalist Primer” для початківців (хлопці з програмування можуть знайти інший підручник), який оновлюється 1-3 рази на тиждень.

Весь код та підручники мають відкритий вихідний код за адресою github:github.com/AmazingAng/WTFSolidity

Виклик розгорнутого контракту

Розробники пишуть смарт-контракти для виклику інших контрактів, що дозволяє повторно використовувати програми в мережі Ethereum, створюючи таким чином процвітаючу екосистему. Багато проєктів web3 покладаються на використання інших контрактів, таких як прибутковий фарм. У цій доповіді ми покажемо вам, як викликати функцію цільового контракту, коли код контракту (або інтерфейс) та адреса відомі.

Цільовий контракт

Давайте почнемо з написання простого контракту, OtherContract, щоб назвати його.

Цей контракт містить змінну стану x, журнал подій, який спрацьовує при отриманні ETH, і три функції:

getBalance(): повертає ETH баланс контракту.

setX(): зовнішня функція до оплати, яка може встановити значення x і відправити ETH на контракт.

getX(): зчитує значення x.

Виклик договору OtherContract

Ми можемо створити посилання на контракт, використовуючи адресу контракту та код контракту (або інтерфейс): _Name(_Address), де _Name – назва контракту, а _Address – адреса контракту. Потім викличте його функцію з посиланням на контракт: _Name(_Address).f(), де f() - функція, яку потрібно викликати.

Ось 4 приклади звернення до контрактів:

1. Пройдіть за адресою договору

Ми можемо передати адресу цільового контракту у функцію, згенерувати посилання на цільовий контракт, а потім викликати цільову функцію. Наприклад, у новому контракті ми пишемо функцію callSetX, передавши розгорнуту адресу контракту OtherContract _Address та параметр x:

2. Передача змінних контракту

Ми можемо безпосередньо передати посилання на контракт у функції, і потрібно лише змінити тип адреси вищевказаного параметра на ім’я цільового контракту, що краще, ніж OtherContract. У наведеному нижче прикладі реалізовано функцію getX(), яка викликає цільовий контракт.

3. Створення змінної контракту

Ми можемо створити змінну контракту, а потім використовувати її для виклику цільової функції. У наступному прикладі ми зберігаємо посилання на контракт OtherContract для змінної oc:

4. Зателефонуйте за контрактом і надішліть ETH

Якщо функція цільового контракту є платною, то ми можемо перевести гроші на контракт, викликавши його: _Name(_Address).f{value: _Value}(), де _Name - ім’я контракту, _Address - адреса контракту, f - ім’я цільової функції, а _Value - сума ETH, що підлягає передачі (у wei).

Функція setX контракту OtherContract є платною, і в наступному прикладі ми переводимо гроші до та з цільового контракту за допомогою виклику setX.

Після перенесення ми можемо спостерігати зміну балансу ETH цільового контракту через подію Log та функцію getBalance().

Підсумки

У цій доповіді ми покажемо вам, як створити посилання на контракт за допомогою коду цільового контракту (або інтерфейсу) та адреси, щоб викликати функції цільового контракту.

Застереження: Інформація на цій сторінці може походити від третіх осіб і не відображає погляди або думки Gate. Вміст, що відображається на цій сторінці, є лише довідковим і не є фінансовою, інвестиційною або юридичною порадою. Gate не гарантує точність або повноту інформації і не несе відповідальності за будь-які збитки, що виникли в результаті використання цієї інформації. Інвестиції у віртуальні активи пов'язані з високим ризиком і піддаються значній ціновій волатильності. Ви можете втратити весь вкладений капітал. Будь ласка, повністю усвідомлюйте відповідні ризики та приймайте обережні рішення, виходячи з вашого фінансового становища та толерантності до ризику. Для отримання детальної інформації, будь ласка, зверніться до Застереження.
Прокоментувати
0/400
Немає коментарів