DevDairy - Backend | Blockchain
70 subscribers
17 photos
3 videos
1 file
11 links
Backend / blockchain
Download Telegram
Клиент-сервер - централизованность.

Peer-to-Peer - децентрализованность.

Как уже стало понятно, в централизованных системах всегда есть "центр" - главный сервер, хранящий всю информацию.

В случае децентрализованных систем - компьютеры (ноды) соединены друг с другом и поддерживают консесус.

Плюсы таких систем:

Все, что попало в блокчейн не может быть изменено или удалено

Если любой из компьютеров отключится от сети, сгорит или будет украден, то у остальных участников по прежнему останется свой экземпляр базы данных.

Прозрачность. В открытых блокчейнах все данные могут быть просмотренны любым другим участником.

У таких систем также есть минусы и возможности взлома, но до этого дойдем немного позже 🙊
👍6
​​Консенсус

Каждый блокчейн основан на протоколе, а учитывая то, что каждый из блокчейнов служит своей цели, то и количество протоколов явно больше одного. Кстати, блокчейн – это не только про криптовалюты, эти «базы данных» используются и в других сферах и только набирают обороты.

У каждого блокчейна есть свой протокол как некий свод правил и действий, направленных на передачу данных. Блокчейн-протокол – это тот же набор правил, благодаря которому обеспечивается безопасность транзакций в сети того или иного блокчейна. Сети блокчейнов функционируют, потому что они децентрализованы. Это означает, что каждый узел в сети должен проверять транзакции. Узел обычно представляет собой компьютер или подобную систему.

В свою очередь существует ​​алгоритм консенсуса – это механизм, который проверяет верность тех или иных правил, то есть он проверяет, что транзакция верна и протокол соблюден.

Существуют различные механизмы консенсуса:
Proof-of-Work(PoW) - Bitcoin;
Proof-of-Stake(PoS) - Ethereum, Solana;
Delegated Proof-of-Stake(DPoS) - Lisk, Steem;
Proof-of-Action(PoA) - Decred, Espers
Proof-of-Authority(PoA) - VeChain, Ethereum Kovan

А также многие другие механизмы о которых поговорим подробнее в следующих постах.
👍6
​​Proof-Of-Stake (PoS)

Proof-Of-Stake - Самый популярный механизм консенсуса в блокчейне, на его основе построены многие криптовалюты:
Solana, Cardano, Tezos, Algoran, а после недавнего обновления и Ethereum.
С механизмом PoS участникам сети нет необходимости иметь дорогое обарудование для майнинга, ведь заработок осуществляется через стейкинг.
Также из приемуществ можно отметить малое потребление энергии для генерации блоков и обеспечения безопасности блокчейна.

При разработке архитектуры блокчейна, который является децентрализованным протоколом для переводов с постоянно обновляемой базой данных, возникает два ключевых вопроса:

1. Кому и по какому принципу предоставить право генерировать новые блоки;
2. Как будут одобряться транзакции для обеспечения защиты от двойных трат и прочих злоупотреблений.

Решение этих вопросов привело к появлению нескольких механизмов консенсуса, то есть наборов правил, по которым участники децентрализованной сети договариваются о том, как именно транзакции могут быть утверждены и включены в новые блоки.

Принцип работы Proof-Of-Stake:
Данный механизм дает право на управление блокчейном всем участникам в соответсвии с долей монет, которой они владеют.

Например, в криптовалюте Nxt с ее «каноническим» механизмом PoS шанс сформировать очередной блок есть у всех пользователей, имеющих в официальном кошельке NXT Client не менее 1002 NXT.

Чем больше монет в кошельке NXT, тем больше вероятность, что он получит право сформировать новый блок, и тогда пользователю достанутся все комиссии за транзакции, попавшие в данный блок. В идеальном случае кошелек, который владеет 1% монет, будет формировать 1% всех новых блоков.
👍5
​​Proof-Of-Work (PoW)
Сатоши Накомото использовал концепцию PoW в первой криптовалюте - bitcoin.
PoW — алгоритм, который позволяет всем нодам договориться о единой версии блокчейна (достичь консенсуса),
кроме того он отвечает за эмиссию(создание) новых монет в блокчейне.

Все слышали о майнинге, так вот майнинг - одна из главных частей Proof-Of-Work алогритма.
Этот алгоритм организовывает добычу новых блоков в блокчейне (помните, что такое блоки?).
Концепция помогает подтверждать транзакции и верифицировать данные блокчейна на компьютерах участников системы.

В чем суть Proof-of-Work

PoW помогает организовать работу сети. Процесс невозможно запустить без майнеров — участников рынка, которые подсоединяют свое вычислительное оборудование к сети криптовалюты, чтобы решать сетевые задачи в обмен на награду (комиссионные, плюс сетевая награда за добычу каждого блока). Такую работу называют майнингом.

Как работает PoW в контектсе криптовалют:

1. Пользователь создает заявку на транзакцию и устонавливают комиссию (награду для майнера, который проведет операцию).
Чем больше комиссия - тем быстрее обработают его заявку.

2. Вычислительное оборудование майнеров проводит операцию. Проверкой достоверности транзакций занимаются специальные сетевые узлы — ноды.
В случае, если все верно, операцию включают в блок, который, в свою очередь, становится частью общего блокчейна криптовалюты.

Чем больше у майнера вычислительных мощностей — тем выше будет его доход.

Майнинг - тема для отдельного поста, до этого еще доберемся, а о Proof-Of-Work пока достаточно знать этого, в будущем будем возращаться к нему и другим механизмам консенсуса.
👍4🔥2
​​Механизмы Консесуса
Надеюсь главную суть из последних постов вы поняли, но в кратце напомню:
Блокчейн - это база-данных, которая хранится на большом кол-ве компьютеров (нодах) и этим компьютерам необходимо приходить к консесусу (другими словами, они должны содержать "правильные" и "одинаковые" данные), для этого необходимы механизмы консесуса и в зависимости от задач блокчейна они могут быть разными🤔

PoS и PoW описаные выше - самые популярные механизмы консенсуса, поэтому они стоили отдельных постов.
Сейчас, когда стало понятно, что это и для чего они нужны мы пробежимся по некоторым другим механизмам (их на самом деле достаточно много и каждый имеет свою плюсы и минусы).

Delegated Proof-of-Stake (DPoS)
Похож на Proof-of-Stake, за исключением того, что он включает в себя механизм голосования и делегирования, чтобы стимулировать пользователей защищать сеть и проверять блоки с помощью монет, оставленных в качестве залога. Благодаря данному залогу пользователи могут участвовать в голосовании, где выбирают делегатов, которые будут ответственны за все аспекты проведения транзакций

Блокчейны с DPoS - Cosmos, Tron, EOS.

Proof-of-Action (PoA)
Доказательство активности (PoA) - это гибрид механизмов консенсуса PoW и PoS.
В системах PoA процесс майнинга начинается, как и в PoW, когда майнеры соревнуются в решении сложной математической задачи, используя огромные вычислительные мощности. Однако после того, как блок добыт, система переключается на PoS, при этом успешно сгенерированный заголовок блока транслируется в сеть PoA. Затем случайным образом выбирается группа валидаторов, которые подписывают хэш, подтверждая новый блок.

Блокчейны с PoA - Decred, Espers


Proof-of-Authority (PoA)
В PoA валидаторы не делают блокируют свои монеты в стейкинге. Вместо этого они должны поставить на кон свою репутацию за право подтверждать блоки. Это сильно отличается от большинства протоколов блокчейна, которые обычно не требуют раскрытия личности для участия.

Блокчейны с PoA - JP Morgan, VeChain

Proof of Burn (PoB)
В PoB майнеры получают право добывать блок, "сжигая" (уничтожая) заранее определенное количество токенов проверяемым способом - а именно, отправляя их на "адрес сжигателя", где их нельзя восстановить или потратить. Чем больше монет сожжено, тем больше шансов быть выбранным случайным образом.

Блокчейны с PoB - Slimcoin, Counterparty, Factom


Proof of Space (PoSpace)

PoSpace - основывает свой алгоритм майнинга на количестве свободного места на жестком диске майнера.
Майнеры заранее генерируют список всех возможных хэшей в процессе, называемом "планированием". Затем эти схемы хранятся на жестком диске. Чем больше объем памяти у майнера, тем больше возможных решений. Чем больше решений, тем выше шансы получить правильную комбинацию хэшей и выиграть вознаграждение.

Блокчейны с PoS - Chia, Burstcoin, Signum, Storj

На этом мы закончим краткий экскурс по механизмам консенсуса и будем продвигаться дальше и прыгать в кроличью нору 😅
👍4👏1
Новое видео о 20 ключевых концепций системного проектирования, начиная от вертикального и горизонтального масштабирования, балансировщика нагрузок и кэширования до более сложных тем, таких как gRPC, WebSockets, SQL и NoSQL.

https://youtu.be/Qk6sVSLjHFo

Полезные ссылки:
Алгоритмы балансировки нагрузки: https://habr.com/ru/companies/ruvds/articles/732648/
👍5🔥1
Сделал ролик с лайв кодингом, где будем писать свой балансировщик нагрузок, с 3-мя видами алгоритмов балансировки:
Round Robin, Weighted Round Robin и IP Hash

Ознакомительное видео, для того, чтобы глубже понять, как они работают под капотом.

Пока пытаюсь выяснить в какие дни недели лучше выкладывать видео?
(Можно выбрать несколько вариантов ответа)
👍5🌭1
This media is not supported in your browser
VIEW IN TELEGRAM
Как насчет подобных видео?
Поразбираем интересные задачи с собеседований Google, Apple, Amazon и тд
👏71👍1💩1
В Апреле поставил себе челендж каждый день в течении 365 дней решать хотябы 1 алгоритмическую задачу на LeetCode.
2 дня случайно пропустил, за 43 дня решил 70 задач.

уверен на 99% что 365 дней будут выполнены😀
👍5🤡3👎1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Есть такая интересная штука:
Игра «Жизнь» — клеточный автомат, придуманный английским математиком Джоном Конвеем в 1970 году. Это игра без игроков, в которой человек создаёт начальное состояние, а потом лишь наблюдает за её развитием.

Решил накидать вариант этой игры,выглядит прикольно позалипать, можно запустить в любом браузере, выбрать случайное начальное состояние или мышкой самому накликать 🐈

Дает не предсказуемые и интересные варианты
👍5
Media is too big
VIEW IN TELEGRAM
Работа Turbofan и JIT компилятора
🔥4👍31
Turbofan - важнейшая часть движка v8, на котором работает (Node.js, Google Chrome, Yandex и др.)

Благодаря нему, часто используемые части кода в вашем приложении компилируется и исполняется в несколько раз быстрее.

Поэтому важно писать код так, чтобы помогать движку ускорять ваш код правильно.


Вот несколько советов, как не помешать JIT-компилятору улучшить производительность: ⚡️

Изменение типов переменных:

function add(a, b) {
return a + b; // Если сначала передаются числа, а потом строки — Turbofan сбросит оптимизацию
}

let i = 0
for (let i = 0; i < 1000; i++){
add(1, 2);
} // код оптимизировался (Байт код -> Машинный код)

add("1", "2");
// код деоптимизировался (Машинный код -> Байт код)



Изменение шейпов объектов:
Об устройстве объектов в javascript расскажу позже, но стоит знать, что у каждого объекта есть shape.

Несколько объектов могу иметь одинаковый shape.
shape - форма объекта (какие у объекта есть ключи)

Поэтому любое динамическое добавление/удаление ключей в объекты изменяет его shape
и тем самым ухудшает оптимизацию кода.


const obj = { x: 1, y: 2 };
obj.z = 3; // Добавление ключа = изменение shape
delete obj.x; // Удаление ключа = изменение shape


#javascript #v8 #turbofan
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👏3
"На самом деле в JavaScript не существует массивов!"

Звучит как кликбейт, но это правда. Во всех учебниках говорится, что массивы в JS есть, но под капотом — это всего лишь абстракция.

Вспомним из чего состоят настоящие массивы:
- Указатель на начало памяти.
- Длина известна заранее.
- Значения расположены друг за другом в памяти.

❗️❗️❗️❗️❗️❗️❗️❗️❗️
А в JS массив — это обычный объект

У которого есть `length` — специальное свойство, которое автоматически обновляется при добавлении элементов.

Ключи — это индексы (числа от 0 до `2³² - 2`)

И значения которые могут быть любого типа.

Именно поэтому мы можем итерироваться **for...in** по массиву и будем получать индексы в виде ключей.


const arr = ['a', 'r', 'r']

for (const key in arr) {
console.log(typeof key)
// 'string'
console.log(key)
// '0','1','2',
}


Но так делать не нужно.

Не стоит также забывать, что в V8 есть оптимизации: если массив «нормальный», он хранится как настоящий массив и следовательно более производителен!

Ссылка на доклад разработчиков javascript v8 на тему массивов, объектов и их внутренних устройств:
ДОКЛАД
Please open Telegram to view this post
VIEW IN TELEGRAM
2