Блокчейн Ефіріума (Ethereum): що це, розмір, де зберігається, як створити свій blockchain

  • Екосистема платформи: де зберігається блокчейн Ethereum
  • Як створити свій blockchain на Ethereum: докладна інструкція
  • Сьогодні багато людей мають лише загальні уявлення про те, що таке блокчейн Ефіріум і як він працює. Але насправді ця платформа наділена низкою особливостей, що виділяють її серед інших платіжних систем. У цьому огляді ми розглянемо всі ключові характеристики мережі Ethereum і навіть дізнаємося, як створювати приватний блокчейн з нуля.

    Ethereum blockchain: що це простими словами

    Графічне зображення блоків транзакцій в блокчейне Ефіріума

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

    Усередині системи ходить однойменна криптовалюта Ефіріум або Ефір. Робота мережі базується на 3-х фундаментальних принципах:

    1. Наявність криптографічного захисту — це значить, що внутрішня валюта створюється на основі складних математичних алгоритмів, які вкрай важко зламати.
    2. Одноелементний механізм записи транзакцій. Тобто, система містить лише один правильний алгоритм, який відповідає за проведення транзакцій. Цей цифровий механізм можна назвати єдиною істиною, прийнятої всіма користувачами майданчика. Щоб не допускати появи нових механізмів всередині платформи, застосовується протокол GHOST. Згідно з цим протоколом, канонічним вважається той алгоритм, який потребує найбільшої кількості обчислень.
    3. Відкрите стан механізму — це значить, що мережею можуть користуватися всі її учасники в будь-який момент часу.

    Механізм блокчейна Ефіріума систематично аналізує вхідні відомості і, спираючись на них, змінює свій стан. Стартовою точкою для даної системи є так зване «стан генезису». Це початковий статус платформи до здійснення будь-яких грошових переказів. Після проведення транзакцій здійснюється перехід мережі в фазу нового кінцевого стану, яке буде поточним станом блокчейна на конкретний момент часу.

    На сьогоднішній день блокчейн для Ефіріума складається з тисяч транзакцій, згрупованих в блоки. Кожен новий елемент мережі пов’язаний з попереднім, за рахунок чого формується ланцюжок. Будь-блок має свій номер; вони все йдуть в строгій послідовності. Незважаючи на те, що дані мережі є відкритими, їх не можна змінювати або щось видаляти з бази.

    Як було сказано трохи вище, весь життєвий цикл Ethereum blockchain заснований на постійній зміні стану. Щоб такі зміни проводилися, в системі повинні бути присутніми дійсні транзакції. Переклади отримують статус дійсних після проходження валідації, що є частиною Майнінг. Майнінг в мережі Ефіру — це процес створення нових блоків транзакцій, який виконується за рахунок обчислювальних потужностей сотень комп’ютерів (або вузлів).

    По суті, кожен майнер претендує на формування та перевірку нового елемента блокчейна. Тисячі користувачів в усьому світі безупинно генерують і стверджують блоки. При записі нового елемента blockchain кожен майнер дає математичне доказ того, що блок сформований і включає в себе тільки дійсні переклади. Цей алгоритм отримав назву Proof-of-Work (тобто доказ виконаної роботи). За кожен підтверджений блок «шахтарі» отримують винагороду у вигляді певної кількості монет Ефіріума.

    Оскільки сьогодні для формування нових елементів мережі потрібні колосальні потужності, користувачі практично не Майні поодинці. Вони об’єднуються в пули і спільно працюють над формуванням одного блоку. Після створення нового компонента нагорода розподіляється між усіма учасниками процесу. Її розмір прямо залежить від вкладу конкретного користувача в створення блоку.

    Станом на 21.08.2018 блокчейн Ефіру має такі ключові показники:

    1. Загальний хешрейт мережі — 282.395 Thash / s.
    2. Середній час, який витрачається на генерацію блоку — 14,5 сек (це приблизно в 10 разів швидше, ніж в мережі біткоіни).
    3. Сумарна кількість блоків — 6 186 719.
    4. Розмір одного елемента мережі — 25,134 КБ.
    5. Розмір блокчейна Ethereum — 667,10 Гб.
    6. Середня кількість блоків, що генерується за добу — 5 945.
    7. Нагорода за блок — 3 ETH.

    Спираючись на вищевикладену інформацію, можна прийти до висновку, що розмір блокчейна Ефіріума щодня збільшується на 148,6 Мб. Таким чином, за рік база даних мережі «потяжелеет» приблизно на 54 Гб. Цей факт варто враховувати тим, хто хоче завести собі повноцінний гаманець для зберігання Ефіру.

    Адреси Ефіріум блокчейна: як взаємодіють акаунти всередині майданчика

    Графічне зображення рахунки зовнішнього власника і рахунки контракту в мережі Ефіріум

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

    Всі профілі блокчейна Ефіріума розділені на 2 категорії:

    1. Рахунки зовнішніх власників, управління якими здійснюється за допомогою приватних ключів. Об’єкти, що відносяться до даної категорії, не мають унікального програмного коду.
    2. Рахунки контрактів, які керовані не ключем, а асоційованим програмним кодом.

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

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

    При роботі на даній платформі дуже важливо вміти аналізувати стан рахунку. Про це ми поговоримо далі.

    З чого складається рахунок в системі Ефіріум?

    Елементи рахунку зовнішнього власника і рахунку контракту в блокчейне Ефіру

    Стан рахунку в блокчейне Ефіру завжди включає 4 елементи:

    1. Nonce. У разі з рахунками зовнішніх власників це кількість переказів, здійснених з конкретного аккаунта. У другому випадку дана графа вказує чисельність контрактів, створених тим чи іншим профілем.
    2. Balance — показує, скільки wei (найменша одиниця Ефіру) є на рахунку аккаунта.
    3. StorageRoot — хеш кореневого вузла дерева Меркле (про нього ми розповімо трохи пізніше). Дане дерево проводить кодування інформації, що міститься в сховищі конкретного рахунку.
    4. CodeHash — особливий код цифровий машини Ethereum. У випадку з контрактами даний код зберігається безпосередньо як CodeHash. Якщо говорити про рахунки зовнішніх власників, то поле CodeHash є хеш порожній рядки.

    Екосистема платформи: де зберігається блокчейн Ethereum

    Розподіл хешу в блокчейне Ефіріума

    Вище ми згадували таке поняття, як дерево Меркле. Так ось, це двійкова ієрархічна структура даних, в якій зберігаються всі зіставлення адрес і рахунків. Дерево Меркле включає 3 види вузлів (або нод):

    1. Кінцеві вузли — знаходяться внизу ієрархічної структури. У них містяться базові відомості.
    2. Проміжні Ноди, кожен з яких — це хеш двох його дочірніх вузлів.
    3. Кореневої вузол — це вершина дерева Меркле. Формується даний нод з хешу двох підлеглих йому вузлів.

    Інформація, розміщена внизу двійковій ієрархічної структури, генерується за таким алгоритмом:

    1. Відомості, що підлягають збереженню, поділяються на блоки.
    2. Сформовані блоки, в свою чергу, поділяються на сегменти.
    3. Система бере хеш кожного сегмента, і операція повторюється.
    4. Система збирає хеш сегментів до того моменту, поки не залишиться лише кореневої хеш.

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

    В системі Ethereum ключ показується між адресами і відносяться до них рахунками. Ці ключі ми вже згадували раніше: Nonce, Balance, StorageRoot, CodeHash. Крім цього, в двійковому дереві Меркле зберігаються транзакції і квитанції. Якщо говорити точніше, то в кожному блоці присутній свій заголовок, в якому розташовується кореневої хеш древа станів, перекладів і квитанцій (тобто, ми маємо 3 різні структури в одному блоці).

    Використання дерев Меркле для зберігання інформації в мережі Ефіріум вкрай корисно і практично. Справа в тому, що функціонування платформи забезпечують сотні окремих вузлів (або нод). Ці Ноди діляться на 2 групи: повні і легкі. Повні архівні вузли завантажують весь блокчейн Ефіріума, який містить детальну інформацію по кожній окремій транзакції. Найчастіше, повними нодамі є Майнер, що генерують нові блоки і гарантують роботу майданчика. Однак вся база даних Ethereum важить вкрай багато (667,10 Гб). Більш того, вона постійно розширюється, що може доставити користувачеві проблеми в майбутньому.

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

    Не можна не згадати і про те, що принцип роботи дерева Меркле оберігає блоки від впровадження підроблених транзакцій. Справа в тому, що хешування в ієрархічній структурі поширюється вгору. Якщо зловмисник внесе зміни в вузол, що знаходиться внизу, він спровокує ланцюгову реакцію. Спочатку зміниться хеш першого нода, що знаходиться вище, потім хеш вузла, розташованого ще вище. В результаті зміниться хеш кореневого вузла, що неприпустимо. Перевіряючи весь ланцюжок хеширования, можна виявити, який елемент дерева має некоректне розташування в ієрархічній структурі.

    Як створити свій blockchain на Ethereum: докладна інструкція

    Світиться значок Ефіріума

    Зрозумівши принцип роботи системи Ефіріума, можна створити свій приватний блокчейн для локальної мережі. Далі ми дізнаємося, як це робиться.

    Перш за все, необхідно завантажити клієнт під назвою Geth. Цей клієнт є одним з варіантів реалізації протоколу Ethereum. Це ліцензоване додаток, так що ніяких проблем з ним не буде. Geth можна завантажити в якості окремої програми або у вигляді бібліотеки для інтеграції в проекти на Android або iOS.

    Установчий файл можна завантажити, перейшовши за посиланням ethereum.github.io/go-ethereum/downloads/. Там будуть версії для Windows, MacOS і Linux. Інсталяція клієнта на Windows проходить стандартно. Щоб поставити Geth на MacOS, необхідно використовувати менеджер пакетів Homebrew. У ньому потрібно ввести такі команди:

    brew tap ethereum / ethereum
    brew install ethereum
    Інсталяція клієнта на Linux також вимагає введення певних команд через термінал. Вони представлені нижче:

    sudo apt-get install software-properties-common
    sudo add-apt-repository -y ppa: ethereum / ethereum
    sudo apt-get update
    sudo apt-get install ethereum
    Далі потрібно створити обліковий запис Майнера. Таким чином, ми сгенерируем приватний і публічний ідентифікатор, а також встановимо пароль для їх захисту. Як приклад ми розглянемо створення профілю на MacOS через менеджер пакетів Homebrew. Нам потрібно ввести наступну команду: geth account new —datadir / path / to / data / dir. В кінці прописаний адресу, за якою будуть зберігатися наші ключі.

    Після цього переходимо до найцікавішого — створення першого генезісного блоку. Команда для генерування першого елемента нашої приватної мережі вказана нижче:

    geth -datadir init
    У цій команді для нас найбільшу важливість представляють 2 значення:

    • datadir — адреса, за якою будуть розташовуватися ключі;
    • init — початок створення першого блоку з ім’ям genesis.json.

    Ось як буде виглядати код генезісного блоку:

    {
    «Config»: {
    «ChainId»: 15,
    «HomesteadBlock»: 0,
    «Eip155Block»: 0,
    «Eip158Block»: 0
    },
    «Difficulty»: «0x400»,
    «GasLimit»: «0x2100000»,
    «Alloc»: {
    «7a69b359e86893efa3d9732e4c65ced51567edd0»:
    { «Balance»: «0x1337000000000000000000»}
    }
    }

    Прописані в коді команди мають таке значення:

    1. chainid — гарантує обмін інформацією в мережі Ethereum без використання блокчейна Ethereum Classic, а також тестової мережі Morden.
    2. homesteadBlock зі значенням «0» — це значить, що в нашій приватній мережі буде застосовуватися реліз Ethereum Homestead.
    3. eip155Block зі значенням «0» — мережа підтримує протокол EIP (Пропозиції щодо поліпшення Ефіріума) під номером 155. У пропозиціях EIP прописані ключові стандарти для функціонування блокчейна Ефіріума.
    4. eip158Block зі значенням «0» — генезісний блок, а значить і всі наступні елементи приватного блокчейна, підтримують EIP 158.
    5. difficulty — рівень складності при пошуку значення nonce до генезісному блоку (про елемент nonce ми говорили трохи вище).
    6. gasLimit — максимальна кількість внутрішньої одиниці оплати, яке може стягуватися системою за обробку транзакції або смарт-контракту. Крім того, дана команда вказує, скільки перекладів може зберігатися в одному блоці.
    7. alloc — параметр, що забезпечує попередній розподіл Ефіріума з генезісного блоку на один або кілька акаунтів. Код первинного блоку, зазначений вище, має на увазі пересилку всіх монет на один аккаунт.

    Після створення першого елемента мережі можна приступати до генерації наступних блоків. Іншими словами, починається процес Майнінг. Майні ми будемо через клієнт Geth. Щоб запустити процес, треба ввести в менеджері пакетів таку команду:

    geth —mine —rpc —networkid —datadir
    приклад:
    geth —mine —rpc —networkid 1 999 —datadir / path / to / data / dir

    При активації Майнінг важливу роль відіграють такі значення:

    1. networkid — мережевий ідентифікатор приватного блокчейна Ефіріум.
    2. mine — команда, що активує Майнінг.
    3. rpc — команда, що активує сервер HTTP-RPC. Завдяки їй, гаманці інших користувачів локальної мережі можуть підключатися до створеного вузла Майнінг.
    4. rpcaddr — команда, яка вказує інтерфейс для роботи на вищезгаданому сервері. Спочатку встановлений інтерфейс localhost.
    5. rpcport — дає вказівку на порт для роботи HTTP-RPC. Тут за умовчанням виставлено значення 8545.
    6. rpcapi — вказує програмні інтерфейси додатків (API), доступні на сервері HTTP-RPC. Спочатку виставлений eth, net, web3.
    7. rpccorsdomain — команда, що активує CORS. Вона вказує перелік доменів, з яких дозволено приймати запити.
    8. nodiscover — команда, яка відключає пошук бенкетів. Створений вами вузол не зможуть знайти інші Ноди мережі. Але якщо ви хочете застосовувати кілька блокчейнов в одній локальній мережі, даний параметр не треба активувати.
    9. console — дана команда може запускати Майнінг з інтерактивним оточенням jаvascript (цей параметр більше підходить просунутим користувачам).

    Процес Майнінг можна починати безпосередньо через Geth або запускати консоль окремо, а потім підключати її до вузла спеціальної командою. Виглядає ця команда так:

    geth —datadir attach ipc: /geth.ipc
    приклад:
    geth —datadir / path / to / data / dir attach ipc: / path / to / data / dir /geth.ipc

    Після підключення консолі Geth можна переглядати всі акаунти приватного блокчейна Ефіріума, а також стежити за їх балансом. У цьому вам допоможуть наступні 2 команди:

    > eth.accounts
    [ «0x7a69b359e86893efa3d9732e4c65ced51567edd0»]
    > Eth.getBalance ( «0x7a69b359e86893efa3d9732e4c65ced51567edd0»)
    1.295e + 21

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

    Віталік Бутерін про блокчейне і Ефіріуме:


    Ссылка на основную публикацию