klim1994

klim1994

Пикабушник
поставил 20213 плюсов и 705 минусов
отредактировал 7 постов
проголосовал за 9 редактирований
Награды:
10 лет на Пикабу
22К рейтинг 63 подписчика 5448 комментариев 57 постов 9 в горячем
6

Перлы из уличных интервью

29

Вся боль авиамоделистов в одном видео

107

Немного не учёл

Извините за надпись на пол-экрана

Таврида-арт

Сейчас отдыхаю в Судаке и попала в руки такая брошюрка.
@pikabu, а расскажите нам о спонсорстве мероприятия. Зачем оно, какие подводные камни?

Таврида-арт Таврида, Спонсор, Крым, Фестиваль, Пикабу
Показать полностью 1

Пикабу последние 2 месяца

Пикабу последние 2 месяца

Ушла эпоха, земля пухом

57

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ]

Основы: зачем нам блокчейн?


Блокчейн был описан в статье Сатоши Накамото «Bitcoin: A Peer-to-Peer Electronic Cash System». Там всего на восьми страницах автор описал основы криптовалюты Биткоин, в основе которой лежал как раз алгоритм Блокчейна.

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

Список, который нельзя изменить


Блокчейн — цепочка блоков или другими словами связный список. В таком списке каждая следующая запись ссылается на одну предыдущую и так по цепочке до самой первой. Как вагоны поезда, каждый тащит за собой следующий. По поводу списков есть годная статья Никиты Лихачева на TJ, где то же самое объяснено для совсем новичков. Аналогии отчасти взяты оттуда.

Разберем на примере.

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Теперь Олег всегда может подойти к доске и убедиться, что Макс всё вернул, а вот Ваня не отдает уже 700 рублей. Однажды Олег приглашает Ваню выпить к себе домой. Пока Олег отходит в туалет, Ваня стирает запись «Занял Ване 200 рублей» и вписывает вместо неё «Ваня отдал 500 рублей».

Доверявший своему списку Олег забывает про долг и теряет 700 рублей. Он решает как-то с этим бороться.

В прошлом году Олег ходил на курсы по программированию, где ему рассказали про хеширование. Он помнит, что любую строку можно превратить в однозначный набор символов — хеш, и изменение любого символа строки полностью изменит его.
Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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

Олег берет общеизвестный хеш SHA-256 и хеширует им каждую запись, дописывая результат в конце. Теперь Олег может удостовериться, что его записи никто не изменял, захешировав их заново и сравнив с зелёненьким.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Но ЗЛОЙ РЮСЬКИЙ ИВАН тоже умеет в SHA-256 и легко может изменить запись вместе с её хешем. Особенно, если хеш написан прямо рядом на доске.

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Так у Олега появляется личный связный список.


Но однажды Иван прокрадывается ночью, изменяет нужную ему запись и обновляет хеши для всего списка до конца. У него это занимает несколько часов, но Олег всё равно крепко спит и не слышит. На утро Олег обнаруживает абсолютно верный список — все хеши совпадают. Но Иван всё равно его обманул, хоть и потратил на это бессонную ночь. Как еще можно защититься от Ночного Ивана?

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

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

Зато проверить список всё так же просто: сначала нужно как раньше сравнить хеши, а потом проверить решения уравнений простой подстановкой. Если всё сходится — список не изменен.

В реальности же с уравнениями не всё так хорошо: компьютеры слишком хорошо их решают, да и где хранить столько уникальных уравнений. Потому авторы блокчейна придумали более красивую задачу: нужно найти такое число (nonce), чтобы итоговый хеш всей записи начинался на 10 нулей. Такой nonce сложно найти, зато результат всегда можно проверить просто глазами.


Теперь Олег сверяет все хеши и дополнительно убеждаются, чтобы каждый начинался на оговоренное количество нулей. Хитрый Иван, даже вооружившись мощным ноутбуком, не успеет за ночь пересчитать все хеши так, чтобы они удовлетворяли условию — не хватит времени.

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Централизация доверия


Идея вести неподделываемый список «кто кому занимал» понравилась нашим друзьям. Они тоже не хотят запоминать кто за кого заплатил в баре и сколько еще остался должен — всё записано на стене. Вы обсудили идею и решили, что теперь вам нужен единый список на всех.

Но кому доверить вести столь важную бухгалтерию? Ведь когда дело касается денег — доверие выходит на первый план. Мы не доверим хранить свои деньги неизвестному. Наши предки для этого придумали банки, которым со временем стали доверять, потому что они подкреплёны лицензией, законами и страховкой Центрального Банка.

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Децентрализация: никто не доверяет никому


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

Минусом такого подхода является то, что для внесения новых записей придется обзванивать всех остальных участников и сообщать каждому из них свежие изменения. Но если эти участники — бездушные машины, это перестаёт быть хоть какой-то проблемой.

В такой системе не существует единой точки доверия, а значит и возможности подкупа и жульничества. Все участники системы действуют согласно единому правилу: никто не доверяет никому. Каждый верит только той информации, которой располагает сам. Это главный закон любой децентрализованной сети.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Транзакции


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

Наши записи типа «Занял Ване 500 рублей» — тоже транзакции. Но у нас нет банка, авторизующего автора транзакций. Как нам проверить, что Иван втихую не добавил запись «Макс должен Олегу 100500 рублей»?

В блокчейне для этого используется механизм публичных и приватных ключей, айтишники давно используют их для авторизации в том же SSH. Коротко о том, как работает эта сложная, но красивая математика: вы у себя на компьютере генерируете пару длинных простых чисел — публичный и приватный ключ. Приватный ключ считается супер-секретным, потому что может расшифровать то, что зашифровано публичным. Но наоборот тоже работает. Если вы расскажете публичный ключ всем друзьям, они смогут зашифровать им любое сообщение так, что прочитать его сможете только вы, так как владеете приватным. Но кроме этого у публичного ключа есть полезный эффект — с помощью него можно проверить, что данные были зашифрованы именно вашим приватным ключом, не расшифровывая при этом сами данные.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Простым пользователям, не желающим разбираться как выпускать и хранить приватные ключи, помогут сервисы онлайн-кошельков. Чтобы копировать длинные публичные ключи, там делают удобные QR-коды. Лично я пользуюсь Blockchain Wallet, потому что у него есть удобное мобильное приложение и он поддерживает две главные криптовалюты — BTC и ETH. Отсутствие понятия «баланса»

Мы находимся в децентрализованном интернете, где никому нельзя доверять. Транзакция подписывается приватным ключом и вместе с публичным ключом отсылается в специальное хранилище — пул неподтвержденных транзакций. Так любой участник сети может проверить, что именно вы были её инициатором, а не кто-то еще хочет расплатиться вашими деньгами.

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

Ваш публичный ключ и является номером крипто-кошелька. То есть вы можете завести кошелек любой криптовалюты вообще не выходя в сеть.

Отсутствие понятия «баланса»


Как и наша доска, блокчейн по сути состоит только из истории транзакций. Он не хранит баланс каждого кошелька, иначе бы нам пришлось изобретать дополнительные способы защиты.

Владение кошельком подтверждает только приватный ключ. Но как другие участники сети убедятся, что у меня есть достаточно денег для покупки?

Раз у нас нет баланса — это должны доказывать вы. Потому в транзакцию блокчейна входит не только ваша подпись и сколько вы хотите потратить, но и ссылки на предыдущие транзакции, в которых вы получили нужное количество денег. То есть если вы хотите потратить 400 рублей вы пробегаете по всей своей истории доходов и расходов, и прикрепляете к своей транзакции те доходы, где вам дали 100 + 250 + 50 рублей, тем самым доказывая, что у вас есть эти 400 рублей.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Каждый участник сети еще раз обязательно проверит, что вы не прикрепляли доходы дважды. Что те 300 рублей, что дал Макс на прошлой неделе, вы действительно еще не потратили.

Такие прикрепленные к транзакции доходы в блокчейне называются инпутами (input), а все получатели денег — аутпутами (output). Сумма всех инпутов редко бывает ровно такой, сколько вы хотите перевести за раз — потому один из аутпутов чаще всего будете вы сами. Другими словами транзакция в блокчейне выглядит как «мне дали 3 и 2 BTC, я хочу из них перевести 4 BTC и оставшийся 1 BTC вернуть себе обратно».

Забегая немного вперед: дополнительно из этой «сдачи» еще можно указать комиссию за транзакцию, чтобы майнеры активнее её добавляли в блоки. Тогда майнер получит копеечку, а вы немного меньше сдачи назад. О майнинге рассказано ниже.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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

Однако если вы потеряете свой приватный ключ, ваш диск умрет или украдут ноутбук, ваши биткоины будут потеряны навсегда. Никто не сможет использовать их в качестве инпутов для новых транзакций. Эта сумма будет недоступна для всего мира навсегда — как если бы вы сожги пачку банкнот. Здесь нет единого банка, куда можно написать заявление с копией паспорта, и он еще напечатает. Для этого нужен еще дополнительный выпуск новых биткоинов «из воздуха».


Проблема двойной траты


Выше я сказал, что транзакции добавляются в специальный «пул неподтвержденных транзакций». Зачем нам какая-то промежуточная сущность, если у нас уже есть по сути готовые подписанные транзакции? Почему не писать их сразу в блокчейн?

Потому что сигналы из пункта А в пункт Б всегда идут с задержкой. Две транзакции могут пойти абсолютно разными путями. И транзакция, которая была инициирована первой, может дойти до получателя позже, потому что шла более длинным путём. Так получается двойное расходование, когда одни и те же деньги были отправлены сразу двум адресатам, о чем они даже не догадаются. Это вам не купюры из рук в руки передавать.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Для децентрализованной сети, в которой никому нельзя доверять, эта проблема стоит особенно остро. Вот как вы убедитесь, что одна транзакция точно была раньше другой? Попросите отправителя вшивать в неё время отправки, не так ли? Но вспомните — никому нельзя доверять, даже отправителю. Время на всех компьютерах обязательно будет отличаться и нет способа их гарантировано синхронизировать. Копия блокчейна хранится на каждом компьютере сети и каждый участник доверяет только ей.

Как же убедиться, что одна транзакция была раньше другой?

Ответ прост: это невозможно. Нет способа подтвердить время транзакции в децентрализованной сети. И вот в решении этой проблемы и заключается третья важная идея блокчейна, которую придумал Сатоши и которая, как ни странно, прописана прям в его названии — блоки.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Блоки — основа блокчейна


Каждый работающий компьютер в сети выбирает из общего пула любые транзакции, которые ему нравятся. Обычно просто по самой высокой комиссии, которую он может на ней заработать. Так он набирает себе транзакции, пока их суммарный размер не достигнет обговорённого лимита. В Биткоине этот лимит на размер блока равен 1 Мб (после SegWit2x будет 2 Мб), а в Биткоин Кеше — 8 Мб.


А вот в сетях типа Ethereum всё немного сложнее, там количество транзакций на блок зависит от вычислительной сложности включенных в них смарт-контрактов. Но суть не меняется — есть определенный лимит.


Весь блокчейн по сути и есть список таких блоков, где каждый ссылается на предыдущий. По нему можно отследить любую транзакцию за всю историю, разматывая блокчейн хоть до самой первой записи. Именно этот список и весит сейчас сотни гигабайт и должен быть полностью скачан на все компьютеры, которые хотят принимать участие в работе сети (но чтобы просто создавать транзакции и переводить деньги, это не обязательно). Скачивается он так же со всех ближайших компьютеров сети, как будто вы качаете сериал с торрентов, только новые новые серии в нём выходят каждые 10 минут.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Набрав себе транзакций из пула компьютер начинает составлять из них такой же неподделываемый список, как мы в начале поста на доске у себя дома. Только делает он его в виде дерева — хеширует записи попарно, потом результат еще раз попарно и так пока не останется лишь один хеш — корень дерева, который и добавляется в блок. Почему именно деревом — ответа я не нашел, но предполагаю, что так просто быстрее. Подробнее есть на вики: Дерево Меркла.


Почему именно дерево. Потому что появляется возможность удалять ненужные (потраченные) транзакции из блока. Т.е. например есть две транзакции, объединённые хэшом, одна или обе уже не нужны т.к. это уже всё давно отдано другими транзакциями - так вот эти старые можно удалить, а хэш оставить, в итоге ничего не нарушается. См.пункт "7. Reclaiming Disk Space" в оригинальной статье Сатоши.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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

Остальные должны проверить, что блок построен по всем правилам и что мы не добавили туда лишних транзакций, а затем добавить к себе в цепочки. Теперь все транзакции в нём подтверждены, блокчейн увеличен на один блок и всё идет хорошо, не так ли?

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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


Как в школе, когда все решали сложную контрольную, очень редко бывало так, что даже отличники сдавали ответы абсолютно одновременно.

Но если для человека сложная задача — это спланировать отпуск, чтобы и на майские праздники попал, и билеты на море недорого, то для компьютера — это добавить в конец блока такое число (nonce), чтобы в результате хеш SHA-256 для всего блока начинался, скажем, на 10 нулей. Это и есть та задача, которую надо решить, чтобы добавить блок в сеть Bitcoin. Для других сетей задачи могут отличаться.

Так мы приходим к понятию майнинга, на котором все так помешаны в последние годы.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Майнинг


Майнинг биткоина — не какое-то там священное таинство. Майнинг не связан с поиском новых биткоинов где-то в глубинах интернета. Майнинг — это когда тысячи компьютеров по всему миру гудят по подвалам, перебирая миллионы чисел в секунду, пытаясь подобрать хеш, начинающийся на 10 нулей. Им даже не обязательно для этого находиться в сети.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Видеокарты с их сотнями параллельных ядер, решают эту задачу быстрее любого CPU.



Почему именно на 10 нулей? А просто так, в этом нет никакого смысла. Так придумал Сатоши. Потому что это одна из тех задач, на которую точно всегда есть решение, но оно точно не может быть найдено быстрее, чем долгим монотонным перебором вариантов.

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

Чтобы найти начинающийся на 10 нулей хеш, у одного компьютера уйдет несколько десятков лет. Но если объединить тысячи компьютеров в единую сеть и искать параллельно, то по теории вероятностей эта задача решается в среднем за 10 минут. Это и есть время появления нового блока в блокчейне биткоина. Каждые 8-12 минут кто-то на земле находит такой хеш и получает привилегию анонсировать свою находку на всех, избежав тем самым проблемы кто был первым.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

За нахождение ответа компьютер (по данным на 2017 год) получает 12.5 BTC — это сумма вознаграждения, которая генерируется системой биткоин «из воздуха» и уменьшается каждые четыре года. Технически это означает, что каждый майнер всегда добавляет в свой блок еще одну транзакцию — «создать 12.5 BTC и отправить их на мой кошелек». Когда вы слышите «количество биткоинов в мире ограничено 21 млн, сейчас наймайнили уже 16 млн» — это и есть такие генерируемые сетью вознаграждения.


Сходите посмотрите на настоящий живой блок Биткоина на одном из специальных сайтов. Там есть и транзакции с инпутами и аутпутами, и аж 18 нулей в начале и все описанные выше хеши.


Любой блокчейн существует только пока существуют его майнеры.


Именно майнеры добавляют появляющиеся транзакции в блокчейн. Так что если кто-то рассказывает вам, что он «сделает блокчейн для ***», первый вопрос, на который он должен ответить — кто и зачем будет майнить на нём. Чаще всего правильный ответ — «будут все, потому что за майнинг мы даём наши коины, которые будут расти и майнерам это выгодно». Но это применимо не для всех проектов. Например какой-нибудь Минздрав завтра создает свой закрытый блокчейн для докторов (а они хотят), кто его будет майнить? Терапевты по выходным?


Но какая выгода майнерам будет потом, когда вознаграждения исчезнут или станут мизерными?

По задумке Создателя, к тому времени люди должны будут поверить в реальность биткоина и майнинг начнет окупаться суммой комиссий, включенных в каждую транзакцию. К этому всё и идет: еще в 2012 году все комиссии были нулевые, майнеры майнили только за вознаграждения от блоков. Сегодня же транзакция с нулевой комиссией может провисеть в пуле несколько часов, потому что появилась и конкуренция, и люди готовы платить за скорость.


То есть суть майнинга в решешии бессмысленных задачек. Разве нельзя пустить все эти мощности на что-то более полезное — поиск лекарства от рака, например?

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

Но задача должна быть одновременно и сложной, чтобы ответ не нашли сразу все пользователи сети. Потому что в таком случае они анонсируют в сеть много блоков с одинаковыми транзакциями и будет вероятность «двойной растраты», о которой я говорил. Или еще хуже — разделения единого блокчейна на несколько веток, в которых уже никто не сможет разобраться какая транзакция подтверждена, а какая нет.


Для биткоина именно так. Но так было не всегда. Раньше сеть была меньше, сложность ниже, а значит и выше вероятность единолично найти хеш для нового блока. Но и биткоин тогда стоил не так дорого.

Сейчас биткоины в одиночку уже никто не майнит. Теперь участники объединяются в специальные группы — майнинг пулы, где все вместе пытаются найти правильный хеш. Если хоть один из группы находит, то всё вознаграждение делится между участниками в зависимости от их вклада в общую работу. Получается, что ты майнишь и тебе еженедельно падает копеечка от общей доли.

Но одиночный майнинг вполне возможен в других сетях. Вот еще недавно было легко майнить Ethereum, где блоки находятся каждые 10 секунд. Вознаграждение за блок там намного ниже, но вероятность заработать копеечку получается выше.

Значит мы так и будем сжигать тысячи видеокарт впустую и никакого выхода нет?


Если награда в 12.5 BTC вручается лишь раз в 10 минут и только одному нашедшему блок, получается мне надо впустую жечь видеокарты несколько лет в надежде, что однажды мне упадет $40000 (по текущему курсу)?

Для биткоина именно так. Но так было не всегда. Раньше сеть была меньше, сложность ниже, а значит и выше вероятность единолично найти хеш для нового блока. Но и биткоин тогда стоил не так дорого.

Сейчас биткоины в одиночку уже никто не майнит. Теперь участники объединяются в специальные группы — майнинг пулы, где все вместе пытаются найти правильный хеш. Если хоть один из группы находит, то всё вознаграждение делится между участниками в зависимости от их вклада в общую работу. Получается, что ты майнишь и тебе еженедельно падает копеечка от общей доли.

Но одиночный майнинг вполне возможен в других сетях. Вот еще недавно было легко майнить Ethereum, где блоки находятся каждые 10 секунд. Вознаграждение за блок там намного ниже, но вероятность заработать копеечку получается выше.

Значит мы так и будем сжигать тысячи видеокарт впустую и никакого выхода нет?

Да, но есть идеи. Тот майнинг, что я описал, является классическим и называется Proof-of-Work (доказательство работы). То есть каждая машина доказывает, что она работала на благо сети тем, что решает бессмысленные задачки с заданной вероятностью.

Но некоторые ребята начинают делать блокчейны с другими видами майнинга. Сейчас вторая по популярности концепция — это Proof-of-Stake (доказательство доли владения). В таком виде майнинга, чем больше «коинов» на счету у участника сети, тем больше его вероятность вставить в блокчейн свой блок. Как самый громкий парень на деревне.

Можно придумать и другие виды майнинга. Как уже предлагали, все компьютеры в сети могут искать лекарство от рака, только нужно придумать как в таком случае зафиксировать их вклад в систему. Ведь я могу заявить, что я тоже участвую, но отключить свою видеокарту и ничего не считать. Как выразить количественный вклад каждого участника в поиск лекарства от рака? Придумаете — дерзайте пилить свой CancerCoin, хайп в СМИ вам обеспечен.


Блокчейн

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

Теперь у нас есть два валидных блока и снова возникает проблема кого считать первым. Как поведет себя сеть в таком случае?

В алгоритме блокчейна прописано, что участники сети просто принимают первый правильный ответ, который до них дошел. Дальше они живут исходя из собственной картины мира. Оба майнера получат своё вознаграждение, а все остальные начинают майнить, опираясь на последний ими лично полученный блок, отбрасывая все остальные повторно-верные. В сети появляется две версии правильного блокчейна. Такой вот парадокс.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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

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

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

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Из-за этого были придуманы три правила безопасности хвоста блокчейна (end of chain insecurity):

1. Вознаграждениями за майнинг, можно пользоваться только спустя еще 20 подтвержденных блоков после получения. Для биткоина это около трёх часов.


2. Если вам переслали биткоины, использовать их в качестве инпутов в новых транзакциях можно только спустя 1-5 блоков.


3. Правила 1 и 2 всего лишь прописаны в настройках каждого клиента. Никто не следит за их соблюдением. Но закон о самой длинной цепочке всё равно уничтожит все ваши транзакции, если вы попытаетесь обмануть систему, не соблюдая их.



Пытаемся обмануть блокчейн


Теперь, когда вы знаете всё о майнинге, устройстве блокчейна и правиле самой длинной цепочки, у вас мог возникнуть вопрос: а можно ли как-то специально обогнать блокчейн, составив самую длинную цепочку самому, тем самым подтвердив свои фейковые транзакции.

Предположим у вас есть самый мощный компьютер на Земле. Датацентры Google и Amazon вместе взятые в вашем распоряжении и вы пытаетесь просчитать такую цепочку, которая станет самой длинной в сети блокчейн.

Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

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

Если ваша вычислительная мощность будет составлять больше 50% от мощности всех участников сети, то с вероятностью 50% вы сможете построить более длинную цепочку быстрее всех остальных вместе взятых. Это теоретически возможный способ обмануть блокчейн, просчитав более длинную цепочку транзакций. Тогда все транзакции настоящей сети будут считаться неверными, а вы соберете все вознаграждения и начнете новую веху в истории криптовалюты, которая называется «разделение блокчейна». Однажды из-за бага в коде так было с Ethereum.

Но в реальности ни один датацентр не сравнится по мощности со всеми компьютерами в мире. Полтора миллиарда китайцев с айсиками, еще полтора миллиарда голодных индусов с фермами для майнинга и дешевым электричеством — это огромная вычислительная мощность. Никто в мире пока не может составить им конкуренцию в одиночку, даже Google.

Это примерно как выйти на улицу и пытаться убедить каждого человека в мире, что доллар теперь стоит 1 рубль и успеть до того, как в СМИ вас разоблачат. И вот если вы умудритесь убедить всех, то сможете обвалить мировую экономику. В теории ведь это возможно? Но на практике почему-то ни у кого не получалось.

На этой вероятности держится и блокчейн. Чем больше участников-майнеров — тем больше безопасность и доверие сети. Потому когда в Китае накрывают очередную крупную майнинг-ферму, курс и обваливается. Все боятся, что где-то в мире сидел злой гений, который уже собрал пул майнеров на ~49% мощности.


По факту такое было несколько раз годах в 2014-х, когда один из пулов для майнинга временно стал мощнее остальной сети. Но манипуляций тогда замечено не было.
Блокчейн изнутри: как устроен биткоин. Разбираемся раз и навсегда человеческим языком. [ДЛИННОПОСТ] Программирование, IT, Криптовалюта, Биткоины, Блокчейн, Ethereum, Шифрование, Длиннопост

Заключение


Блокчейн не только для криптовалют


Блокчейн — не строго определенный набор алгоритмов. Это структура построения неподделываемой сети между участниками, где никто никому не может доверять. Во время прочтения наверняка у вас ни раз проскакивала мысль, что «можно же вот так переделать и будет еще полезнее». Это значит, что вы поняли блокчейн, поздравляю.

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


Ethereum


«Эфиры» — второе по популярности слово, которое вы слышите в новостях о криптохайпе, после биткоина. Для обывателей это еще одна криптовалюта и способ делать моднейшую штуку под названием ICO. Разработчики на сайте описывают Ethereum как «конструктор блокчейнов для ваших нужд». Так тоже можно, да.

Но если копнуть еще глубже, эфиры — это не просто сеть с монетками. Это огромная общемировая вычислительная машина, где пользователи исполняют код чужих программ (смарт-контрактов), получая за каждую выполненную строчку вознаграждение. И всё это децентрализованно, неубиваемо и со всеми гарантиями блокчейна.

Но об этом в другой раз.


Источник https://vas3k.ru/blog/blockchain/


Показать полностью 22
707

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ]

Сегодня поговорим о квантовых компьютерах. Даже напишем свой Hello World и запустим его на настоящем (!) квантовом компьютере

Квантовая механика — это такой же набор законов природы только для мира очень маленьких частиц — электронов, протонов, фотонов, альтронов... хотя нет, это из Мстителей.

Короче, всех тех штук, из которых мы все состоим.

В начале прошлого века мы внезапно обнаружили, что между ними происходит полная дичь, необъяснимая имевшимися у нас законами физики. Мы нафигачили загадок и парадоксов, о которых все обожают спорить.

Но мы здесь сегодня не для этого.

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

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

Здесь все либо впадают в упрощения с котами, которые «как будто одновременно и там и сям», либо в научную заумь с матрицами прямо на лицо.

Сегодня я попробую свой путь, которым я объясняю это своим интересующимся друзьям.

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

Начнём с первого.

Частицы теперь волны, а не мячики

Время каминг-аута.


Мне 30 лет, а я до сих пор при слове «атомы» и «электроны» представляю их себе как мячики. Молекулы в учебнике по химии всегда были набором мячиков и палочек между ними, а кристаллическая решетка — это когда целая стена из мячиков!

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

В целом, это неплохо работало.

Электрический ток я представлял себе как толпу таких мячиков, несущихся по проводу-трубе. Больше мячиков — значит больше ампер (силы тока), быстрее бегут — больше вольт (напряжение), шире труба — значит меньше сопротивление.

Сам я тоже сделан из таких атомов-мячиков, которые по неведомой мне причине решили притянуться друг другу и образовать такую вот причудливую форму меня. Ну круто же!

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

Мячики, вы лучшие, мы еще вспомним о вас!

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

Волны — это новые мячики

Срач о том, реально ли всё это волны или мы просто натянули имевшиеся для волн уравнения и сказали «опа, а вроде подходит» — один из самых громких споров современных физиков. Там рвут глотки и делятся на лагеря, так что давайте не будем и просто примем, что тот же самый мячик может ВЖУХ и быть посчитан как волна.

Так нам удобно и всё.

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

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Главный же прикол в том, что кроме волн больше нет ничего. Вообще ничего. Никаких скрытых параметров, по крайней мере локальных.

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

Как в телевизор приходят радиоволны и получается картинка на экране, так же наши волнушечки могут собраться по какой-то формуле и сделать Олега. Фотоны света отражатся от волн Олега и так его себе видим.

Но реален ли сам Олег?

ДА, И ТЫ ТОЖЕ ВСЕГО ЛИШЬ НАБОР ВОЛН

Дам вам время подумать над этим. Тут лучше не торопиться. Можете вернуться к посту вечером.

Суперпозиция — всего лишь вероятность

Объясняя, что за фигня такая ваша «суперпозиция», все вспоминают байку с Котом Шредингера, закрытого в коробке со случайно взрывающейся колбой смертельного яда.

Пока мы не откроем коробку, кот для нас как бы ОДНОВРЕМЕННО мертв и жив, потому мы говорим «находится в суперпозиции жизни и смерти».

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

Пора прекратить шутить шутку 100-летней давности. Люди в 21 веке могут себе позволить среднее образование и понять тему чуть глубже.

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

Потому вместо кота мы возьмем монетку :D

Когда мы раскручиваем или подбрасываем её в воздух — она находится в суперпозиции орла и решки. Да, «как бы» одновременно. Только поймав монетку мы получаем один из результатов нашего измерения. Не поймаем — не узнаем. Всё.

В чем же драматическая разница с так нелюбимым нами котом?

В том, что внутри монетки всегда есть чёткие вероятности её падения орлом или решкой. В жизни мы принимаем их за 50% на 50%. Но если мы зададимся целью немного «подкрутить» фокус себе на пользу — мы можем сделать монетку из разных сплавов или как-то притягивать одну из сторон магнитом.

В теории мы можем сделать такую монетку, у которой вероятности выпадания орла и решки будут, скажем, 60% на 40%, что поможет нам чаще побеждать (наверное).

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Отныне всегда, когда слышите про суперпозицию, представляйте себе именно такую подброшенную монетку.

Суперпозиция – не загадочный феномен «одновременности», а чёткое и простое отношение двух вероятностей

Находясь в «суперпозиции», монетка не просто для нас «как бы одновременно орел и решка», она имеет две вполне стабильные и известные нам вероятности выпадения одного и другого.

Да, мы не знаем 100% исход, но можем чётко влиять на него, например, направляя на монетку магнит.

Всё это уже намного удобнее использовать на практике, не правда ли?

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

Поэтому и дальше, когда мы будем говорить о квантовых битах, про которые все говорят, что они «одновременно 1 и 0», забейте на это и представляйте себе их как монетки. Каждый бит-монетка имеет строгую вероятностью быть прочитанным как 1 и строгую вероятность 0. Компьютер же может управлять этими вероятностями прямо в полёте пока не прочитает сам бит.

Прочитали бит — поймали монетку. Очень удобно.

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

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Запутанность — квантовый IF


Чтобы объяснить квантовую запутанность я продолжу аналогию с монеткой, чтобы вас не ЗАПУТАТЬ. Простите, я должен был использовать этот каламбур.

Представим себе, что мы распилили нашу монетку вдоль. Как печеньки Oreo.

Получилось две монетки — одна только с орлом, вторая только с решкой. Пустая сторона разреза нас щас не интересует.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Не подглядывая где какая, мы подбрасываем обе новых монетки в воздух (переводим в суперпозицию, как мы теперь знаем). Монетки начинают вертеться в воздухе и не падают (потому что они теоретические!)

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Тут квантовый физик скажет, что между монетками создана запутанность. Русская терминология лажает, потому лучше дополнительно запомнить английское слово — Entanglement. Оно встречается чаще.

Всё это означает некую «зависимость», «спутанность» или просто «связь» состояний двух монеток.

Как видите, никакой магии пока нет, законы физики мы не нарушали, на митинг не выходили.

Мы упаковываем одну из наших новых прикольных крутящихся монеток в коробку и отправляем её своему знакомому в другой город. А еще лучше на другую планету или в соседнюю галактику.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Теперь мы оба имеем по монетке, но понятия не имеем орел нам достался или решка. Кажется, пришло время посмотреть.

И вот тут обнаруживается ПАРАДОКС.

Следите за руками: в тот момент, когда один из нас открывает коробку, ловит свою монетку и видит, что на ней орёл — вторая монетка за много тысяч километров МОМЕНТАЛЬНО оказывается решкой.

Звучит тупо, да? Но мы на 100% в этом уверены.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Вот только Эйнштейн не был доволен такой фигнёй.

Монетки находились далеко друг от друга, так? Но результат чтения одной моментально повлиял на значение второй, так? Значит мы только что нарушили теорию относительности и передали информацию быстрее скорости света.

Бежиииим...


🚔🚨🚔 Это полиция релятивизма. На этот раз без штрафа, но я выпишу вам предупреждение.


Но есть и хорошие новости: мы научились создавать системы из двух частиц, которые вот так моментально при чтении одной гарантируют нам значение другой.

Мы называем такие половинки «запутанными» друг с другом.

Оказывается, в нашем квантовом компьютере мы тоже можем так «запутывать» между собой биты, что если один покажет 0, второй 100% всегда примет значение 1 и наоборот. Такой вот физически нерушимый IF.

Кубит


Подойдём к настоящим квантовым вычислениям.

Другие статьи в интернете сразу начинают с объяснения кубитов, но мне показалось, что зная три правила выше, нам будет намного проще разговаривать и действительно понять суть кубитов, а не «магию». Теперь можно раскидать всё прямо на пальцах.

Кубит (qubit) — это квантовый бит

Звучит крутейше, но для начала вспомним что такое бит.

Прямая бочка пошла... ТУЦ-ТУЦ-ТУЦ-ТУЦ-ТУЦ!

Не, в смысле кумплюктерный бит.


🌚 Обычный бит


Бит — это любой выключатель, который может принимать значение 0 или 1.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

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

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Восемь битов 01000001, например, будут буквой A, причём что в ASCII, что в Юникоде.

Набор букв АААА, переданных по сети как 01000001 01000001 01000001 01000001, сообщит собеседнику, что вы орёте над его мемом.

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

Физически нам действительно неважно что у них внутри. В первых компьютерах они были механическими реле, в современных — всего лишь импульсы по 5 вольт, суть осталась та же.

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

Цепочка таких битов и инструкций что с ними делать даёт нам Машину Тьюринга. Так появились компьютеры. Привет.

🌖 Квантовый бит


Я так подробно разжёвывал выше про биты, чтобы всем стало понятно — в квантовых битах (кубитах) всё то же самое.

В них мы тоже принимаем за 0 или 1 какое-то их свойство, которое можем писать и читать, и так же можем делать их из разных материалов — просто теперь вместо механических реле мы используем частицы.

В чём же разница?

Кубит можно еще и подбросить как монетку! Перевести в суперпозицию, из которой он будет выпадать 0 (орлом) или 1 (решкой) с чёткой и нужной нам вероятностью.

Это открывает нам третье весёлое состояние, ради которого мы тут и собрались вообще.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Любое чтение кубита уничтожит нашу суперпозицию. Он схлопнется в 0 или 1, то есть монетка будет поймана, а стрелочка на нашей картинке повернётся к |0〉 или |1〉.

Циферблатики со стрелочками — это стандартная форма записи, привыкайте.

До чтения же у нас есть четкая вероятность того и другого исхода. Скажем, 70% на 30%. Мы не можем предсказать результат, но вероятности вот они, пожалуйста.

Мы можем спокойно нарисовать вероятности нашего кубита на картинке. Они не изменятся без нашего вмешательства.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

В бульварных газетах тут любят говорить, что кубит как бы ОДНОВРЕМЕННО принимает значение 0 и 1. Думаю, после моего хейта в сторону Кота, вы понимаете почему мне не нравится это слово.

Оно отвратительно бесполезно! Щас еще параллельные миры плодить будем, ну уж нет.

Главная фишка такого кубита-монетки именно в том, что мы МОЖЕМ влиять на вращение этой монетки пока она в воздухе, влияя тем самым на вероятность выпадения орла или решки в конце.

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

Никакой магии, просто вероятность.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Мы можем направить на нашу монетку магнит, чтобы замедлить её вращение, инвертировать её в другую сторону или вообще заморозить, чтобы орёл был строго вверх. В этом случае он будет выпадать в 100% случаев, если вдруг нам это нужно.

В классических битах мы могли в любое время записать в него 0 или 1, а в кубитах мы можем записать в него вероятность быть 0 или 1 в конечном счёте.

Мы имеем право сколько угодно шалить с вероятностями внутри кубита, но когда мы читаем его значение — он всегда схлопывается в 0 или 1 с заданной вероятностью, превращаясь по сути в обычный бит.

Да, мы можем имитировать им обычный бит, просто записывая 100% вероятность за один из вариантов кубита.

Это легально, однако обычный бит справится с этим лучше и быстрее, а всё квантовое веселье таится именно между состояниями 1 и 0.

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

Самые смекалистые уже догадались что мы тут хотим: хитро завязать все вероятности, чтобы этот «самый вероятный» результат и был нашим правильным ответом. Но об этом мы еще поговорим в разделе про сам квантовый компьютер, терпения.

Квантовый компьютер

Много кубитов + алгоритм


Итак, что у нас есть на данном этапе:

Кубиты, которые похожи на обычные биты, только вместо 0 или 1 они хранят вероятность выпадения 0 или 1, которую мы можем как-то корректировать «в полёте» чтобы прочитать нужный результат в конце.

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

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

Нарастающее стрёмное ощущение, что всё вокруг волна — даже небо, даже кубит. Появляющиеся сомнения в объективности наблюдаемой реальности и своей роли в этом мире.

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

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Так получается алгоритм. Машина Тьюринга. Такой вот фигней, только на более высоком уровне, занимаются все программисты.

В квантовом компьютере у нас такая же лента, только теперь мы кладём на неё кубиты. Список операций тоже остался, но сами операции чуть изменились.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Решительно очевидно, что мы имеем полное право писать и читать наши кубиты как обычные биты. Записали в кубит 100% вероятность выпадения 1 — получили в итоге 1. Вау.

Но смысла в этом ноль. Как колоть орехи микроскопом — никто не запретит, но это достаточно медленно и бессмысленно. Обычный компьютер справится с этим лучше.

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

Вот это уже куда более интересно. Квантово!

В наших алгоритмах мы больше не мыслим концепциями «прочитай здесь, если 1, переложи туда», а начинаем как бы настраивать взаимодействие наших монеток (кубитов) пока они еще крутятся, чтобы в итоге получить интересующий нас результат.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

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

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Добавление всего лишь одного кубита увеличивает мощность компьютера сразу в два раза, а не на +1 бит как в обычном. Это и даёт нам вот ту самую экспоненциальную скорость вычислений в квантовом компьютере.

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

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

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

Условно говоря, мы подкручиваем наши монетки и говорим как им вращаться друг относительно друга, чтобы в итоге они выпали на стол в комбинацию, например, «орел-решка-орел» (010).

Это и будет правильный ответ алгоритма.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

И да, как вы уже догадались, вероятность правильного ответа на выходе квантового алгоритма бывает не 100%. Ну вот не получилось у нас связать все кубиты-монетки так, чтобы в 100% случаях они выдавали «орел-решка-орел», получилось только в 90%.

Тогда в 1 случае из 10 квантовый компьютер будет вполне легально нам врать, выдавая неправильный ответ. Тогда мы просто запускаем алгоритм много-много раз как настоящие боги инженерии! :)

😎 Квантовое превосходство

Сейчас за достижение квантового превосходства бьются Google, IBM, и главные исследовательские институты всех уважающих себя стран. Побеждают, как обычно, китайцы.

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

Лет через пять меня точно отменят за этот пост. Сохраняйте.

На практике же момент «квантового превосходства» не означает ничего, кроме того, что можно будет открыть шампанское и выпить за технологический прогресс.

Сейчас объясню.

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

Читеры вставляют палки в колёса, короче, и всё равно не могут догнать. Разве что иногда.

Именно поэтому квантовое превосходство интересно журналистам и историкам, но точно не инженерам.

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

Сейчас с этим всё плохо. С текущим количеством шумов они попросту бесполезны для практических задач. Компьютер, который считает быстро, но постоянно врёт — разве это годится? Превосходство у них, блин.

Случайно подняться на гору легко — куда сложнее подниматься на неё каждый день. Можно использовать эту фразу как кредо по жизни.

The Алгоритм

Время программировать программы!

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

Программисты знают их почти наизусть: NOT, AND, OR, XOR и производные NOR, NAND, XNOR, и.т.д.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

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

В этот процессор можно вшить язык ассемблера, на котором программисты смогут складывать и умножать настоящие числа типа 25 + 48 вместо перекладывания единичек и ноликов.

Потом они соберут из этих операций жирные высокоуровневые языки программирования.

Начнется бум кремния, крах доткомов, курсы «профессия Data Scientist за неделю» и вот уже даже бездомные пишут на React за еду.

Короче, в квантовых компьютерах всё то же самое!

Только уровень развития тут пока плавает где-то до изобретения ассемблера. Представляете сколько всего еще впереди?

ПИШЕМ. КВАНТОВЫЙ. КОД.



Я обещал вам квантовый Hello, World — держите. И да, он НА ПИТОНЕ.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Как и любой Hello World, он абсолютно бесполезен. Он лишь подбрасывает две монетки, связывает одну с другой и говорит орлами они упали или решками.

С другой стороны, мне очень нравится этот пример, потому что в нём сразу есть и суперпозиция, и квантовая запутанность двух кубитов, ну и самое главное — сраный if'чик на питоне!

Разберём всё подробно по шагам.


Итак, нам нужна схема из 2 кубитов и 2 обычных битов. Импортируем все нужные тулзы и начинаем рисовать.

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2) # 2 qubits + 2 bits


Все наши биты и кубиты по умолчанию инициализируются в 0.

Дальше накидываем гейты. Потому что можем. Я хочу перевести первый кубит в суперпозицию гейтом H, то есть «подбросить» эту монетку. Если сразу после этого H наш кубит прочитать — мы получим идеальный генератор случайных чисел, в 50% выдающий 0, в 50% — 1.

Физически обоснованный!

Но мы не хотим читать 0 или 1, мы хотим программировать на вероятностях.

Потому вторым гейтом я наложу условие CNOT. Если наш кубит выпадает в 1 — он автоматически перевернёт и соседний кубит. То есть сделает из 0 в 1. Если нет — ничего не изменится. Оба наших кубита остаются по нулям.

qc.h(0) # gate H for qubit 0

qc.cnot(0, 1) # gate CNOT between 0 -> 1 qubits


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

qc.measure(0, 0) # read qubit 0 -> bit 0

qc.measure(1, 1) # read qubit 1 -> bit 1

qc.draw(output="mpl")


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

from qiskit import assemble, Aer

from qiskit.visualization import plot_histogram


simulator = Aer.get_backend("qasm_simulator")

result = simulator.run(assemble(qc)).result()

plot_histogram(result.get_counts())


Имитируя вероятности квантового компьютера, наш симулятор выполняет код 1024 раза и замеряет результат каждого эксперимента. Получается вот такая картинка:

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Как можно заметить, вероятности близки к 50/50, но даже за 1024 броска монетки наш глупый цифровой рандом не приблизился к идеалу. Но жить вроде можно.

Дальше дело за малым — прочитать результат и сделать с ним что-то полезное в реальном мире. Тут уже можно наговнокодить if'чик на питоне и никто нас не осудит.

if "11" in result.get_counts():

print("РЕШКА")

else:

print("ОРЁЛ")


Он говорит «если оба кубита выпали в 11 — скажи решка, если в 00 — орел». Вариантов 01 и 10 у нас быть не может, иначе всю эту квантовую лавочку можно просто закрывать.

Для визуализации еще можно вывести получившиеся сферы Блоха для обоих кубитов. Если сделать это много раз, будет видно как стрелочки вдвоем прыгают вверх-вниз. Веселье.

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Конец.


Нет, стойте, не конец.

Я же обещал выполнить это на реальном квантовом компьютере. С симуляторами ощущения не те. Придётся показать.

from qiskit import IBMQ


IBMQ.save_account("YOUR_API_KEY")


qpu = IBMQ.load_account().get_backend("ibmq_casablanca")

result = qpu.run(assemble(qc)).result()

plot_histogram(result.get_counts())


Ждём два часа в очереди и вуаля:

Квантовый Компьютер Как устроен? Как программировать? Уже? [ДЛИННОПОСТ] Разработка, Программирование, Картинка с текстом, Квантовая физика, Квантовая механика, Квантовый компьютер, Квантовая запутанность, IT, Длиннопост

Ох-███ДАННЫЕ█УДАЛЕНЫ███-еть.

Как будто сам прикоснулся к вечности. Даже растрогался. Ну и немного кекнул над потерявшими когерентность экспериментами посередине.

Вот теперь точно конец.


Зачем нам это все?



Наверное, стоило начинать с этого пост, но уже как-то поздновато :D

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

Тут действительно есть где посомневаться.

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

Даже самые топовые квантовые компьютеры гугла и IBM (на март 2021) содержат по 53 и 65 физических кубитов, что вроде неплохо для начала, но работают они не ахти как и не всегда.

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


Источник, не обрезанный

https://vas3k.ru/blog/quantum_computing/

Показать полностью 23
19

Когда поставил лишний ноль в значение rps и отправил нагрузочный тест на прод

Когда поставил лишний ноль в значение rps и отправил нагрузочный тест на прод
19

Как выучить любой язык программирования за час

Отличная работа, все прочитано!