Щоб запустити приватний блокчейн, ваш комп'ютер має стати вузлом у мережі Ethereum, тобто потрібно завантажити весь блокчейн мережі та синхронізувати його з основним ланцюжком Ethereum. Для цього можна використовувати різні інструменти (клієнт), але нам потрібні ті, які дадуть змогу взаємодіяти з мережею блокчейну:
- Geth (Go Ethereum). Реалізація мови програмування Go (Golang) для Ethereum називається Geth. Це одна з трьох початкових реалізацій протоколу Ethereum (поряд з Python і C++). Обирайте цей інструмент, якщо у вас є хоча б мінімальний досвід веб-розробки і ви хочете поекспериментувати або професійно створити інтерфейси для dapps.
- Клієнт на основі Python, що реалізує "криптоекономічний кінцевий автомат Ethereum". Потрібно обирати, якщо ви зацікавлені в розробці dapps або академічних дослідженнях мережі Ethereum.
- C++ (eth). Імплементація Ethereum на C++. Обирайте, якщо серйозно ставитеся до майнінгу на GPU або потрібно підвищити безпеку, запустивши дві реалізації програми.
За допомогою цих інструментів можна отримати доступ до консолі (терміналу) - середовища JavaScript, що містить усі основні функції, які нам знадобляться пізніше. Доступ до консолі - головне, що потрібно для запуску приватного блокчейна Ethereum, тому зрештою не особливо важливо, який саме інструмент ви оберете.
Інтерфейс клієнта Geth
Для написання цього гайда ми обрали Geth, оскільки він найпопулярніший і відносно простий у використанні. Отже, коли далі за текстом буде написано, що потрібно щось написати в консолі (терміналі), значить, це потрібно зробити за допомогою Geth.
Що таке Geth (Go Ethereum)
Geth - це інструмент інтерфейсу командного рядка (CLI), який пов'язує вашу систему та обладнання з мережею Ethereum. З Geth
ви можете:
Клієнт можна завантажити на сайті
geth.ethereum.org. Є збірки для Ubuntu (сімейство Linux), OS X ("яблучні" пристрої), Windows і навіть Android. Інструкція щодо того, що робити після завантаження дистрибутива, міститься у
розділі «Install» (обов'язково прочитайте і зробіть усе, що там написано).
Як створити приватний блокчейн Ethereum
Після того як ми встановили і синхронізували Geth з Ethereum, можна приступати до запуску "приватної" або "тестової" мережі. Це найкращий спосіб для вивчення технологій блокчейна, оскільки в рамках приватної мережі Ethereum ви можете створювати, розгортати і тестувати смарт-контракти і децентралізовані додатки, не витративши ні монети реального ефіру. Ба більше, ви можете створити "підроблений" ефір і використовувати його для здійснення транзакції та ініціалізації смарт-контрактів.
Крок 1: Створюємо папку DATADIR
Під час запуску власного блокчейна настійно рекомендується використовувати окрему папку для зберігання даних (бази даних і гаманець) приватної мережі. Це потрібно, щоб файли приватної мережі Ethereum.не замінювали файли загальнодоступної.
Для цього зробіть таке:
Створіть порожню папку на робочому столі вашого комп'ютера. Наприклад, із назвою PrviaceChain3.
Клацніть правою кнопкою по створеній папці та виберіть "Git Bash Here".
Якщо все нормально, система покаже таке.
Крок 2: Створюємо генезис-блок
Схема блокчейна: генезис-блок, основний і "побічні" ланцюжки
Як вам, напевно, відомо, блокчейн - це розподілений цифровий регістр, у якому всі транзакції записуються в хронологічному порядку у вигляді блоків. Блоки генеруються в процесі майнінгу і додаються до ланцюжка блокчейна. Кількість блоків необмежена, але завжди є один окремий блок, який дав початок усьому ланцюжку - генезис-блок.
Щоб створити приватний блокчейн, спочатку необхідно згенерувати генезис-блок. Для цього потрібно створити файл Genesis, прописати в нього потрібні команди (атрибути) і використовувати його за допомогою Geth.
Ось які команди потрібно прописати у файл Genesis:
- Визначає конфігурацію блокчейна. Не налаштовує нічого конкретного для самого блоку генезису, але визначає, як працюватиме мережа.
-
- o chainId. Ідентифікатор використовуваного блокчейна (щось на зразок адреси). Можна вказати випадкове число за умови, що воно не збігається з номерами кількох важливих блокчейнів, наприклад з номером основного ланцюжка Ethereum (1). В інструкції вказано випадковий тризначний ідентифікатор (777).
- homesteadBlock. Homestead - перша офіційна стабільна версія протоколу Ethereum, яка замінила попередню версію під назвою Frontier. Якщо ви плануєте використовувати цей реліз, атрибут має бути заданий як "0".
- Можна підключити й інші протоколи, наприклад, Byzantium, eip155B і eip158. Для цього під homesteadBlock додайте назву протоколу з приставкою Block (наприклад, eip158Block) і задайте їм параметр "0".
- Визначає складність генерації блоків. Що вища складність, то більше буде потрібно ресурсів для майнінгу. Щоб уникнути очікування під час тестів і написання цього тексту, ми встановили відносно невисоке значення складності.
- Вказує поточний загальномережевий ліміт витрат газу на блок. Газ - це "паливо", яке використовується для оплати транзакційних комісій у мережі Ethereum. Що більше газу користувач готовий витратити, то вищий пріоритет його транзакції в черзі. Ми встановили це значення на досить високому рівні, щоб уникнути обмежень під час тестів.
- Дозволяє створити криптовалютний гаманець для нашого приватного блокчейна і наповнити його підробленим ефіром. У нашому тексті ми не будемо використовувати цю опцію, щоб показати, як ініціювати майнінг на приватному блокчейні. Якщо ж ви запускаєте приватний блокчейн, щоб протестувати смарт-контракт або децентралізований додаток, встановіть потрібне вам значення (наприклад, 999999999999999999999).
Створити Genesis-файл із потрібними атрибутами можна за допомогою будь-якого текстового редактора, наприклад, Notepad (є в будь-якій версії Windows). Назва файлу генезису може бути будь-якою, головне - вказати розширення "json". У нашій індукції буде використовуватися назва CustomGenesis.json.
Після створення Genesis-файлу відкрийте Geth і введіть таку команду:
Ця команда інструктує Geth використовувати раніше створений нами файл CustomGenesis.json для генерації першого блоку приватного блокчейна Ethereum. Атрибут "path_to_folder" - це папка, у якій ви зберегли Genesis-файл. Тоді як атрибут "path_to_your_data_directory" вказує папку, в якій зберігатимуться дані нашого приватного ланцюжка (створеного на першому кроці).
Коли ви запустите вказаний атрибут, ви побачите, як Geth під'єднається до Genesis-файлу і надасть підтвердження успішного завершення дії. Це буде виглядати наступним чином:
Крок 3: Запускаємо приватну мережу
Отже, ми створили генезис-блок. Тепер можна запускати нашу приватну мережу, щоб ми або інші вузли (якщо ви створили кілька) могли додавати нові блоки. Для цього в консолі Geth потрібно ініціювати команду:
Ця команда інструктує Geth на запуск приватного блокчейна. І використовувати вказаний каталог ("path_to_your_data_directory" замініть на адресу потрібної папки) для доступу до запущеної мережі.
У команді також присутній ідентифікатор "7776". Його слід замінити на довільне число, яке не дорівнюватиме ідентифікатору вже створених мереж, наприклад ідентифікатору основної мережі Ethereum ("networkid=1"). Ідентифікатор "networkid=7776" також не варто використовувати, інакше ви під'єднаєтеся до мережі, яку ми створили для цього гайда.
Ось список ідентифікаторів наявних мереж блокчейна Ethereum:
- 0: Olympic, Ethereum public pre-release PoW testnet
- 1: Frontier, Homestead, Metropolis, the Ethereum public PoW main network
- 1: Classic, the (un)forked public Ethereum Classic PoW main network, chain ID 61
- 1: Expanse, an alternative Ethereum implementation, chain ID 2
- 2: Morden Classic, the public Ethereum Classic PoW testnet
- 3: Ropsten, the public cross-client Ethereum PoW testnet
- 4: Rinkeby, the public Geth-only PoA testnet
- 5: Goerli, the public cross-client PoA testnet
- 6: Kotti Classic, the public cross-client PoA testnet for Classic
- 8: Ubiq, the public Gubiq main network with flux difficulty chain ID 8
- 42: Kovan, the public Parity-only PoA testnet
- 60: GoChain, the GoChain networks mainnet
- 77: Sokol, the public POA Network testnet
- 99: Core, the public POA Network main network
- 100: xDai, the public MakerDAO/POA Network main network
- 31337: GoChain testnet, the GoChain networks public testnet
- 401697: Tobalaba, the public Energy Web Foundation testnet
- 7762959: Musicoin, the music blockchain
- 61717561: Aquachain, ASIC resistant chain
- [Other]: Could indicate that your connected to a local development test network.
Коли ви ініціюєте зазначену команду з ВАШИМ ідентифікатором, ви запустите приватну мережу вашого блокчейна. Ось що покаже термінал Geth після успішного виконання команди:
Ще один важливий момент. Geth не запам'ятовує параметрів вашої приватної мережі блокчейна, тому щоразу, коли ви захочете отримати доступ до вашого приватного ланцюжка, вам потрібно буде запускати команди в консолі, які ініціюють підключення до Genesis-файлу і вашої приватної мережі. Щоб не шукати їх щоразу, тримайте їх під рукою.
Ось ці дві команди:
Якщо все зробили правильно, до цього моменту у вас буде особистий блокчейн і приватна мережа Ethereum. І тепер можна починати взаємодіяти з цим ланцюжком.
Крок 4: Створюємо зовнішній обліковий запис (EOA)
Типи акаунтів у мережі Ethereum
У мережі Ethereum є два типи акаунтів: Externally Owned Accounts (EOA) і Contracts Accounts. Про їхні можливості та відмінності можна дізнатися в
розділі «Типи рахунків, газ і транзакції» на сайті ethdocs.org. Для управління нашою блокчейн-мережею потрібна EOA. Щоб її створити, вам потрібно запустити Geth у двох вікнах. У другому вікні/консолі введіть таку команду:
Це підключить друге вікно до терміналу першого вікна (переконайтеся, що це справді сталося - все запрацювало). Якщо все правильно, термінал покаже наступне:
Якщо зображення на вашому терміналі збігається зі скріншотом в інструкції, ви можете створити обліковий запис. Для цього в другому вікні введіть команду:
Далі вам буде запропоновано задати пароль, введення якого ініціює створення облікового запису. Виглядає це таким чином.
Збережіть створений обліковий запис (довгий набір символів на скріншоті), оскільки ви будете часто його використовувати. Крім цього, збережіть парольну фразу, оскільки вона знадобиться щоразу під час підключення до облікового запису.
Далі нам потрібно перевірити стан балансу облікового запису (скільки там є ефіру). Для цього використовуємо таку команду:
Ось що у вас має вийти:
Баланс облікового запису має дорівнювати нулю. Це правильно, оскільки під час запуску приватної мережі у файлі генезису ми нічого не прописали в атрибуті alloc. Поповнити баланс зараз можна двома способами: або хтось вам відправить трохи ефіру, або отримаєте винагороду за створення нового блоку. А оскільки ви зараз єдиний учасник вашої приватної мережі, то вибору у вас, по суті, немає.
Крок 5: Добуваємо трохи ефіру для нашого рахунку
Майнінг на основному ланцюжку Ethereum (реальному) складний і вимагає дорогого обладнання з потужними графічними процесорами. Зазвичай для цього використовують ASICи. Однак для видобутку монет нашого ланцюжка підійде будь-який пристрій, оскільки у файлі генезису ми задали низьку складність майнінгу (атрибут difficulty). Тобто ми можемо почати майнінг, просто використавши таку команду:
Результат має бути таким:
Якщо ви використовуєте команду eth.getBalance у другому вікні Geth, то побачите, як баланс вашого облікового запису поповнюється підробленим ефіром. Швидкість майнінгу буде дуже великою, тож ви зможете стати мультимільйонером буквально за кілька секунд.
Коли грошей буде достатньо, використовуйте наступну команду, щоб зупинити майнінг:
І пам'ятайте, що це підроблений ефір. Його можна використовувати тільки в рамках вашого приватного блокчейна для тестування транзакцій, смарт-контрактів, децентралізованих додатків та інших функцій.
Вітаємо!
Ви створили свій перший приватний блокчейн Ethereum і добули трохи ефіру! Так, це не справжні гроші і мережа тестова, але отриманий досвід можна використати для запуску стартапів або інтеграції блокчейн-технологій у власний бізнес.