Урок 4

Взаємодія та розгортання смарт-контрактів

Смарт-контракти можуть взаємодіяти з іншими контрактами на блокчейні Ethereum, що дозволяє викликати функції, зчитувати змінні та передавати Ether або токени.

Взаємодія з зовнішніми контрактами

Смарт-контракти можуть взаємодіяти з іншими контрактами на блокчейні Ethereum, дозволяючи їм викликати функції, зчитувати змінні та надсилати Ether чи токени. Один із способів сприяти цій взаємодії - використання Web3j, легкої бібліотеки Java для роботи з Ethereum. Web3j може автоматично генерувати код обгортки смарт-контракту, що дозволяє безшовне розгортання та взаємодію з смарт-контрактами з JVM.

Для взаємодії з зовнішніми контрактами за допомогою Web3j вам спочатку потрібно скомпілювати свій смарт-контракт та згенерувати обгортку коду. Потім ви можете створити та розгорнути свій смарт-контракт або використовувати існуючий контракт, що робить легким проведення транзакцій та безпосереднє виклик методів смарт-контракту.

Події та журнали

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

Журнали – це записи, які випромінюються подіями та зберігаються в блокчейні. Вони є невід'ємною частиною екосистеми Ethereum, оскільки забезпечують ефективний зв'язок між смарт-контрактами та офчейн-системами. Журнали також індексуються, що полегшує програмам фільтрацію та пошук певних подій або точок даних.

Приклад: Розгортання смарт-контракту за допомогою Remix та MetaMask

Крок 1: Відкрийте Remix IDE
Спочатку відкрийте IDE Remix (https://remix.ethereum.org/) у вашому веб-переглядачі.

Крок 2: Створіть новий файл
Натисніть на кнопку “+” в лівому верхньому куті IDE, щоб створити новий порожній робочий простір. Потім натисніть на сторінку “Новий файл”, щоб створити новий файл.

Назвіть файл «Auction.sol».

Крок 3: Визначте контракт
Скопіюйте та вставте наступний код у новий файл «Auction.sol»:

TypeScript// SPDX-License-Identifier: MIT// Вкажіть версію Soliditypragma solidity ^0.8.0;// Визначте аукціонний контрактконтракт Auction { // Оголосити змінні стану адресою платоспроможного публічного власника; // Власник контракту (може скасувати аукціон) uint public startBlock; // Номер блоку, при якому починається аукціон uint public endBlock; // Номер блоку, при якому закінчується аукціон рядок public ipfsHash; // IPFS хеш для об'єкта, що виставляється на аукціон bool public canceled;  Чи скасовано аукціон, чи закінчився публічний захід; Чи завершився аукціон uint public highestBid; Найвища пропозиція на даний момент адресована публічній ціні, що підлягає сплаті; Адреса учасника, який запропонував найвищу ціну // Оголошення події події AuctionCanceled(); Подія, ініційована при скасуванні аукціону подія HighestBidEnhanced(адреса учасника торгів, сума uint); Подія, що виникла, коли встановлено нову найвищу ставку: подія AuctionEnded(адреса переможця, сума uint); Подія, випущена після завершення аукціону // Оголосити відображення відображення(адреса => uint256) публічні баланси;    Функція-конструктор constructor() { owner = payable(msg.sender); // Встановити власнику адресу, яка розгортає контракт startBlock = block.number; // Встановити стартовий блок на поточний номер блоку endBlock = startBlock + 40320; // Встановити кінцевий блок на 1 тиждень (40320 блоків) після стартового блоку ipfsHash = ""; Ініціалізувати хеш IPFS порожнім рядком } // Функція для розміщення ставки функція placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Аукціон не активний."); // Перевірити, чи аукціон активний require(msg.value > highestBid, "Вже є вища ставка."); // Перевірте, чи нова ставка вища за поточну найвищу ставку (!canceled, "Аукціон скасовано."); // Перевірте, чи аукціон не скасовано        Якщо раніше був учасник, який запропонував найвищу ціну, додайте суму його ставки до його балансу, якщо (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Встановити нову найвищу ставку та ставку highestBid = msg.value;        highestBidder = payable(msg.sender);        Імітувати подію, яка сигналізує про те, що встановлено нову найвищу ставку, emit HighestBidEnhanced(msg.sender, msg.value);    } // Функція скасування аукціону функція cancelAuction() public { require(msg.sender == owner, "Тільки власник може скасувати аукціон."); // Перевірити, що відправник є власником require(!ended, "Аукціон вже завершено."); // Перевірити, що аукціон ще не закінчився // Встановити прапорець canceled та видати подію, яка сигналізує про те, що аукціон скасовано canceled = true;        emit AuctionCanceled();    } // Функція завершення аукціону функція endAuction() public { require(block.number > endBlock, "Аукціон ще не закінчено."); // Перевірити, чи аукціон закінчено require(!canceled, "Аукціон скасовано."); // Перевірити, чи аукціон не скасовано require(!ended, "Аукціон вже завершено."); // Перевірити, що аукціон ще не закінчився // Встановити прапорець end і видати подію, яка сигналізує про завершення аукціону end = true;        emit AuctionEnded(highestBidder, highestBid);        Передати найвищу суму ставки власнику.transfer(highestBid);        Якщо раніше був учасник, який запропонував найвищу ціну, додайте суму його ставки до його балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Функція для встановлення хешу IPFS для об'єкта, що виставляється на аукціон function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Тільки власник може встановити IPFS hash."); // Перевірити, що відправник є власником ipfsHash = hash; // Встановити хеш IPFS на надане значення }}

Цей код визначає Аукціонконтракт, який дозволяє користувачам робити ставки на товар та завершує аукціон після визначеного періоду. Контракт також має функцію скасувати аукціон та функцію встановити хеш IPFS для товару, що виставляється на аукціон.

Крок 4: Скомпілюйте контракт

Клацніть на вкладці "Компілятор Solidity" у лівому меню. Під "Компіляція Auction.sol" клацніть кнопку "Компілювати". Контракт повинен бути успішно скомпільований, і ви повинні побачити зелений позначення під "Auction.sol" в провіднику файлів.

Крок 5: Розгорнути контракт

Натисніть на вкладку «Розгортання та запуск транзакцій» у меню ліворуч. У розділі «Середовище» виберіть «Injected Web3» як середовище. У розділі "Контракт" виберіть "Аукціон" як контракт для розгортання. Натисніть кнопку «Розгорнути».

Крок 6: Взаємодія з контрактом
Після розгортання контракту ви можете взаємодіяти з ним за допомогою різних функцій, визначених у контракті. Наприклад, ви можете викликати placeBid()функція розмістити ставку на товар

За допомогою Remix та MetaMask ви можете легко розгортати та взаємодіяти зі смарт-контрактами на мережі Ethereum, що дозволяє розробку та тестування децентралізованих додатків в зручному середовищі.

Основні моменти
Смарт-контракти можуть взаємодіяти з іншими контрактами в блокчейні Ethereum, забезпечуючи виклики функцій, зчитування змінних і передачу Ether або токенів.
Web3j - це легка бібліотека Java, яка сприяє взаємодії з Ethereum. Вона може автоматично генерувати код обгортки розумного контракту для безшовного розгортання та взаємодії з контрактами з JVM.
Події є важливими для відстеження та моніторингу активності контрактів на блокчейні. Вони випромінюють журнали, які можуть бути збережені та отримані off-chain системами, що дозволяє отримувати оновлення в реальному часі для додатків.
Журнали, тобто записи, що випромінюються подіями, відіграють вирішальну роль в ефективній комунікації між смарт-контрактами та офчейн-системами. Вони індексуються, що дозволяє легко фільтрувати та шукати конкретні події чи точки даних.
Наданий приклад демонструє процес розгортання смарт-контракту за допомогою інтерфейсу Remix та MetaMask. Він включає кроки, такі як створення нового файлу, визначення контракту, компіляція, розгортання та взаємодія з його функціями.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 4

Взаємодія та розгортання смарт-контрактів

Смарт-контракти можуть взаємодіяти з іншими контрактами на блокчейні Ethereum, що дозволяє викликати функції, зчитувати змінні та передавати Ether або токени.

Взаємодія з зовнішніми контрактами

Смарт-контракти можуть взаємодіяти з іншими контрактами на блокчейні Ethereum, дозволяючи їм викликати функції, зчитувати змінні та надсилати Ether чи токени. Один із способів сприяти цій взаємодії - використання Web3j, легкої бібліотеки Java для роботи з Ethereum. Web3j може автоматично генерувати код обгортки смарт-контракту, що дозволяє безшовне розгортання та взаємодію з смарт-контрактами з JVM.

Для взаємодії з зовнішніми контрактами за допомогою Web3j вам спочатку потрібно скомпілювати свій смарт-контракт та згенерувати обгортку коду. Потім ви можете створити та розгорнути свій смарт-контракт або використовувати існуючий контракт, що робить легким проведення транзакцій та безпосереднє виклик методів смарт-контракту.

Події та журнали

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

Журнали – це записи, які випромінюються подіями та зберігаються в блокчейні. Вони є невід'ємною частиною екосистеми Ethereum, оскільки забезпечують ефективний зв'язок між смарт-контрактами та офчейн-системами. Журнали також індексуються, що полегшує програмам фільтрацію та пошук певних подій або точок даних.

Приклад: Розгортання смарт-контракту за допомогою Remix та MetaMask

Крок 1: Відкрийте Remix IDE
Спочатку відкрийте IDE Remix (https://remix.ethereum.org/) у вашому веб-переглядачі.

Крок 2: Створіть новий файл
Натисніть на кнопку “+” в лівому верхньому куті IDE, щоб створити новий порожній робочий простір. Потім натисніть на сторінку “Новий файл”, щоб створити новий файл.

Назвіть файл «Auction.sol».

Крок 3: Визначте контракт
Скопіюйте та вставте наступний код у новий файл «Auction.sol»:

TypeScript// SPDX-License-Identifier: MIT// Вкажіть версію Soliditypragma solidity ^0.8.0;// Визначте аукціонний контрактконтракт Auction { // Оголосити змінні стану адресою платоспроможного публічного власника; // Власник контракту (може скасувати аукціон) uint public startBlock; // Номер блоку, при якому починається аукціон uint public endBlock; // Номер блоку, при якому закінчується аукціон рядок public ipfsHash; // IPFS хеш для об'єкта, що виставляється на аукціон bool public canceled;  Чи скасовано аукціон, чи закінчився публічний захід; Чи завершився аукціон uint public highestBid; Найвища пропозиція на даний момент адресована публічній ціні, що підлягає сплаті; Адреса учасника, який запропонував найвищу ціну // Оголошення події події AuctionCanceled(); Подія, ініційована при скасуванні аукціону подія HighestBidEnhanced(адреса учасника торгів, сума uint); Подія, що виникла, коли встановлено нову найвищу ставку: подія AuctionEnded(адреса переможця, сума uint); Подія, випущена після завершення аукціону // Оголосити відображення відображення(адреса => uint256) публічні баланси;    Функція-конструктор constructor() { owner = payable(msg.sender); // Встановити власнику адресу, яка розгортає контракт startBlock = block.number; // Встановити стартовий блок на поточний номер блоку endBlock = startBlock + 40320; // Встановити кінцевий блок на 1 тиждень (40320 блоків) після стартового блоку ipfsHash = ""; Ініціалізувати хеш IPFS порожнім рядком } // Функція для розміщення ставки функція placeBid() public payable { require(block.number >= startBlock && block.number <= endBlock, "Аукціон не активний."); // Перевірити, чи аукціон активний require(msg.value > highestBid, "Вже є вища ставка."); // Перевірте, чи нова ставка вища за поточну найвищу ставку (!canceled, "Аукціон скасовано."); // Перевірте, чи аукціон не скасовано        Якщо раніше був учасник, який запропонував найвищу ціну, додайте суму його ставки до його балансу, якщо (highestBidder != address(0)) { balances[highestBidder] += highestBid;    } // Встановити нову найвищу ставку та ставку highestBid = msg.value;        highestBidder = payable(msg.sender);        Імітувати подію, яка сигналізує про те, що встановлено нову найвищу ставку, emit HighestBidEnhanced(msg.sender, msg.value);    } // Функція скасування аукціону функція cancelAuction() public { require(msg.sender == owner, "Тільки власник може скасувати аукціон."); // Перевірити, що відправник є власником require(!ended, "Аукціон вже завершено."); // Перевірити, що аукціон ще не закінчився // Встановити прапорець canceled та видати подію, яка сигналізує про те, що аукціон скасовано canceled = true;        emit AuctionCanceled();    } // Функція завершення аукціону функція endAuction() public { require(block.number > endBlock, "Аукціон ще не закінчено."); // Перевірити, чи аукціон закінчено require(!canceled, "Аукціон скасовано."); // Перевірити, чи аукціон не скасовано require(!ended, "Аукціон вже завершено."); // Перевірити, що аукціон ще не закінчився // Встановити прапорець end і видати подію, яка сигналізує про завершення аукціону end = true;        emit AuctionEnded(highestBidder, highestBid);        Передати найвищу суму ставки власнику.transfer(highestBid);        Якщо раніше був учасник, який запропонував найвищу ціну, додайте суму його ставки до його балансу if (highestBidder != address(0)) { balances[highestBidder] += highestBid;        } } // Функція для встановлення хешу IPFS для об'єкта, що виставляється на аукціон function setIpfsHash(string memory hash) public { require(msg.sender == owner, "Тільки власник може встановити IPFS hash."); // Перевірити, що відправник є власником ipfsHash = hash; // Встановити хеш IPFS на надане значення }}

Цей код визначає Аукціонконтракт, який дозволяє користувачам робити ставки на товар та завершує аукціон після визначеного періоду. Контракт також має функцію скасувати аукціон та функцію встановити хеш IPFS для товару, що виставляється на аукціон.

Крок 4: Скомпілюйте контракт

Клацніть на вкладці "Компілятор Solidity" у лівому меню. Під "Компіляція Auction.sol" клацніть кнопку "Компілювати". Контракт повинен бути успішно скомпільований, і ви повинні побачити зелений позначення під "Auction.sol" в провіднику файлів.

Крок 5: Розгорнути контракт

Натисніть на вкладку «Розгортання та запуск транзакцій» у меню ліворуч. У розділі «Середовище» виберіть «Injected Web3» як середовище. У розділі "Контракт" виберіть "Аукціон" як контракт для розгортання. Натисніть кнопку «Розгорнути».

Крок 6: Взаємодія з контрактом
Після розгортання контракту ви можете взаємодіяти з ним за допомогою різних функцій, визначених у контракті. Наприклад, ви можете викликати placeBid()функція розмістити ставку на товар

За допомогою Remix та MetaMask ви можете легко розгортати та взаємодіяти зі смарт-контрактами на мережі Ethereum, що дозволяє розробку та тестування децентралізованих додатків в зручному середовищі.

Основні моменти
Смарт-контракти можуть взаємодіяти з іншими контрактами в блокчейні Ethereum, забезпечуючи виклики функцій, зчитування змінних і передачу Ether або токенів.
Web3j - це легка бібліотека Java, яка сприяє взаємодії з Ethereum. Вона може автоматично генерувати код обгортки розумного контракту для безшовного розгортання та взаємодії з контрактами з JVM.
Події є важливими для відстеження та моніторингу активності контрактів на блокчейні. Вони випромінюють журнали, які можуть бути збережені та отримані off-chain системами, що дозволяє отримувати оновлення в реальному часі для додатків.
Журнали, тобто записи, що випромінюються подіями, відіграють вирішальну роль в ефективній комунікації між смарт-контрактами та офчейн-системами. Вони індексуються, що дозволяє легко фільтрувати та шукати конкретні події чи точки даних.
Наданий приклад демонструє процес розгортання смарт-контракту за допомогою інтерфейсу Remix та MetaMask. Він включає кроки, такі як створення нового файлу, визначення контракту, компіляція, розгортання та взаємодія з його функціями.

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.