Blockchain (блокчейн) – это механизм хранения и изменения данных без центральных узлов. Что в нем особенного, и почему нужно изобретать какой-то новый механизм, если можно все хранить на сервере?
Блокчейн впервые был описан и применен для обеспечения транзакций цифровой валюты. Рассмотрим, как обмен деньгами происходит обычно. Пусть есть 3 чувака (А, Б и В), у которых на счету есть по 10 баксов. Их счета хранятся в банке (в обычной таблице). Когда чувак “А” хочет перевести 5 баксов чуваку “Б”, он отправит запрос в банк. Банк проверит состояние его баланса и отправит деньги адресату, если их хватает на счету.
С этим механизмом есть несколько проблем:
Решение этих проблем будет подразумевать решение двух задач:
Эти принципы положены в основу Блокчейн базы данных.
Представим, что трое наших ребят будут хранить таблицу счетов – каждый у себя. Тогда для перевода денег от “А” к “Б” необходимо будет всего лишь опубликовать событие для всей сети, в котором будет указано, что “А” переводит $5 для “Б”.
У каждого узла будет возможность удостовериться, что у “А” хватает денег на счету для перевода. Ну и обновить данные в своей собственной таблице. Так, если даже узел “А” захочет перевести больше денег, чем у него есть, остальные узлы не примут эту транзакцию. Открытость и возможность проверить любую транзакцию делают эту систему неуязвимой к обману.
Для того, чтобы в любой момент времени можно было проверить любую транзакцию, хранилище содержит список транзакций, а не список счетов:
А -> Б: $5 Б -> В: $2 В -> A: $1 В -> Б: $1 ...
## Данные о деньгах в системе хранятся в виде списка транзакций
Для удобства, транзакции группируются в блоки, которые после сборки отправляются по всей сети:
Блок 1: А -> Б: $5 : Б -> В: $2 : В -> A: $1 **Блок 2**: В -> Б: $1 ...
## Блок 2 будет наполнен и отправлен всем клиентам
Каждый клиент принимает такой блок и добавляет к уже сохраненным блокам. Так получается цепь блоков или блокчейн (Blockchain – chain of blocks). Однако, как убедиться, что клиент получил блок с настоящими данным, а не подделанными другими участниками?
На самом деле, когда один клиент направляет деньги другому, его транзакция помечается, как неподтвержденная. В течение короткого времени она остается такой, пока специальные узлы не проверят ее.
Такие узлы называются майнерами. Для подтверждения транзакции они используют сложные вычисления (открытые всем участникам). Побеждает тот, кто сделает это раньше всех. На практике, побеждает тот, у кого больше вычислительных мощностей. Победивший узел получает небольшое вознаграждение, а новый блок добавляется к цепи всей системы в хронологическом порядке.
После этого остальные узлы могут легко проверить валидность нового блока специальной hash() функцией. Так обеспечивается синхронизация данных среди всех узлов системы.
Блокчейн база данных обеспечивает (по-настоящему) распределенное хранение данных. Кроме этого, открытость сети, позволяет изменять данные (в примере – переводить деньги) без использования центральных узлов. Что, в свою очередь, сохраняет данные от фрода и взломов.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…