На традиційних ринках електронної комерції, таких як Amazon і eBay, центральний орган сприяє транзакціям між покупцями та продавцями. Цей центральний орган контролює транзакції, підтримує списки продуктів і керує вирішенням спорів. Хоча ця централізована модель має свої переваги, вона також має кілька недоліків, зокрема ризик цензури, високі комісії та залежність від довіри.
З іншого боку, децентралізований ринок використовує технологію блокчейн, щоб забезпечити однорангові транзакції без посередників. Це усуває потребу в довірі, оскільки транзакції є прозорими та можуть бути перевірені всіма учасниками блокчейну. Прикладами децентралізованих ринків є OpenBazaar і Origin Protocol.
Remix IDE (інтегроване середовище розробки) — це потужний інструмент із відкритим кодом, розроблений спеціально для розробки смарт-контрактів Ethereum. Він працює безпосередньо у вашому веб-браузері, тому вам не потрібно нічого встановлювати на комп’ютері.
Ви можете отримати доступ до Remix IDE за адресою https://remix.ethereum.org. Коли ви відкриєте Remix у своєму браузері, ви побачите три панелі:
Ліва панель: тут ви можете створювати, імпортувати та керувати файлами Solidity. Він також містить різні плагіни для компіляції, тестування, налагодження та розгортання ваших контрактів.
Центральна панель: це ваш редактор коду. Тут ви будете писати та редагувати свій код Solidity.
Права панель: Ця панель містить різноманітні інструменти для компіляції ваших контрактів, розгортання їх у мережі Ethereum (у реальній мережі Ethereum або симуляції віртуальної машини JavaScript) і взаємодії з вашими розгорнутими контрактами.
У цій частині ми збираємося написати наш перший контракт Solidity. Цей контракт представлятиме базовий «Предмет» на нашому ринку.
Для початку створіть новий файл у Remix, клацнувши другу піктограму зверху на лівій панелі (значок файлу). На центральній панелі з’явиться нове діалогове вікно. Введіть Item.sol
як назву файлу та натисніть «OK».
Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
contract Item {
// Визначте подію, яка запускатиметься під час створення нового елемента
event NewItem(uint itemId, string itemName, uint itemPrice);
// Кожен елемент має ідентифікатор, назву та ціну
struct ItemStruct {
string name;
uint price;
}
// Масив для зберігання всіх елементів
ItemStruct[] public items;
// Функція для створення нового елемента
function createItem(string memory _name, uint _price) public {
items.push(ItemStruct(_name, _price));
emit NewItem(items.length - 1, _name, _price);
}
}
Ідентифікатор ліцензії SPDX: це стандартний спосіб вираження ліцензії контракту. Рядок // SPDX-License-Identifier: MIT
вказує на те, що в нашому контракті використовується дозвільна ліцензія MIT.
Директива Pragma: pragma solidity ^0.8.6;
вказує, що договір складено у версії Solidity 0.8.6. Символ ^
означає, що він також буде сумісний з будь-якими новими версіями до, але не включаючи версію 0.9.0.
Визначення контракту: contract Item {...}
визначає новий контракт під назвою Item
. Тут ми пишемо змінні стану та функції контракту.
Визначення події: event NewItem(uint itemId, string itemName, uint itemPrice);
визначає подію, яку ми можемо видавати, коли створюється новий елемент. Події — це спосіб для смарт-контрактів реєструвати дії, які сторонні сторони можуть прослуховувати.
Визначення структури: struct ItemStruct {...}
визначає новий тип даних ItemStruct
, який представляє елемент із name
та price
.
Змінна стану: ItemStruct[] public items;
оголошує змінну стану items
, яка містить масив ItemStruct
s. Ключове слово public
автоматично створює функцію отримання, яка дозволяє будь-кому отримати доступ до списку елементів.
Визначення функції: function createItem(string memory _name, uint _price) public {...}
визначає загальнодоступну функцію, яку будь-хто може викликати для створення нового елемента. Функція приймає ім’я та ціну, створює новий ItemStruct
, додає його до масиву items
і створює подію NewItem
.
Щоб скласти цей контракт, перейдіть на праву панель і натисніть на третю піктограму зверху (логотип Solidity). Тут можна скласти договір. Натисніть кнопку «Компілювати», і якщо немає помилок, ваш договір буде успішно скомпільовано.
IPFS: Міжпланетна файлова система (IPFS) — це протокол, призначений для створення постійної та децентралізованої мережі. Це як єдиний рій BitTorrent, який обмінюється об’єктами в одному сховищі Git.
Swarm: Swarm — це платформа розподіленого зберігання та служба розповсюдження вмісту, яка є рідною для стеку Ethereum web3. Це дозволяє мережі однорангових пристроїв зберігати та поширювати дані.
Коли ви компілюєте контракт, компілятор Solidity генерує файл JSON, що містить бінарний інтерфейс програми (ABI) і його байт-код, серед іншої інформації. Це називається метаданими контракту. Зберігання цих метаданих у децентралізованій мережі зберігання гарантує їх постійний доступ і може бути корисним для перевірки вихідного коду контракту.
Однак для ваших навчальних цілей і якщо ви не плануєте перевіряти контракт на Etherscan або будь-якому іншому досліднику блоків, ви можете вибрати або Swarm, або IPFS, або ви можете просто проігнорувати це та перейти до наступних кроків вашого навчання. Пам’ятайте, що основна увага на цьому етапі полягає в тому, щоб зрозуміти, як написати, скомпілювати та розгорнути договір.
На традиційних ринках електронної комерції, таких як Amazon і eBay, центральний орган сприяє транзакціям між покупцями та продавцями. Цей центральний орган контролює транзакції, підтримує списки продуктів і керує вирішенням спорів. Хоча ця централізована модель має свої переваги, вона також має кілька недоліків, зокрема ризик цензури, високі комісії та залежність від довіри.
З іншого боку, децентралізований ринок використовує технологію блокчейн, щоб забезпечити однорангові транзакції без посередників. Це усуває потребу в довірі, оскільки транзакції є прозорими та можуть бути перевірені всіма учасниками блокчейну. Прикладами децентралізованих ринків є OpenBazaar і Origin Protocol.
Remix IDE (інтегроване середовище розробки) — це потужний інструмент із відкритим кодом, розроблений спеціально для розробки смарт-контрактів Ethereum. Він працює безпосередньо у вашому веб-браузері, тому вам не потрібно нічого встановлювати на комп’ютері.
Ви можете отримати доступ до Remix IDE за адресою https://remix.ethereum.org. Коли ви відкриєте Remix у своєму браузері, ви побачите три панелі:
Ліва панель: тут ви можете створювати, імпортувати та керувати файлами Solidity. Він також містить різні плагіни для компіляції, тестування, налагодження та розгортання ваших контрактів.
Центральна панель: це ваш редактор коду. Тут ви будете писати та редагувати свій код Solidity.
Права панель: Ця панель містить різноманітні інструменти для компіляції ваших контрактів, розгортання їх у мережі Ethereum (у реальній мережі Ethereum або симуляції віртуальної машини JavaScript) і взаємодії з вашими розгорнутими контрактами.
У цій частині ми збираємося написати наш перший контракт Solidity. Цей контракт представлятиме базовий «Предмет» на нашому ринку.
Для початку створіть новий файл у Remix, клацнувши другу піктограму зверху на лівій панелі (значок файлу). На центральній панелі з’явиться нове діалогове вікно. Введіть Item.sol
як назву файлу та натисніть «OK».
Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
contract Item {
// Визначте подію, яка запускатиметься під час створення нового елемента
event NewItem(uint itemId, string itemName, uint itemPrice);
// Кожен елемент має ідентифікатор, назву та ціну
struct ItemStruct {
string name;
uint price;
}
// Масив для зберігання всіх елементів
ItemStruct[] public items;
// Функція для створення нового елемента
function createItem(string memory _name, uint _price) public {
items.push(ItemStruct(_name, _price));
emit NewItem(items.length - 1, _name, _price);
}
}
Ідентифікатор ліцензії SPDX: це стандартний спосіб вираження ліцензії контракту. Рядок // SPDX-License-Identifier: MIT
вказує на те, що в нашому контракті використовується дозвільна ліцензія MIT.
Директива Pragma: pragma solidity ^0.8.6;
вказує, що договір складено у версії Solidity 0.8.6. Символ ^
означає, що він також буде сумісний з будь-якими новими версіями до, але не включаючи версію 0.9.0.
Визначення контракту: contract Item {...}
визначає новий контракт під назвою Item
. Тут ми пишемо змінні стану та функції контракту.
Визначення події: event NewItem(uint itemId, string itemName, uint itemPrice);
визначає подію, яку ми можемо видавати, коли створюється новий елемент. Події — це спосіб для смарт-контрактів реєструвати дії, які сторонні сторони можуть прослуховувати.
Визначення структури: struct ItemStruct {...}
визначає новий тип даних ItemStruct
, який представляє елемент із name
та price
.
Змінна стану: ItemStruct[] public items;
оголошує змінну стану items
, яка містить масив ItemStruct
s. Ключове слово public
автоматично створює функцію отримання, яка дозволяє будь-кому отримати доступ до списку елементів.
Визначення функції: function createItem(string memory _name, uint _price) public {...}
визначає загальнодоступну функцію, яку будь-хто може викликати для створення нового елемента. Функція приймає ім’я та ціну, створює новий ItemStruct
, додає його до масиву items
і створює подію NewItem
.
Щоб скласти цей контракт, перейдіть на праву панель і натисніть на третю піктограму зверху (логотип Solidity). Тут можна скласти договір. Натисніть кнопку «Компілювати», і якщо немає помилок, ваш договір буде успішно скомпільовано.
IPFS: Міжпланетна файлова система (IPFS) — це протокол, призначений для створення постійної та децентралізованої мережі. Це як єдиний рій BitTorrent, який обмінюється об’єктами в одному сховищі Git.
Swarm: Swarm — це платформа розподіленого зберігання та служба розповсюдження вмісту, яка є рідною для стеку Ethereum web3. Це дозволяє мережі однорангових пристроїв зберігати та поширювати дані.
Коли ви компілюєте контракт, компілятор Solidity генерує файл JSON, що містить бінарний інтерфейс програми (ABI) і його байт-код, серед іншої інформації. Це називається метаданими контракту. Зберігання цих метаданих у децентралізованій мережі зберігання гарантує їх постійний доступ і може бути корисним для перевірки вихідного коду контракту.
Однак для ваших навчальних цілей і якщо ви не плануєте перевіряти контракт на Etherscan або будь-якому іншому досліднику блоків, ви можете вибрати або Swarm, або IPFS, або ви можете просто проігнорувати це та перейти до наступних кроків вашого навчання. Пам’ятайте, що основна увага на цьому етапі полягає в тому, щоб зрозуміти, як написати, скомпілювати та розгорнути договір.