Блокчейн и криптовалути за начинаещи
Хайде да научим какво е Блокчейн и да напишем един на NodeJS
Блокчейн е може би най-нашумялата думичка в индустрията в последно време, a благодарение на критовалутите, и извън нея. Банки, правителства, предприемачи, и корпорации започват да експериментират с Блокчейн. В същото време повечето информация е доста неясно написана, така че може би ще е полезно да си имаме и една (надявам се) лесно разбираема статия.

Зад Блокчейн стои изключително интересна концепция, която дори да не промени IT индустрията завинаги, със сигурност ще намери приложения. Говоря в бъдеще време, защото едно от най-приятните описания на Блокчейн е 'решение на проблем, който oще не съществува'. Тоест тепърва ще откриваме истинските му ползи.

Та (ползването на паразитни думи в писмена реч е забавно), в тази серия от статии ще разберем какво е Блокчейн, как/защо се ползва, и понеже практическото учене е най-полезно - ще построим един семпъл Блокчейн на NodeJS.

Дискплеймър преди да започнем: Ако се надявате да откриете отговор на въпроса 'С тия 100 лева мога ли да направя 100к с Биткойните?', ще трябва да ви разочаровам. И аз не зная. Но ако искате да понаучим нещо за една от навлизащите технологии на достъпен език, хайде. Също има технически термини понеже е неизбежно, но ще се пробвам да правя аналогии с реални примери от живота, където е по-техническо.

Ами, освен да започнем.

Какво е блокчейн?


Блокчейн е децентрализиран, неизменим, и последователен метод за запазване на информация. Все прекрасни думи, но наистина съществените са две.

Децентрализиран - информацията се запазва във всички точки едновременно, и няма централен авторитет, който да е нужен за да бъде обработена.

Неизменим - всеки блок от информацията е свързан с предния, така че дори някой да промени част от информацията, това прави неговото копие на веригата невалидно.

С най-прости думи, това означава, че можем да запишем нещо завинаги без да има нужда да се доверим на някого за запазването на информацията. Koето е изключително вълунващо, ако разгледаме потенциалните и реалните реализации.



Централизирана срещу децентрализирана система


Какви приложения има / ще има Блокчейн.


Гласуване. В днешно време когато подадем гласовете си по време на избори, цялата информация се запазва и обработва от държавата, като централен авторитет. Тоест тя се задължава да запази, обработи правилно, преброи правилно, и да не измени никаква част от записите. И всички трябва да приемат на доверие, това че го прави. Нали Руснаците си избират Путин всеки път от любов.

Блокчейн е потенциално бъдеще, в което ще има прозрачни, неизменими записи за гласовете, без нужда от доверие към държавата. В цивилизования свят вече се експериментира с Блокчейн за провеждане на избори електронно.

Транзакции. В момента ако Иван иска да прехвърли 50лв на Петър, те трябва да се доверят на трето лице (банка), която да вземе парите от единия, да обработи транзакцията, и да пристигнат при другия. За което разбира се получават комисионна.

Блокчейн транзакциите не се нуждаят от трето лице, което да ги обработи. При децентрализираната верига, всеки от клиентите в Блокчейна може да направи превод, за чието записване и обработване гарантират всички други клиенти във веригата.

Банките като институции са ми любими колкото кашлица, така че идеята да изместим поне част от транзакциите в работеща независима система, си е доста вълнуваща.

Криптовалути. Стигнахме и до вече реализирано приложение на Блокчейн. След като един таксиджия ме попита 'Ти щом си програмист, я кажи тия Биткойни оферта ли е да се купуват?', значи са стигнали до критична популярност.

Транзакциите на всяка криптовалута се записват в Блокчейн, и така пълната верига е публично достъпна и валидността й може да бъде верифицирана. В момента съществуват Биткойни на стойност над половин трилион долара, осъществяват се около 200 000 транзакции на ден, и всичко работи.

Тоест е система, която е изпитана на практика, и в момента целим да намерим нови приложения. Имайки в предвид мащаба в който се развива (поне в цивилизования свят), и държавите/корпорациите които тепърва експериментират с Блокчейн, изглежда че момента е идеален човек да задълбае.

Kaк работи Блокчейн?


Блокчейн е верига от блокове, всеки от които е свързан с предния. Всички потребители притежават пълно копие на веригата, и всяка промяна/транзакция (добавяне на нов блок), трябва да бъде одобрена от всички, преди да бъде добавена към веригата.

Нека разгледаме следната илюстрация:



1. Иван иска да изпрати пари на Петър. И двамата изпращат криптографската си идентичност към мрежата на Блокчейна със заявката за транзакцията.

2. След като са верифицирани, се създава нов временен Блок, който съдържа информацията за транзакцията, подателя, и получателя.

3. Този временен блок се препраща към всички участници в Блокчейна, за верификация и валидиране на транзакцията.

4. В тази стъпка се валидира транзакцията. В Биткойн, метода за валидиране на транзакцията е Proof-of-Work. Към транзакцията се изпраща сложно математическо уравнение, и първия който разреши уравнението се смята за валидатор на транзакцията.

В тази стъпка се случва самото 'копаене на Биткойни', като първия който стигне до резултата на уравнението добавя новия блок.

Най-семплия аналог, който ми хрумва, е че ако някой е съгласен да занесе писмо пеша от Китай до Холандия, то това писмо със сигурност съдържа нещо важно/правилно. В замяна на изчислението, най-бързия валидатор получава Биткойни след като е валидирано.

Proof-of-Work алгоритъма работи за Биткойн, понеже е криптовалута и има начин да се стимулират потребителите да валидират транзакциите. За запазване на данни нямаме такъв стимул, за това се ползват алгоритми като PBFT (Practical Byzantine Fault Tolerance). Зад PBFT има адски интресна история за една Византийска обсада на крепост, но за него ще говорим по-късно.

5. След като новия блок е валидиран, участниците проверяват кой има най-дълго копие на веригата (тоест най-ново, защото записите не могат да се трият - само се добавят). Новия блок се добавя към най-дългото копие на веригата, и става валиден запис на информацията, или в случая на транзакцията.

6. Парите на Иван са вече в Петър.


Как можем да се доверим на Блокчейн.


Верижна последователност

Както споменахме по-рано, всеки блок съдържа криптирана връзка към предния блок. Тоест дори някой потребител да промени блока който съдържа неговия баланс от '0' на '929183931', следващия блок във веригата ще покаже, че блока преди него е променян, и това ще направи това копие на Блокчейна невалидно. При всяка от стъпките по-горе се проверява дали Блокчейна с който се работи е валиден/неизменян.

Криптографско доказване на идентичност

Също, всяка транзакция се изпраща с криптографско доказателство за идентичността. Тоест можете без да разкривате идентичността си, по сигурен начин да докажете, че вие сте човека, за който се представяте.

Аналог на това е, да кажем че пишем книга под псевдоним (да, обикновено пише кой стои зад псевдонима, но в случая не сме искали да пише). Всичко супер, но изведнъж се появява човек, който твърди че той я е написал. Но в книгата сме сложили криптиран параграф, който само ние можем да декриптираме. По този начин доказваме, че ние сме автора.

В Блокчейн, това се случва с криптирани 'ключове' - един публичен и един личен. Публичния ключ се генерира на базата на математическа зависимост от личния. Тоест винаги можем да проверим дали двата ключа са свързани един с друг. Стига да не запишем личния си ключ на листче под монитора, тази система е изключително надеждна. По груби изчисления на най-мощния суперкомпютър в света, ще му трябват милиарди години за да 'налучка' личния ключ, който е свързан с публичния.

Координирани атаки

Както при всяка децентрализирана система, ако достатъчно голям брой от участниците се координират с цел да подадат грешна информация, тя се превръща в 'правилна' от гледна точка на веригата.

Както споменахме, Биткойн ползва Proof-of-Work алгоритъм, при който координирана атака от 51% може да забави и дублира преводи. В мащаба на Биткойн, такава атака трябва да има огромен бюджет (някои държави могат да си го позволят), но в крайна сметка може да се върне веригата до състояние преди атаката.

Другият алгоритъм, който е стандарт ако не можем да ползваме Proof-of-Work, е PBFT (Practical Byzantine Fault Tolerance). При него няма нужда да се възнаграждават участниците (да копаят), за да се запазва информация в Блокчейна.

Името на алгоритъма идва от анекдота за Византийски командири, които са обсадили крепост, и трябва да решат дали да атакуват или да отстъпят. Те общуват помежду си с писма, и всяко едно от писмата е може да бъде достоверно или от предател. Ако само част от тях атакуват, а другите командири отстъпят, със сигурност ще загубят битката, тоест трябва да стигнат до единодушно решение. Задачата се усложнява от това, че предателите могат да пратят писмо за атака на един командир, и писмо за отстъпване на друг командир. Консенсуса дали да атакуват('запазят информацията') или да отстъпят('да приемат транзакцията за невалидна') е еквивалента на нашия Блокчейн и участниците в него.

При PBFT са нужни 34% компрометирани участника за да се добавят записи, които не е трябвало да се одобрени.



Та, в крайна сметка се запознахме до някъде с това какво е Блокчейн, как работи, как се ползва в момента, и как бихме искали да се ползва в бъдеще.

В следващата част ще напишем един минималистичен Блокчейн за да видим как работи от техническа гледна точка. Ще ползваме NodeJS, понеже е езика на който пиша най-лесно, но ако имате амбиции да се занимавате професионално, можете да си преведете примерите на C++/Golang които са водещите езици за Блокчейн в момента.

До другия път! :)

Християн Михайлов
Systems Administrator, Fullstack Developer, Founder @ ESRHost
Имате въпроси? Нека ви помогнем.
Чат с нас
Пишете ни
#Owned and developed by ESR Host Ltd. Условия на ползване.
Цъкнете тук за да се върнете нагоре.
Чат с наш представител
[[ mainCtrl.chatHeaderContent ]]
[[ message.message ]]
[[ message.message ]]
Система: [[ message.message ]]