Зачем миру блокчейн?
Контроль данных
Есть ли способ хранить информацию о чем-то, чтобы у ее владельца не было возможности ее менять в своих интересах? Какому одному посреднику можно доверять вечно?
Международные транзакции.
Банки могут эффективно перекладывать цифры с одного счета на другой только внутри одного государства.
Финансовая инклюзия.
Оказавшись в “не своей” стране, открыть банковский счет может быть непростой задачей. А в некоторых странах гражданам это сделать до сих пор нет возможности.
Автоматизация процессов.
Государства, у которых есть реестр недвижимости. Они же проводят выборы и тратят на это очень много человеко-часов. Хотя нужно просто вести прозрачно и честно базу данных.
Получается нам нужна база данных:
1. Которая работает без участия человека.
2. Которую нельзя прийти и выключить или изменить.
#введение
Контроль данных
Есть ли способ хранить информацию о чем-то, чтобы у ее владельца не было возможности ее менять в своих интересах? Какому одному посреднику можно доверять вечно?
Международные транзакции.
Банки могут эффективно перекладывать цифры с одного счета на другой только внутри одного государства.
Финансовая инклюзия.
Оказавшись в “не своей” стране, открыть банковский счет может быть непростой задачей. А в некоторых странах гражданам это сделать до сих пор нет возможности.
Автоматизация процессов.
Государства, у которых есть реестр недвижимости. Они же проводят выборы и тратят на это очень много человеко-часов. Хотя нужно просто вести прозрачно и честно базу данных.
Получается нам нужна база данных:
1. Которая работает без участия человека.
2. Которую нельзя прийти и выключить или изменить.
#введение
🔥3
Хэш или хэш-функция – одна из основных составляющих современной криптографии.
Хэширование представляет собой преобразование любого объема информации в уникальный набор символов, который присущ только этому массиву входящей информации. Этот набор символов и будет называться хэшем.
Например если мы возьмем весь текст из первого моего поста, прогоним его через хеш-функцию (sha256) - то получим вот такой хеш:
- Случайность вывода: Хеш всегда уникален, если поменяю хоть один символ из моего текста, хеш изменится до неузнаваймости.
- Фиксированная длина вывода: Длина хеша будет всегда фиксирована, в примере выше 64 символа, если я скормлю хеш функции целую книгу, ее хеш будет все равно 64 символа.
- Детерминированность: сколько бы раз я не запускал один и тот же текст через одну и ту же функцию, результат будет таким же.
#введение
Хэширование представляет собой преобразование любого объема информации в уникальный набор символов, который присущ только этому массиву входящей информации. Этот набор символов и будет называться хэшем.
Например если мы возьмем весь текст из первого моего поста, прогоним его через хеш-функцию (sha256) - то получим вот такой хеш:
fda80cde12cdd750fc48ae138cd9a5afdea987b2357d96bb35860ced043c295f
- Отсутствие обратимости: Понять что текст был имея только хеш - невозможно.- Случайность вывода: Хеш всегда уникален, если поменяю хоть один символ из моего текста, хеш изменится до неузнаваймости.
- Фиксированная длина вывода: Длина хеша будет всегда фиксирована, в примере выше 64 символа, если я скормлю хеш функции целую книгу, ее хеш будет все равно 64 символа.
- Детерминированность: сколько бы раз я не запускал один и тот же текст через одну и ту же функцию, результат будет таким же.
#введение
👍3
Блоки в блокчейне связаны через хеш-функции, создавая цепочку непрерывных данных. Каждый блок содержит информацию о транзакциях, времени создания и других данных, а также хеш предыдущего блока.
Этот метод связывания блоков через хеши обеспечивает надежность и целостность блокчейна. Если злоумышленник попытается изменить данные в одном из блоков, это повлечет изменение хеша данного блока и всех последующих блоков.
При такой цепочке понятно что должен быть какой-то первый блок, с которого все началось. В примере на картинке Block 1 имеет пустой хеш 0000. Это называется генезис-блок.
В Биткойне - возможно ради символа недовольства финансовой системой в генезис-блок Сатоши Накамото добавил заголовок статьи "The times" о неспособности Британского правительства стимулировать экономику.
#введение
Этот метод связывания блоков через хеши обеспечивает надежность и целостность блокчейна. Если злоумышленник попытается изменить данные в одном из блоков, это повлечет изменение хеша данного блока и всех последующих блоков.
При такой цепочке понятно что должен быть какой-то первый блок, с которого все началось. В примере на картинке Block 1 имеет пустой хеш 0000. Это называется генезис-блок.
В Биткойне - возможно ради символа недовольства финансовой системой в генезис-блок Сатоши Накамото добавил заголовок статьи "The times" о неспособности Британского правительства стимулировать экономику.
#введение
👍2🤯1
Мы поняли что блокчейн это цепочка блоков.
Что внутри блока?
Рассмотрим на примере bitcoin. Остальные блокчейн сети устроены очень похоже.
- Транзакции - самая важная часть, их может быть несколько в одном блоке. В них содержится информация кто сколько кому передал криптовалюты, код смартконтрактов и в целом любые данные. Среди них самая первая coinbase транзакция - это награда майнерам. О которых позже.
Остальные параметры технические, служат для корректной работы блокчейна.
- Previous hash - это хеш предыдущего блока, чтобы избежать махинации и сохранить строгую последовательность блоков.
- Timestamp - это просто время, когда блок был записан. Задача как его вычислить для одновременно работающих компьютеров нетривиальная.
- Merkle tree - это дерево Меркла - нужно тоже для безопасности. Об этом уже в продвинутой части.
- Nonce, Bits - это параметры для майнеров.
#введение
Что внутри блока?
Рассмотрим на примере bitcoin. Остальные блокчейн сети устроены очень похоже.
- Транзакции - самая важная часть, их может быть несколько в одном блоке. В них содержится информация кто сколько кому передал криптовалюты, код смартконтрактов и в целом любые данные. Среди них самая первая coinbase транзакция - это награда майнерам. О которых позже.
Остальные параметры технические, служат для корректной работы блокчейна.
- Previous hash - это хеш предыдущего блока, чтобы избежать махинации и сохранить строгую последовательность блоков.
- Timestamp - это просто время, когда блок был записан. Задача как его вычислить для одновременно работающих компьютеров нетривиальная.
- Merkle tree - это дерево Меркла - нужно тоже для безопасности. Об этом уже в продвинутой части.
- Nonce, Bits - это параметры для майнеров.
#введение
👍3✍1👌1
Внутри транзакции в блокчейне содержится информация о передаче активов (например, криптовалюты) или о выполнении определенных операций. Точное содержание транзакции может различаться в зависимости от конкретного блокчейна.
Кратко транзакция это:
На самом деле все сложнее. На картинке структура транзакции в Биткойн сети.
- Inputs - это транзакции из сети с previous output hash, которыми данный адрес может распоряжаться. Т.е. которые пришли ему.
- Outputs - это то куда он хочет отправить активы, адресов может быть несколько. Где value - это сумма монет.
- Signature script и public key script - это команды для сети, которые рассмотрим позже.
Если на какой то кошелёк пришло 5 + 3 BTC, а он хочет перевести только 6 BTC, то ему придется использовать полностью транзакции: 5 + 3 = 8 и отправить две: 6 BTC тому кому платит и 2 BTC сдачи назад себе.
#введение
Кратко транзакция это:
кошелёк 1 отправил 10 BTC в кошелёк 2
Сумма доступных монет для конкретного адреса в сети неизвестна. Она вычисляется на основе истории транзакций.На самом деле все сложнее. На картинке структура транзакции в Биткойн сети.
- Inputs - это транзакции из сети с previous output hash, которыми данный адрес может распоряжаться. Т.е. которые пришли ему.
- Outputs - это то куда он хочет отправить активы, адресов может быть несколько. Где value - это сумма монет.
- Signature script и public key script - это команды для сети, которые рассмотрим позже.
Если на какой то кошелёк пришло 5 + 3 BTC, а он хочет перевести только 6 BTC, то ему придется использовать полностью транзакции: 5 + 3 = 8 и отправить две: 6 BTC тому кому платит и 2 BTC сдачи назад себе.
#введение
🔥2👍1
В блокчейн сети нету единого центра, авторитета. Но для записи блока в блокчейн сеть должна прийти к консенсусу.
Проблема формулируется, как задача византийских генералов. Генералы посылают гонцов с данными о количестве своих войск другим генералам. Как генералы могут прийти к общему результату, если часть из них могут сознательно искажать данные? Существующие алгоритмы решения задачи показывают, что сеть может функционировать правильно, если мошенников меньше 1/3.
Ясно, что нам нужно определить большинство голосов, чтобы сказать эта транзакция/блок или цепочка являются правдивыми или нет. Но как это сделать в анонимном мире, где 1 злоумышленник может создать большое количество псевдонимов и использовать их для получения непропорционально большого влияния? Это называется атака Сивиллы.
Для предотвращения атаки Сивиллы и решения задачи византийских генералов - в блокчейн придумали алгоритмы вроде: Proof Of Work - он же майнинг, proof of stake, proof of capacity и другие.
#введение
Проблема формулируется, как задача византийских генералов. Генералы посылают гонцов с данными о количестве своих войск другим генералам. Как генералы могут прийти к общему результату, если часть из них могут сознательно искажать данные? Существующие алгоритмы решения задачи показывают, что сеть может функционировать правильно, если мошенников меньше 1/3.
Ясно, что нам нужно определить большинство голосов, чтобы сказать эта транзакция/блок или цепочка являются правдивыми или нет. Но как это сделать в анонимном мире, где 1 злоумышленник может создать большое количество псевдонимов и использовать их для получения непропорционально большого влияния? Это называется атака Сивиллы.
Для предотвращения атаки Сивиллы и решения задачи византийских генералов - в блокчейн придумали алгоритмы вроде: Proof Of Work - он же майнинг, proof of stake, proof of capacity и другие.
#введение
👍3
Майнинг - это деятельность по поддержанию распределенной сети и созданию новых блоков с возможностью получить вознаграждение в форме эмитированной валюты и комиссионных сборов.
Самый известный и первый вариант поддержания сети - придумали создатели Bitcoin - это proof of work.
Все майнеры одновременно пытаются решить одну и туже задачу:
1. Проверить что блок "корректный" - эта операция мгновенная.
2. Попытаться быстрее всех подобрать правильный параметр nonce, чтобы хеш от блока удовлетворял условиям задачи.
3. Если майнер успел быстрее всех то он получает награду в виде coinbase transaction.
Пункт 2 - это proof of work - специальная сложная математическая задача, чтобы доказать что у майнера есть мощный компьютер.
Математическая задача имеет специально такую сложность, чтобы на ее решение уходило 10 минут.
Если мощностей у майнеров становиться больше, то время на ее решение уменьшается и алгоритм, каждые 2016 блоков пересматривает сложность задачи, чтобы она вновь занимала 10 минут.
#введение
Самый известный и первый вариант поддержания сети - придумали создатели Bitcoin - это proof of work.
Все майнеры одновременно пытаются решить одну и туже задачу:
1. Проверить что блок "корректный" - эта операция мгновенная.
2. Попытаться быстрее всех подобрать правильный параметр nonce, чтобы хеш от блока удовлетворял условиям задачи.
3. Если майнер успел быстрее всех то он получает награду в виде coinbase transaction.
Пункт 2 - это proof of work - специальная сложная математическая задача, чтобы доказать что у майнера есть мощный компьютер.
Математическая задача имеет специально такую сложность, чтобы на ее решение уходило 10 минут.
Если мощностей у майнеров становиться больше, то время на ее решение уменьшается и алгоритм, каждые 2016 блоков пересматривает сложность задачи, чтобы она вновь занимала 10 минут.
#введение
👍1🤬1👌1
Новый блок майнится или генерируется за 10 минут. Однако, когда майнер создает новый блок, он начинает его передачу другим узлам (пирам) в сети по p2p протоколу. Эти узлы затем передают блоки друг другу, и таким образом, блок в течении нескольких секунд распространяется по всей планете.
Если новый блок найдут одновременно 2 независимых майнера, появится 2 версии блоков. Они распространят свою версию блоков на пол мира, куда успеют. Каждый узел будет придерживаться своей версии блокчейна. Это называется Fork. (рис 1)
Но как только любой из майнеров найдет следующий блок - все узлы возьмут самую длинную версию блокчейна. Красный блок будет забыт, его называют orphaned. (рис 2)
Транзакции что попали в красный, скорее всего на 95% повторяли транзакции зеленого блока. Но даже если их исполнение отменилось, они попадут назад в мемпул и в любом случае окажутся в блокчейне.
Бывают ситуации, когда ветвление случается больше чем на 1 блок. За всю историю 1 раз осиротевшая цепочка была из 4 блоков.
#введение
Если новый блок найдут одновременно 2 независимых майнера, появится 2 версии блоков. Они распространят свою версию блоков на пол мира, куда успеют. Каждый узел будет придерживаться своей версии блокчейна. Это называется Fork. (рис 1)
Но как только любой из майнеров найдет следующий блок - все узлы возьмут самую длинную версию блокчейна. Красный блок будет забыт, его называют orphaned. (рис 2)
Транзакции что попали в красный, скорее всего на 95% повторяли транзакции зеленого блока. Но даже если их исполнение отменилось, они попадут назад в мемпул и в любом случае окажутся в блокчейне.
Бывают ситуации, когда ветвление случается больше чем на 1 блок. За всю историю 1 раз осиротевшая цепочка была из 4 блоков.
#введение
🔥2👍1
Proof of stake (PoS) - это механизм для обеспечения консенсуса и поддержания безопасности сети. Вместо того чтобы требовать вычислительную мощность для решения сложных задач, как в Proof Of Work (PoW), стейкинг требует от участников блокчейн сети владеть определенным количеством монет (стейка) и участвовать в процессе голосования или создания блоков.
Владельцы монет, участвующие в стейкинге, получают вознаграждения в виде новых монет или комиссий за транзакции. За некорректное поведения или за пропуск слота предусмотрен штраф - называется slashing.
В PoS время создание блока не ограничено физически, поэтому:
- правило выбора чейна не может полагаться на "самую длинную цепочку", в PoS этот механизм значительно сложнее.
- стабильные интервалы между блоками заданы константой, и могут быть обеспечены в виде эпох и слотов. Эпоха - это определенное количество блоков или времени, а слот - это небольшой временной интервал внутри эпохи, в течение которого валидатор должен создать блок.
#введение
Владельцы монет, участвующие в стейкинге, получают вознаграждения в виде новых монет или комиссий за транзакции. За некорректное поведения или за пропуск слота предусмотрен штраф - называется slashing.
В PoS время создание блока не ограничено физически, поэтому:
- правило выбора чейна не может полагаться на "самую длинную цепочку", в PoS этот механизм значительно сложнее.
- стабильные интервалы между блоками заданы константой, и могут быть обеспечены в виде эпох и слотов. Эпоха - это определенное количество блоков или времени, а слот - это небольшой временной интервал внутри эпохи, в течение которого валидатор должен создать блок.
#введение
🔥4
Смарт-контракт - это программа, которая выполняется автоматически в блокчейне. Она позволяет автоматизировать сделки в децентрализованной среде.
Исходный код смарт контракта после написания компилируется в байт-код. Который помещается в специальное поле транзакции и публикуется в блокчейне.
В отличии от обычной программы смарт контракт имеет ряд свойств:
• После публикации в блокчейне, его код нельзя поменять, обновить или откатить.
• Исходный код или, по крайней мере, байт-код виден в сети любому желающему.
• Контракт при вызове, выполняется сразу на всех узлах сети, сверяя результат.
• Не предназначены для выполнения вычислительно сложных операций и хранения большего объема данных.
• Могут взаимодействовать с данными только внутри блокчейн среды. Например, нельзя напрямую узнать текущий курс валют.
• Можно генерировать только псевдослучайные числа. Одинаковые входные данные всегда должны давать одинаковый результат.
• Смарт контракт может вызвать другие, ранее опубликованные смарт контракты.
#введение
Исходный код смарт контракта после написания компилируется в байт-код. Который помещается в специальное поле транзакции и публикуется в блокчейне.
В отличии от обычной программы смарт контракт имеет ряд свойств:
• После публикации в блокчейне, его код нельзя поменять, обновить или откатить.
• Исходный код или, по крайней мере, байт-код виден в сети любому желающему.
• Контракт при вызове, выполняется сразу на всех узлах сети, сверяя результат.
• Не предназначены для выполнения вычислительно сложных операций и хранения большего объема данных.
• Могут взаимодействовать с данными только внутри блокчейн среды. Например, нельзя напрямую узнать текущий курс валют.
• Можно генерировать только псевдослучайные числа. Одинаковые входные данные всегда должны давать одинаковый результат.
• Смарт контракт может вызвать другие, ранее опубликованные смарт контракты.
#введение
👍4
Fungible Token
Смарт контракт помимо выполнения кода, может хранить данные в блокчейне.
Если эти данные представить как таблицу (_balances) с адресом кошелька и балансом, то мы получим учет некой цифры для каждого адреса.
По сути, передача активов (метод transfer) - это уменьшить цифру у одного адреса и добавить другому в таблице _balances.
Блокчейн со смарт-контрактами позволяют создать валюту внутри криптовалюты. Такие цифровые балансы называют токенами.
Для того чтобы другие смарт контракты могли взаимодействовать с любыми токенами - придумали стандарт, например, в Ethereum - ERC-20. Другими словами - это интерфейс, который должен реализовывать каждый токен.
Смарт контракт в EVM (Ethereum Virtual Machine) - подобных сетях может взаимодействовать с токенами пользователя, только забирая их самостоятельно (метод transferFrom). Поэтому владелец токенов сначала должен предоставить разрешение, используя метод approve, указав адрес, который может перемещать токены от его имени.
#введение
Смарт контракт помимо выполнения кода, может хранить данные в блокчейне.
Если эти данные представить как таблицу (_balances) с адресом кошелька и балансом, то мы получим учет некой цифры для каждого адреса.
По сути, передача активов (метод transfer) - это уменьшить цифру у одного адреса и добавить другому в таблице _balances.
Блокчейн со смарт-контрактами позволяют создать валюту внутри криптовалюты. Такие цифровые балансы называют токенами.
Для того чтобы другие смарт контракты могли взаимодействовать с любыми токенами - придумали стандарт, например, в Ethereum - ERC-20. Другими словами - это интерфейс, который должен реализовывать каждый токен.
Смарт контракт в EVM (Ethereum Virtual Machine) - подобных сетях может взаимодействовать с токенами пользователя, только забирая их самостоятельно (метод transferFrom). Поэтому владелец токенов сначала должен предоставить разрешение, используя метод approve, указав адрес, который может перемещать токены от его имени.
#введение
👍2🤯1
Невзаимозаменяемый токен (NFT) используется для уникальной идентификации чего-либо. Если взаимозаменяемые токены это как деньги в реальном мире, то NFT больше похожи на коллекционные монеты.
ERC-721 представляет собой стандарт NFT в EVM блокчейнах, где все NFT имеют переменную типа uint256 с именем tokenId, поэтому, для любого контракта ERC-721 пара "адрес контракта, uint256 tokenId" должна быть уникальной.
Наиболее часто NFT используется в блокчейне для утилитарных задач. Зачастую, пользователи не знают, что они владеют NFT, например, предоставляя ликвидность в uniswap v3. Широкому обществу чаще известно о произведениях искусства в виде NFT.
Есть 3 варианта как связать арт искусства с токеном:
1. С токеном NFT в том же блокчейне. Примеры реализаций: AutoGlyphs, Chainfaces. Это дорого, но арт будет жить столько же времени сколько блокчейн.
2. В другом блокчейне или децентрализованном хранилище, например технология IPFS.
3. На частном или централизованном сервере. Самый ненадежный вариант.
#введение
ERC-721 представляет собой стандарт NFT в EVM блокчейнах, где все NFT имеют переменную типа uint256 с именем tokenId, поэтому, для любого контракта ERC-721 пара "адрес контракта, uint256 tokenId" должна быть уникальной.
Наиболее часто NFT используется в блокчейне для утилитарных задач. Зачастую, пользователи не знают, что они владеют NFT, например, предоставляя ликвидность в uniswap v3. Широкому обществу чаще известно о произведениях искусства в виде NFT.
Есть 3 варианта как связать арт искусства с токеном:
1. С токеном NFT в том же блокчейне. Примеры реализаций: AutoGlyphs, Chainfaces. Это дорого, но арт будет жить столько же времени сколько блокчейн.
2. В другом блокчейне или децентрализованном хранилище, например технология IPFS.
3. На частном или централизованном сервере. Самый ненадежный вариант.
#введение
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
P2P (Peer-to-Peer) - это архитектурная модель сети, в которой участники (пиры) взаимодействуют напрямую друг с другом, без центрального сервера. Этот децентрализованный подход позволяет обмениваться данными и ресурсами между пирами непосредственно.
В отличие от клиент-серверной модели, узлу невозможно достичь другой узел, если у последнего нет публичного адреса и он скрыт за NAT. Для обхода NAT в P2P используются такие протоколы и техники как: Hole Punching, UPnP, STUN, NAT-PMP.
На гифке: при первом подключении клиенту или узлу не известно ни одного другого узла, поэтому он запрашивает информацию у DNS seeds. Это изначально предопределенные надежные блокчейн узлы или просто серверы, которые после первого подключения предоставят информацию об остальных узлах.
Однако, не все криптовалютные кошельки используют прямые P2P-соединения. Многие клиенты подключаются к центральному серверу, который, в свою очередь, может быть связан с узлами блокчейн-сети. Это сильно ускоряет работу кошелька.
#технологии
В отличие от клиент-серверной модели, узлу невозможно достичь другой узел, если у последнего нет публичного адреса и он скрыт за NAT. Для обхода NAT в P2P используются такие протоколы и техники как: Hole Punching, UPnP, STUN, NAT-PMP.
На гифке: при первом подключении клиенту или узлу не известно ни одного другого узла, поэтому он запрашивает информацию у DNS seeds. Это изначально предопределенные надежные блокчейн узлы или просто серверы, которые после первого подключения предоставят информацию об остальных узлах.
Однако, не все криптовалютные кошельки используют прямые P2P-соединения. Многие клиенты подключаются к центральному серверу, который, в свою очередь, может быть связан с узлами блокчейн-сети. Это сильно ускоряет работу кошелька.
#технологии
👍1🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
Gossip - алгоритм распространения транзакций
Для обмена сообщениями в большинстве блокчейнов за основу взят протокол Gossip, где каждый узел периодически обменивается информацией с несколькими случайно выбранными соседними узлами. (Рисунок)
Каждое сообщение распространяется от узла к узлу определенное количество раз, получается что-то наподобие волн.
Видя как транзакция распространяется такими волнами, можно деанонимизировать источник транзакции. Поэтому протокол был прокачан такими приемами как:
- Diffusion - где вместо немедленной массовой рассылки каждому узлу, клиент выжидает случайную задержку, прежде чем передать сообщение каждому из своих соседей.
- Dandelion Protocol (одуванчик) - здесь, если узел получил новую транзакцию, он не распространяет ее своим соседям сразу, а передает только одному, тот в свою очередь другому. После случайного количества прыжков конечный узел сообщит о транзакции уже всем.
Больше картинок здесь.
#технологии
Для обмена сообщениями в большинстве блокчейнов за основу взят протокол Gossip, где каждый узел периодически обменивается информацией с несколькими случайно выбранными соседними узлами. (Рисунок)
Каждое сообщение распространяется от узла к узлу определенное количество раз, получается что-то наподобие волн.
Видя как транзакция распространяется такими волнами, можно деанонимизировать источник транзакции. Поэтому протокол был прокачан такими приемами как:
- Diffusion - где вместо немедленной массовой рассылки каждому узлу, клиент выжидает случайную задержку, прежде чем передать сообщение каждому из своих соседей.
- Dandelion Protocol (одуванчик) - здесь, если узел получил новую транзакцию, он не распространяет ее своим соседям сразу, а передает только одному, тот в свою очередь другому. После случайного количества прыжков конечный узел сообщит о транзакции уже всем.
Больше картинок здесь.
#технологии
👍3