×

Блокчейн-інтернет. Що це і як працюватиме

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

У попередній статті я писав, як відкриту технологію «інтернет» монополізували і як компанії типу Unstoppable Domains (UD) виправляють це становище з допомогою блокчейну. Тоді я отримав конструктивну критику стосовно Web 3.0. Насамперед вона стосувалася таких пунктів як ID та прив’язка до неї в мережі, динамічні вебсайти на блокчейні, в тому числі ecommerce та соцмережі, та потенційні атаки на блокчейн-сайти.

Сьогодні спробую відповісти на ці питання вже з технічної сторони.

1. Ідентичність (ID)

Наші дані — це нова нафта, яку добувають корпорації та якою живлять цифрову економіку. Правда, часто власником даних є не ми, а платформи, на чиї правила ми погоджуємось. Як запевняє засновник та СЕО UD Метью Гоулд, «блокчейн вирішує проблему права власності (даних), починаючи з доменів». Ми вже знаємо, що децентралізовані домени стають вашими назавжди одразу після покупки. Та як інші користувачі в інтернеті знатимуть, що ви — це «ви»? Особливо, якщо криптовалюти і блокчейн асоціюються з анонімністю.

Для вирішення цього виклику існують блокчейн-платформи з нодами-оракулами типу Chainlink. Вони перевіряють і постачають надійні дані для коректної роботи смарт-контрактів. Пов’язуючи профілі соціальних мереж, таких як Твіттер, та інші ідентифікатори в інтернеті з доменним ім’ям .crypto, ці компанії допомагають забезпечити низку переваг:

  • надійна відправка криптовалюти
  • ефективніша та безпечніша взаємодія з організаціями в децентралізованій мережі
  • об’єднання двох мереж інтернету: 2.0 і 3.0 (на момент написання статті UD має 48 інтеграцій)

Покрокова інструкція, як прив’язати свій верифікований акаунт до гаманця (Ефіріум)

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

Верифікація ID на блокчейні має недооцінений потенціал. Наприклад, ви завжди будете в курсі, коли ваші дані використовувалися або їх намагалися використати (щось, чим відомі естонські державні послуги і з чим проблеми у Фейсбука). Окрім безпечного та приватного SSO (single sign-on) до всього інтернету, блокчейн-ID дозволить зберігати унікальні віртуальні об‘єкти чи підтвердження власності на фізичні об‘єкти — NFT.

Код Chainlink на GitHub. Як і UD, вони роздають гранти. Список усіх блокчейн-грантів я виклав у себе в блозі

2. Динамічні вебсайти

Окей, скажете ви, знову посередники (middlemen) у формі оракулів. Ну нехай, мабуть, це потрібно для поєднання двох типів мереж і поступового переходу до Web 3.0. Але ж як оця проблема з динамічним відображенням контенту? Адже навіть на форумі IPFS пишуть про ці обжемення!

Довідка: IPFS (з англ. InterPlanetary File System, міжпланетна файлова система) — протокол і блокчейн-інфраструктура нового інтернету. Дані у цій системі розповсюджуються за концепцією ідентифікування даних за хешом, тобто ID, який розраховується і залежить від їхнього внутрішнього значення.

Через це часто виникають непорозуміння: «а як це працює?»

IPFS: як працює інфраструктура Web 3.0

Щоб зрозуміти як працює IPFS, бажано поетапно пройтись по її білій книзі. Я обмежу цю підтему швидким оглядом інфраструктури, взятого з другого розділу:

  • Розподілені хеш-таблиці (DHT).
  • Обмін блоками — BitTorrent.
  • Системи контролю версій — Git.
  • Самосертифіковані файлові системи — SFS.

З презентації Juan Benet (Protocol Labs, IPFS, Filecoin)

Distributed Hash Tables (DHT)

DHT — це як Python dict або Perl hash (якщо у вас є ключ, ви можете отримати значення), але дані розподілені на багато вузлів (нод). У випадку з IPFS ключ є хешем цих даних (контенту). Ці два відео пояснюють, як система ефективно знаходить потрібне значення:

Варто відзначити, що цій темі можна присвятити окрему статтю. Однак важливо згадати DHT протокол Kademlia, що дозволяє краще (і швидше) знаходити файли (і сайти) в розподіленій мережі. Ось хороший огляд P2P алгоритмів.

BitTorrent

Обмін даними (блоками) в IPFS схожий на торрент, але не зовсім такий. Розробники пояснюють дві функції BitTorrent, які використовує IPFS:

  • стратегія tit-for-tat (якщо ви не роздаєте, то не отримуєте)
  • спочатку отримуйте рідкісні файли (покращує продуктивність і т. д.)

Помітною відмінністю є те, що там, де у BitTorrent кожен файл має окремий рій однорангових зв‘язків (утворюючи P2P-мережу), в IPFS — це один єдиний рій для всіх даних. Різновид IPFS BitTorrent називається BitSwap, але це теж не поміститься у цій статті.

# Make sure you have the daemon running
$ ipfs swarm peers
/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3

Коли ви тільки запустили емулятор, підключіться до пари «seed peers». Через деякий час кількість однорангових зв‘язків швидко зростає.

Ще один запит для рою:

$ ipfs swarm addrs
QmNRuQrwtGgeVQgndTny4A4Rukg7GR7vzDJrVJxUBfqevk (4)
        /ip4/127.0.0.1/tcp/4001
        /ip4/172.31.41.39/tcp/4001
        /ip4/35.167.26.28/tcp/4001
        /ip6/::1/tcp/4001
QmNSJohkvvBVmHeN7KUZnm4X84GA6Znbv6ZmvsTAjbw3AB (5)
        /ip4/10.0.1.8/tcp/4001
        /ip4/127.0.0.1/tcp/4001
        /ip4/174.44.163.74/tcp/16012
        /ip6/::1/tcp/4001
        /ip6/fd15:462e:f8fd:695e:9161:27dd:7f78:d242/tcp/4001
QmNTJyhCYcbv5GdnqtdEwTfJCgY6pV4PJiNTtAmuoxnQak (3)
        /ip4/127.0.0.1/tcp/4001
        /ip4/94.176.232.68/tcp/4001
        /ip6/::1/tcp/4001
QmNTZy7TfXvsHczwwV3EYbxRZN5gthgicG9GiroD7C4ZrP (4)
        /ip4/127.0.0.1/tcp/4001
        /ip4/172.20.255.127/tcp/4001
        /ip4/54.229.227.53/tcp/4001
        /ip6/::1/tcp/4001
        .
        .
        .

Це адреси в системі, про які знає нода; хеш нагорі — це peerID. За допомогою цієї інформації ви можете встановити зв’язок з іншим учасником мережі:

$ ipfs swarm connect /ip4/114.91.202.180/tcp/34746/ipfs/QmfTgdg6GkqJtUrWAYo69GjcLrjQq9LjTjgW3KZ1ux1X6U
connect QmfTgdg6GkqJtUrWAYo69GjcLrjQq9LjTjgW3KZ1ux1X6U success

Системи контролю версій — Git

Version Control Systems забезпечують можливості моделювання файлів, що змінюються з часом, та ефективного розповсюдження різних версій.

Популярна система контролю версій Git забезпечує потужну об‘єктну модель Merkle DAG, яка фіксує зміни у дереві файлової системи у розподілений спосіб:

  1. Незмінні об‘єкти представляють Файли (blob), Директорії (tree) та Зміни (commit).
  2. Об‘єкти адресовані змісту за допомогою криптографічного хешу їх вмісту.
  3. Посилання на інші об’єкти вбудовуються, утворюючи DAG Merkle. Це забезпечує безліч корисних властивостей цілісності та робочого процесу.
  4. Більшість метаданих версій (гілки, теги тощо) є просто вказівниками, а тому недорогі для створення та оновлення.
  5. Зміни версії оновлюють лише посилання або додають об’єкти.
  6. Поширення змін версій серед інших користувачів — це просто передача об’єктів та оновлення віддалених посилань.

Система контролю версій Git в IPFS

Самосертифіковані файлові системи — SFS

Self-certified filesystems використовуються для реалізації системи імен IPNS для IPFS. Це дозволяє нам генерувати адресу для дистанційної файлової системи, у якій користувач може перевірити дійсність адреси.

/sfs/<Location>:<HostID>

де Location — це мережева адреса сервера, а також:

HostID = hash(public_key || Location)

Таким чином, назва файлової системи SFS засвідчує її сервер.

IPFS: як зробити свій сайт на Web 3.0

Нижче — скріншот одного з кроків перенесення WordPress сайту на IPFS.

Аналогічно можна змінити наявні шаблони децентралізованих сайтів:

  1. Зробити форк на GitHub.
  2. Скачати код як .ZIP файл.
  3. Відредагувати index.html та style.css файли.
  4. Завантажити сайт на IPFS з допомогою pinata.cloud.
  5. Коли завантаження готово, скопіювати хеш IPFS нового сайту і призначити його до вашого домену.

Unstoppable Domains дає покрокову інструкцію як додати блокчейн домен для IPFS сайту.

IPFS: то як усе це синхронізується

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

Ви можете маніпулювати директоріями в IPFS за допомогою команд ipfs object patch. Далі цитую код, який знайшов на форумі IPFS:

USAGE
  ipfs object patch - Create a new merkledag object based on an existing one.

SYNOPSIS
  ipfs object patch

DESCRIPTION

  'ipfs object patch <root> <cmd> <args>' is a plumbing command used to
  build custom DAG objects. It mutates objects, creating new objects as a
  result. This is the Merkle-DAG version of modifying an object.

SUBCOMMANDS
  ipfs object patch add-link <root> <name> <ref>    - Add a link to a given object.
  ipfs object patch append-data <root> <data>        - Append data to the data segment of a dag node.
  ipfs object patch rm-link <root> <link>    - Remove a link from an object.
  ipfs object patch set-data <root> <data>           - Set the data field of an IPFS object.

  Use 'ipfs object patch <subcmd> --help' for more information about each command.

Приклад:

$ tree
.
└── test-directory
    ├── file-a
    └── file-b

$ ipfs add -r test-directory
added QmSJY8R8qM1HWRTxWxtRwtdxTq6Jqgtx5GQ2RvrUJRUoRx test-directory/file-a
added QmeRjufJQ5oNb3PEmDFZeZ9jPuZRbp5Gnaeahcw8ogq7nd test-directory/file-b
added QmVK4zcfWHyEqHmkWqMPNTH1q3LyPndPCoE5PYRfq1V8A2 test-directory

$ echo "c file" >> test-directory/file-c

$ tree
.
└── test-directory
    ├── file-a
    ├── file-b
    └── file-c

1 директорія, 3 файли.

$ ipfs add test-directory/file-c
added QmPrLX9CiHph7yF5ZtU1ypxxdxgNX3RYLhjcJVSqyCTGr3 file-c

$ ipfs object patch add-link QmVK4zcfWHyEqHmkWqMPNTH1q3LyPndPCoE5PYRfq1V8A2 file-c QmPrLX9CiHph7yF5ZtU1ypxxdxgNX3RYLhjcJVSqyCTGr3
QmZm33yVb5uXAMjZDbL7Q1x69ZTFL6e65sMvYof1R7eh1J

3. Соцмережі на блокчейні

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

  • Diaspora (якби Фейсбук не міг продавати ваші дані)
  • Steemit.com (якби читачі DOU платили вам за статті і коментарі)
  • Minds.com (якби Medium.com не був таким жадібним)
  • Peepeth.com (Твіттер на блокчейні)

Є ще Subsocial з реалізацією на Polkadot (паралельний блокчейн до мережі Ethereum), Helios (який отримав грант на розробку від ЄС в рамках програми «Горизонт 2020»), а Reddit представив «бали від спільноти», які сама платформа «не контролює».

Але нас цікавить технічна реалізація:

Tech stack проекту Subsocial

Спробувати, розглянувши код у вільному доступі, можна тут. Нижче теоретичний приклад алгоритмів у подібних мережах від дослідників Le Jiang та Xinglin Zhang:

Інші соцмережі на блокчейні у своєму дослідженні розглянули Pfeiffer і колеги.

4. Електронна комерція

Загалом, екомерс у вебі 3.0 буде схожим на експерименти, які зараз проводять з NFT — токенами для унікальних об’єктів. Яскравим прикладом є платформа OpenSea. Більш того, сайт дозволяє запустити власний маркетплейс і супроводжує розробників детальною документацією. Нижче — приклад коду (створення смарт-контракту під ERC-721 токен):

pragma solidity ^0.5.0;

import "./TradeableERC721Token.sol";
import "openzeppelin-solidity/contracts/ownership/Ownable.sol";

/**
 * @title Creature
 * Creature - a contract for my non-fungible creatures.
 */
contract Creature is TradeableERC721Token {
  constructor(address _proxyRegistryAddress) TradeableERC721Token("Creature", "OSC", _proxyRegistryAddress) public {  }

  function baseTokenURI() public view returns (string memory) {
    return "https://opensea-creatures-api.herokuapp.com/api/creature/";
  }
} 

Повний гайд

Так, наразі це лише часткове рішення (централізований сервіс з виходом у Web 3.0). Однак ми побачимо поступовий перехід електронної комерції у децентралізоване середовище. Ще один приклад — це одноранговий маркетплейс Monetha. Поки рано говорити про їх успіхи, та вони вже встигли стати призерами UNICEF Blockchain Challenge та створити кілька Proof-of-Concept (POC). Вже зараз ви можете створити свій сайт з допомогою UD та опублікувати його на IPFS.

Скріншот сторінки OpenSea для розробників

5. DDoS та інші атаки

Будьмо реалістами й розгляньмо потенційні ризики з сайтами на блокчейні. Перше, що спадає на думку — це втрата доступу до свого сайту, бо: а) забули пароль; б) загубили seed-фразу; в) «знесли» власну ноду, якщо лише на ній і зберігався сайт. Ось кілька правил, щоб цього не сталося. Гадаю, що в нашій усвідомленій спільноті це малоймовірно, тому наступне питання — DDoS.

DDoS неможливий для пошуку доменів на блокчейні, якщо у вас своя нода, оскільки у вас є копія блокчейну і ви можете зчитати її самостійно. Якщо ж мається на увазі DDoS-атака на веб-контент, а не домену (припускаючи, що він зберігається на Р2Р-сервісі як IPFS), можна зберігати вміст локально і не хвилюватися. Проте за умови розміщення контенту на Amazon, тоді, на жаль, сайт буде вразливий до DDoS. Сервіси типу Cloudflare стануть у пригоді.

Атака 51? Це вже питання мережі, на якій зберігатиметься домен (у випадку з UD — це Zilliqa та Ethereum). Теоретично, якщо зловмисники заволодіють більшістю потужності мережі, вони можуть внести зміни у дані, проте лише в останніх блоках! Чим далі в історію, тим дорожчою буде атака. Це малоймовірно з Ефіріумом (тим паче з Біткоїном); більш того, Ethereum переходить на алгоритм консенсусу Proof-of-Stake найближчим часом.

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

Заключне слово

Повторюючи власну фразу, «інтернет буде децентралізовано» і цей процес не спинити. UD написав про інші сфери (та конкретні сайти), які набирають популярності серед прихильників Web 3.0. Чинна стаття — це запрошення до нової хвилі питань і критики. Я міг пропустити якийсь нюанс, важливий для розуміння цих технологій. Або не так пояснити. В усякому разі, разом ми можемо допомогти новому поколінню розробників.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному3
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Интересная статья, спасибо.

Дякую.

Чи буде взмозі FreeTon проект зайняти свою нішу? Якщо так, де саме буде найбільш придатним?

Гарне питання. З того що спостерігаю, то проєкти типу EOS, Ethereum, PolkaDot, біржі Binance і

FreeTon

активно розвивають власні екосистеми. Тобто, мають місце бути. Позитивним сценарієм буде їх співпраця і сумісність у майбутньому.

До речі, готую наступну статтю якраз про такі виклики індустрії.

Підписатись на коментарі