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


Объяснение блокчейна для веб-разработчиков / Хабр

Предисловие переводчика

Предлагаю читателям Хабрахабра перевод статьи «The Blockchain Explained to Web Developers, Part 1: The Theory» за авторством Francois Zaninotto. Эту статью я нашел в блоге компании Marmelab. Статья представляет собой отличное введение в технологию блокчейн «с нуля», но может оказаться интересной и для тех, кто уже «в теме». Она касается не только того, как работает блокчейн, но и перспектив его развития, а также с чего начать, если вы хотите создать свой проект, использующий блокчейн.

Объяснение блокчейна для веб-разработчиков, Часть первая: Теория

Блокчейн – это новая популярная технология. Даже если вы не слышали о ней, вы, вероятнее всего, знаете о Bitcoin. Блокчейн — это одна из фундаментальных технологий на которых основан Bitcoin. Эксперты говорят, что блокчейн вызовет революцию схожую с той, которую некогда вызвал Интернет. Но что это на самом деле и как его можно использовать для создания приложений? Эта статья является первой в серии из трех, рассказывающей о феномене Блокчейна. Мы обсудим теорию, покажем фактический код и поделимся своим опытом, основанным на реальном проекте. Для начала попытаемся понять что из себя представляет Блокчейн.

Что такое Блокчейн, Часть первая

Несмотря на то, что блокчейн создан для поддержки Bitcoin, идея блокчейна может быть определена независимо от экосистемы Биткоина. Литература обычно определяет блокчейн следующим образом:Блокчейн – это журнал с фактами, реплицируемый на несколько компьютеров, объединенных в сеть равноправных узлов (P2P). Фактами может быть что угодно, от денежных операций и до подписания контента. Члены сети — анонимные лица, называемые узлами. Все коммуникации внутри сети используют криптографию, чтобы надежно идентифицировать отправителя и получателя. Когда узел хочет добавить факт в журнал, в сети формируется консенсус, чтобы определить, где этот факт должен появиться в журнале; этот консенсус называется блоком. Я не знаю как у вас, но у меня после чтения этих определений все еще оставались проблемы с пониманием блокчейна. Давайте заглянем немного глубже.

Упорядочивание фактов

Децентрализованные сети с равноправными узлами не новы. Napster и BitTorrent — это P2P сети. Просто вместо обмена фильмами, участники сети блокчейна обмениваются фактами. Так в чем же реальная особенность блокчейна?

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

Возьмем, к примеру, проблему двойного расходования: у Алисы есть 10$ и она отсылает их дважды Бобу и Чарли. Кто будет иметь 10$ в итоге? Для того чтобы ответить на этот вопрос, лучший способ это упорядочить факты. Если два несовместимых факта появятся в сети, то победит тот, который будет первый записан.

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

Алгоритмы консенсуса для распределенных систем это очень активное поле для исследований. Возможно, вы слышали о алгоритмах Paxos или Raft. Блокчейн реализует другой алгоритм, консенсус, основанный на доказательстве выполнения работы (proof-of-work), использующий блоки.

Блоки

Блоки – это хитрый трюк, чтобы упорядочить факты в сети с недоверенными узлами. Идея проста: факты группируются в блоки, и есть только одна цепочка блоков, реплицируемая по всей сети. Каждый блок ссылается на предыдущий. То есть, если факт F находится в блоке 21, и факт E в блоке 22, то факт E рассматривается всей сетью как следующий за фактом F. Перед добавлением к блоку, факты находятся на рассмотрении, т.е. не подтверждены.

Майнинг

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

Но на самом деле узлы не просто бросают пару игральных костей. Задача, которую решают майнеры в блокчейне подразумевает бросок огромного количества игральных костей. По замыслу, обнаружение случайного ключа для проверки блока маловероятно. Это предотвращает мошенничество и делает сеть безопасной (до тех пор, пока злоумышленник не имеет контроль более чем над половиной узлов в сети). Как следствие, новые блоки будут публиковаться в цепь через фиксированный интервал времени. В Bitcoin блоки публикуются, в среднем, каждые 10 минут.

В Bitcoin, задача представляет из себя двойной SHA-256 хэш строки из непроверенных фактов, идентификатора предыдущего блока и случайной строки. Узел выигрывает, если его хэш содержит как минимум n ведущих нулей.

// проигрышный хэш для Bitcoin 787308540121f4afd2ff5179898934291105772495275df35f00cc5e44db42dd // выигрышный хэш для Bitcoin, если n=10 00000000009f766c17c736169f79cb0c65dd6e07244e9468bc60cde9538b551e

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

Процесс поиска блоков называется майнингом. Все дело в том, что так же как и добыча золота (прим. перев. Mining — добыча (англ.)), майнинг блоков приносит экономическое вознаграждение — некоторую форму денег. Вот почему людей, которые содержат узлы в блокчейне, называют майнерами.

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

Деньги и криптовалюты

Каждую секунду, каждый майнер тестирует тысячи случайных строк, чтобы сформировать новый блок. То есть работа майнера в блокчейне требует огромное количество компьютерных ресурсов (памяти и CPU). Вот почему вы должны платить, чтобы записывать факты в блокчейн. С другой стороны, чтение фактов бесплатно: вам достаточно запустить собственный узел и вы будете получать полную историю фактов созданную другими узлами. Итак, подведем итог:
  • Чтение данных бесплатно
  • За добавление фактов взимается небольшая комиссия
  • Майнинг блока приносит деньги в размере комиссионных за все факты, входящие в блок
Речь здесь идет не о реальных деньгах. Как факт, каждый блокчейн имеет свою собственную (крипто-)валюту. Она называется bitcoin (BTC) в сети Bitcoin, ether (ETH) в сети Ethereum, и т.д. Чтобы совершить платеж в сети Bitcoin, вы должны заплатить небольшую комиссионные в bitcoin'ах – так же как вы должны были бы заплатить комиссионные банку. Однако, откуда взялись первые деньги?

Майнеры получают вознаграждение за поддержание работы и безопасности сети. Каждый раз, когда они успешно формируют блок, они получают фиксированное количество криптовалюты. В Bitcoin вознаграждение – 25 BTC за блок, в Ethereum– 5 ETH за блок. Таким образом, блокчейн сам генерирует свои собственные деньги.

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

Контракты

До сих пор, мы в основном говорили о блокчейне как о хранилище фактов, но он также может исполнять программы. Некоторые блокчейны позволяют каждому факту содержать мини программу. Такие программы реплицируются вместе с фактом, и каждый узел выполняет их, получая факт. В Bitcoin это используется для совершения транзакций с условиями, например: Боб получит 100 BTC от Алисы только если сегодня 29 февраля.

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

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

Представьте, что вы хотите сдать ваш дом на неделю за 1000$ c 50%-ой предоплатой. Вы и арендующий подписываете контракт, вероятнее всего, написанный юристом. Вам также нужен банк для получения платежа. В начале недели вы просите о депозите в 5000$; арендующий предоставляет вам чек на него. В конце недели он отказывается заплатить оставшиеся 50%. Вы также узнаете, что он сломал окно, и чек с депозитом ведет на пустой счет. Теперь вам понадобится адвокат, чтобы передать ваш договор на аренду в суд.

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

  • Две недели перед арендой: передача 500$ от арендующего к владельцу
  • Отмена владельцем: передача 500$ от владельца к арендующему;
  • Конец периода аренды: передача 500$ от арендующего к владельцу
  • Доказательство механических повреждений после периода аренды: передача 5000$ от арендующего к владельцу
Добавьте этот умный контракт в блокчейн и больше никаких проблем. Ко времени указанному в контракте произойдет передача денег и, если владелец сможет представить доказательства механических повреждений, он автоматически получит 5000$ (и нет никакой нужды в депозите).

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

Такие приложения, опирающиеся на умные контракты, называются децентрализованными приложениями или DApps.

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

Что такое блокчейн. Часть вторая

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

Что он делает? Блокчейн позволяет безопасно распространять и/или обрабатывать данные между несколькими лицами через недоверенную сеть. Данными может быть что угодно, но наиболее интересным вариантом данных является возможность передачи информации, которая требует наличия третьей доверенной стороны. Примерами такой информации являются деньги (требуют участия банка), права на собственность (требуют участия нотариуса), договор на заем и т.д. В сущности, блокчейн устраняет необходимость в участии третьего доверенного лица.

Как он работает? С технической точки зрения, блокчейн является новшеством, которое опирается на три понятия: P2P сети, асимметричная криптография и распределенный консенсус, основанный на решении математической задачи. Ни одна из этих идей не является новой сама по себе. Если вы не разбираетесь во всех, не беспокойтесь: немногие люди обладают необходимыми знаниями, чтобы разработать блокчейн (что является проблемой). Но отсутствие полного понимания блокчейна не мешает вам использовать его, так же как вы можете создавать веб-приложения, не зная о медленном старте TCP или центрах сертификации.

На что он похож? Блокчейн можно рассматривать как (слабо)синхронизированную базу данных реплицируемую столько же раз, сколько узлов в сети, или как суперкомпьютер, образованный комплексом всех CPU/GPU входящих в него узлов. Вы можете использовать этот суперкомпьютер для хранения и обработки данных, т.е. также как вы можете использовать удаленный API. Отличие только в том, что вам не нужно создавать бэкэнд, и вы можете быть уверены, что данные надежно защищены и обрабатываются в сети должным образом.

Практические следствия

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

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

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

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

Почему это важно

«Блокчейн это самая потрясающая технология из тех, которые я когда либо видел.» Salim Ismail «Самая интересная интеллектуальная разработка в Интернете за последние 5 лет.» Julian Assange «Я думаю тот факт, что благодаря Bitcoin вселенной, алгоритм замещает функции [государства] … это действительно очень круто.» Al Gore Эти умные люди увидели огромный потенциал в блокчейне. Потенциально блокчейн может заменить всех посредников, которые необходимы для установления доверительных связей. Давайте взглянем на несколько приложений которые построены на блокчейне и реализуют идеи отказа от посредника.
  • Monegraph позволяет авторам закрепить права на свою работу и установить правила (и выплаты) за использования их работы.
  • La Zooz это децентрализованный Uber. Предлагай свою машину, найди перевозчика без платы Uber’у.
  • Augur – это онлайн букмекер. Делай ставки и получай выигрыш.
  • Storj.io – это P2P хранилище данных. Сдавай свое неиспользуемое место на диске или найди самое дешевое онлайн хранилище.
  • Muse – это распределенная, открытая и прозрачная база данных специально для музыкальной индустрии.
  • Ripple позволяют проводить недорогие трансграничные платежи в банки
На сегодняшний день многие успешные интернет предприятия являются посредниками. Подумайте о Google: им удалось стать посредником между вами и всем интернетом. А Amazon? Они стали посредником между продавцами и покупателями любых типов товаров. Вот почему технология, которая позволяет устранить посредников может взорвать Интернет.

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

Вы не захотите создавать свой блокчейн

Технологии, на которых строится блокчейн, используют передовую криптографию, пользовательские сетевые протоколы и оптимизацию производительности. Все это слишком сложно, чтобы разрабатывать это каждый раз, когда проекту требуется блокчейн. К счастью, помимо Bitcoin, есть еще несколько реализаций блокчейна с открытым кодом. Вот самые передовые:
  • Ethereum: платформа блокчейна с открытым исходным кодом от Ethereum Foundation
  • Hyperledger: другая открытая реализация, только от Linux Foundation. Первая реализация была опубликована совсем недавно.
  • Eris Industries: Инструменты, помогающие использовать Ethereum,Bitcoin или полностью независимые блокчейны, в основном для создания частных сетей. Их инструкции и руководства являются отличной отправной точкой для обзора блокчейна.
Сложность этих реализаций сильно различается. Если вам необходимо создать приложение прямо сейчас, мы советуем:
  • Eris для небольших частных блокчейнов или для того, чтобы поиграться с технологией и общего ознакомления.
  • Ethereum для крупных блокчейн проектов
Кроме того, Bitcoin это не лучший выбор для платформы разработки. Он был разработан для денежных транзакций и только, хотя вы и можете запрограммировать псевдо-умные контракты. В настоящее время сеть испытывает серьезный кризис роста, транзакции ждут в очереди до часа, чтобы быть помещенными в блок. Майнеры часто выбирают транзакции с наибольшими комиссионными, так что передача денег в Bitcoin становится дороже, чем в банке. Сообщество разработчиков находится на грани войны, и спекуляции с криптовалютой делают номинальную стоимость слишком изменчивой.

Цифры

Насколько велик блокчейн сегодня? Взглянем на некоторые цифры.

Bitcoin:

Ethereum:

Заключение

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

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

Послесловие переводчика

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

habr.com

Кто нужен блокчейн-проектам, где их искать и сколько платят специалистам

В 16-м веке английское общество испытывало сильный социальный катаклизм. Тысячи крестьян были согнаны со своих земель и лишились привычного уклада жизни из-за развития технологии производства сукна. Крестьянские земли отдавали под пастбища овец из-за роста потребности в сырье для ткани. «Овцы стали пожирать людей», – писал по этому поводу Томас Мор.

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

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

Крупнейшие международные банки уже несколько лет занимаются изучением и внедрением в свою деятельность технологии построения цепочки блоков транзакций. Согласно исследованию Всемирного экономического форума, общий объем инвестиций в это направление составил $1,4 млрд за последние три года.

Год назад Mizuho Financial Group, крупнейший финансовый холдинг Японии, объявил о начале проекта, который использует Microsoft Azure и оказывает услуги как сервис блокчейн (Blockchain-as-a-Service). Холдинг применяет его для обработки синдицированных займов компании.

В августе 2016 года четыре крупнейших международных банка, UBS, Deutsche Bank, Santander и Bank of New York Mellon объявили о создании новой цифровой валюты, основанной на технологии блокчейн. Банки будут рассчитываться между собой этими условными единицами, чтобы не ожидать завершения перевода традиционных денег. Криптовалюта получила название utility settlement coin. Ее коммерческое использование начнется в 2018 году.

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

  • Blockchain engineer — core-разработчик c серьезным опытом в системном программировании на С/С++, Go или Java. Аналог профессионала, который пишет ядро для Linux.
  • Blockchain developer — разработчик с очень хорошим опытом. Аналог профессионала, который пишет десктоп-приложение.
  • Smart contracts developer — разработчик на смарт-контракты. Сюда отлично подойдут специалисты с крутым опытом в вебе (например, в JavaScript или Python).

Говоря о языках программирования, следует отметить , что С/С++ важны для блокчейн-разработчиков именно потому что большинство проектов написаны именно на нем. Меньшая часть блокчейн-проектов пишется на Java, хотя теоретически, как говорят программисты, построить цепочки блоков транзакций можно на любом языке. Шансов найти работу в блокчейн-проекте куда больше у разработчиков, которые пишут на нативном языке без использования фреймворков. И, конечно, никуда без математики и знания алгоритмов – это необходимая база.

О ценности практического опыт разработки на Java, Golang, C, C++, C# и других языков программирования говорит также Максим Авдеев, Сhief Business Development Officer фонда Life.SREDA.

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

«Интересно наблюдать, как активно растущая сфера блокчейна постепенно меняет список навыков, востребованных на рынке труда: например, раньше прикладная криптография не пользовалась такой популярностью, а теперь многие специалисты стремятся восполнить пробелы в знаниях», — делится своими впечатлениями Анна Минец, HR-руководитель компании Bitfury, специализирующейся на технологии блокчейн, — «в топовых западных ВУЗах уже появились учебные курсы по блокчейну, а ряд зарубежных рекрутеров сосредоточил свои усилия на поиске специалистов именно в этой сфере: все эти изменения говорят о том, что спрос диктует предложение».

По ее словам, поиск кандидатов в этой индустрии не отличается от уже известных способов: митапы, хакатоны, профессиональные сообщества, социальные сети, поиск молодых талантов среди студентов и олимпиадников «на вырост», охота за известными специалистами и энтузиастами сферы. Про это же говорят и другие: Linkedin, конференции, специализированные группы. В качестве примера хорошего хантинга Анна приводит кейс нью-йоркской компании R3, которая смогла привлечь одного из первых приверженцев биткоина, бывшего разработчика Bitcoin Core Майка Герна.

«На российском рынке есть небольшие самостоятельные команды, которые делают смарт-контракты и создают криптовалюты на заказ. А также небольшие команды, которые сидят и делают тоже самое, но в "Альфа-банке", "Тинькофф-банке", "Сбербанке" и в банке "Открытие". Всего в России сейчас около 50 готовых профессионалов», — резюмирует Кира Кузьменко из New.HR, — «если вам прямо сейчас нужны профессионалы, то попробуйте перекупить команду, но для мотивации нужна интересная задача. Если перекупить не получилось, то учите: берите крутых программеров на junior-позиции. Поверьте, они придут с удовольствием, если будет шанс получить реальный опыт».

По ее оценке, средний программист сейчас получает в час $15-20, а программист с хорошим опытом в блокчейне – $60-100. Но для того, чтобы заполучить его нужно быть готовым предложить хорошие деньги и действительно интересную задачу. Немного другие цифры приводит Анна Минец: опытный rust–разработчик в России получает около $4 000, а молодой — менее $2 500. Евгения Дворская, глава JungleJobs, говорит примерно о следующей ценовой вилке: средняя заработная плата разработчика в России составляет $2500-3500, в США — $10 000-12 000, в Европе – 8 000-10 000 евро и в Азии — $4 000-6 000. Теперь мы вполне понимаем, почему Россия стала страной ИТ-аутсорса.

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

vc.ru

Как сделать свой блокчейн. Часть 1 — Создание, Хранение, Синхронизация, Отображение, Майнинг и Доказательная работа / Блог компании Отус / Хабр

Доброго всем! Мы тут потихоньку начали исследовать новое совсем для нас направление для обучения — блокчейны и нашли то, что оказалось интересным в рамках нашего курса по Python, в том числе. Чем, собственно, и хотим поделиться с вами. Я могу узнать, когда у меня появился первый Bitcoin, из истории кошелька в моем аккаунте на Coinbase — входящая транзакция в 2012 году в подарок за регистрацию. Bitcoin в то время стоил около 6.50$. Если бы я сохранил те 0.1 BTC, на момент написания статьи это бы уже стоило более 500$. Если кому-то интересно, я продал их, когда Bitcoin стоил 2000$. Так что я получил только 200$ вместо ныне возможных 550$. Не стоило торопиться.

О существовании Bitcoin я знал, но особо не интересовался. Я видел взлеты и падения курса $/BTC. Я видел, как люди говорят, что за ним будущее, а видел статьи о его полной бессмысленности. Но личного мнения у меня не было — просто наблюдал со стороны. Точно так же я почти не следил за блокчейнами. Но в последнее время мой отец несколько раз упоминал, что на CNBC и Bloomberg, которые он смотрит по утрам, часто рассказывают о блокчейнах, и он понятия не имеет, что это.

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

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

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

Я пишу пост по нескольким причинам: 1) Чтобы люди, прочитавшие его, смогли узнать больше о блокчейнах; 2) Чтобы я смог понять больше, объяснив код, а не просто написав его. В этом посте я покажу способ хранения данных блокчейна и генерации начального блока, синхронизацию узла с локальными данными блокчейна, отображение блокчейна (что впоследствии будет использоваться для синхронизации с другими узлами), а затем, майнинг и создание валидных новых блоков. В первом посте не будет никаких других узлов. Никаких кошельков, пиров, важных данных. О них поговорим позднее.

В двух словах

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

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

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

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

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

Если хотите изучить код, посмотрите ветку part 1 на Github. Смело присылайте мне любые вопросы, комментарии, правки и похвалы (если вы в настроении сделать что-то особо хорошее), или просто пишите в твиттер.

Шаг 1 — Классы и Файлы

Первый шаг — написание класса, обрабатывающего блоки при запуске узлов. Я назову этот класс Block. Честно говоря, много делать не придется. В функции __init__ мы будем верить, что вся необходимая информация уже представлена в словаре. Для производственного блокчейна — это не самое мудрое решение, но подходит в качестве примера, потому что код пишу только я. Также я напишу метод, запаковывающий важную информацию блока в словарь, а после заведу более удобный способ для отображения информации блока при его печати в терминал.

class Block(object): def __init__(self, dictionary): ''' We're looking for index, timestamp, data, prev_hash, nonce ''' for k, v in dictionary.items(): setattr(self, k, v) if not hasattr(self, 'hash'): #in creating the first block, needs to be removed in future self.hash = self.create_self_hash() def __dict__(self): info = {} info['index'] = str(self.index) info['timestamp'] = str(self.timestamp) info['prev_hash'] = str(self.prev_hash) info['hash'] = str(self.hash) info['data'] = str(self.data) return info def __str__(self): return "Block<prev_hash: %s,hash: %s>" % (self.prev_hash, self.hash) Чтобы создать первый блок, запустим этот простой код:def create_first_block(): # index zero and arbitrary previous hash block_data = {} block_data['index'] = 0 block_data['timestamp'] = date.datetime.now() block_data['data'] = 'First block data' block_data['prev_hash'] = None block = Block(block_data) return block Отлично. Последний вопрос в этой части — где хранить данные в файловой системе. Это необходимо, если мы не хотим потерять локальные данные блока при отключении узла. Я назову папку с данными ‘chaindata’, в какой-то степени подражая схеме папок Etherium Mist. Каждому блоку теперь присвоен отдельный файл, названный по его индексу. Нужно убедиться, что имена файлов содержат в начале достаточное количество нулей, чтобы блоки перечислялись по порядку.

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

#check if chaindata folder exists. chaindata_dir = 'chaindata' if not os.path.exists(chaindata_dir): #make chaindata dir os.mkdir(chaindata_dir) #check if dir is empty from just creation, or empty before if os.listdir(chaindata_dir) == []: #create first block first_block = create_first_block() first_block.self_save() Шаг 2 — Синхронизация блокчейна, локально

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

def sync(): node_blocks = [] #We're assuming that the folder and at least initial block exists chaindata_dir = 'chaindata' if os.path.exists(chaindata_dir): for filename in os.listdir(chaindata_dir): if filename.endswith('.json'): #.DS_Store sometimes screws things up filepath = '%s/%s' % (chaindata_dir, filename) with open(filepath, 'r') as block_file: block_info = json.load(block_file) block_object = Block(block_info) #since we can init a Block object with just a dict node_blocks.append(block_object) return node_blocks Пока просто и красиво. Чтение строк из файлов их загрузка в структуры данных не требуют чрезмерно сложного кода. Пока это работает. Но в будущих постах, где я буду писать о возможностях коммуникации разных узлов, эта функция sync станет значительно сложнее.

Шаг 3 — Отображение блокчейна

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

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

Ниже представлен код для отображения json блокчейна. Я проигнорирую импорты для экономии места.

node = Flask(__name__) node_blocks = sync.sync() #inital blocks that are synced @node.route('/blockchain.json', methods=['GET']) def blockchain(): ''' Shoots back the blockchain, which in our case, is a json list of hashes with the block information which is: index timestamp data hash prev_hash ''' node_blocks = sync.sync() #regrab the nodes if they've changed # Convert our blocks into dictionaries # so we can send them as json objects later python_blocks = [] for block in node_blocks: python_blocks.append(block.__dict__()) json_blocks = json.dumps(python_blocks) return json_blocks if __name__ == '__main__': node.run() Запустите этот код, зайдите на localhost:3000/blockchain.json и увидите текущий блок.

Шаг 4 — “Майнинг”, также известный как создание блока

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

Сатоши описывает это следующим образом в Bitcoin whitepaper. Учтите, что “timestamp сервер” назван “узлом”.

“Начнем описание нашего решения с timestamp сервера. Его работа заключается в хэшировании блока данных, на который нужно поставить timestamp, и открытой публикации этого хэша… Timestamp показывает, что в данный момент конкретные данные существовали и потому попали в хэш блока. Каждый хэш включает в себя предыдущий timestamp: так выстраивается цепь, где очередное звено укрепляет все предыдущие.”

Скриншот изображения, прикрепленного под описанием:

Основная идея раздела — при необходимости соединить блоки, мы создаем хэш информации о новом блоке, включая время создания блока, хэш предыдущего блока и информацию в самом блоке. Я буду называть всю эту информацию “хедером” блока. Таким образом, мы можем проверить корректность блока, посчитав все хэши перед ним, подтвердив последовательность.

В данном случае хедер, который я создаю, объединяет значения строки в одну огромную строку. Я включил следующие данные:

  1. Индекс, показывающий каким по счету является блок;
  2. Хэш предыдущего блока;
  3. Данные — просто случайные строки. Для bitcoin они называются Merkle root и содержат информацию о транзакциях;
  4. Timestamp майнинга этого блока.
def generate_header(index, prev_hash, data, timestamp): return str(index) + prev_hash + data + str(timestamp) Поясню один момент — объединение строк информации не является обязательным для создания хедера. Требование состоит в том, чтобы каждый знал, как генерировать хедер блока и хэш предыдущего блока внутри него. Делается это для того, чтобы каждый мог убедиться в корректности хэша в новом блоке и подтвердить связь между двумя блоками.

Хедер Bitcoin значительно сложнее объединения строк. Он использует хэши данных и времени и завязан на то, как данные расположены в памяти. Но в нашем случае объединения строк достаточно.

Теперь у нас есть хедер и можно вычислить валидность хэша. Я буду использовать метод, отличающийся от метода Bitcoin, но все равно запущу хедер блока через функцию sha256.

def calculate_hash(index, prev_hash, data, timestamp, nonce): header_string = generate_header(index, prev_hash, data, timestamp, nonce) sha = hashlib.sha256() sha.update(header_string) return sha.hexdigest() Для майнинга блока мы используем функцию выше, чтобы получить хэш, положить его в новый блок и сохранить этот блок в директории chaindata.node_blocks = sync.sync() def mine(last_block): index = int(last_block.index) + 1 timestamp = date.datetime.now() data = "I block #%s" % (int(last_block.index) + 1) #random string for now, not transactions prev_hash = last_block.hash block_hash = calculate_hash(index, prev_hash, data, timestamp) block_data = {} block_data['index'] = int(last_block.index) + 1 block_data['timestamp'] = date.datetime.now() block_data['data'] = "I block #%s" % last_block.index block_data['prev_hash'] = last_block.hash block_data['hash'] = block_hash return Block(block_data) def save_block(block): chaindata_dir = 'chaindata' filename = '%s/%s.json' % (chaindata_dir, block.index) with open(filename, 'w') as block_file: print new_block.__dict__() json.dump(block.__dict__(), block_file) if __name__ == '__main__': last_block = node_blocks[-1] new_block = mine(last_block) save_block(new_block) Готово! Но при таком типе создания блока кто угодно с самым быстрым CPU сможет создавать самые длинные цепи, которые другие узлы посчитают корректными. Нужен способ снизить скорость создания блока и подтверждение до перехода к следующему блоку.

Шаг 5 — Доказательство выполнения работы

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

Способ сделать это — установить требования к структуре хэша блока. Как и в случае с bitcoin, необходимо убедиться, что хэш начинается с определенного количества нулей, перед тем, как перейти к следующему. А для этого нужно добавить в хедер дополнительную информацию — случайно перебираемое число (nonce).

def generate_header(index, prev_hash, data, timestamp, nonce): return str(index) + prev_hash + data + str(timestamp) + str(nonce) Теперь функция майнинга настроена для создания хэша, но если хэш блока не содержит достаточного количества нулей, мы увеличиваем значение nonce, создаем новый хедер, вычисляем новый хэш и проверяем хватает ли нулей.NUM_ZEROS = 4 def mine(last_block): index = int(last_block.index) + 1 timestamp = date.datetime.now() data = "I block #%s" % (int(last_block.index) + 1) #random string for now, not transactions prev_hash = last_block.hash nonce = 0 block_hash = calculate_hash(index, prev_hash, data, timestamp, nonce) while str(block_hash[0:NUM_ZEROS]) != '0' * NUM_ZEROS: nonce += 1 block_hash = calculate_hash(index, prev_hash, data, timestamp, nonce) block_data = {} block_data['index'] = int(last_block.index) + 1 block_data['timestamp'] = date.datetime.now() block_data['data'] = "I block #%s" % last_block.index block_data['prev_hash'] = last_block.hash block_data['hash'] = block_hash block_data['nonce'] = nonce return Block(block_data) Отлично. Новый блок содержит валидное значение nonce, поэтому другие узлы могут подтвердить хэш. Мы можем сгенерировать, сохранить и распределить новый блок остальным.

Заключение

На этом все! Пока что. Осталось еще много вопросов и фичей в блокчейнах, которые я не объяснил.

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

Спасибо моей сестре Саре за уточняющие вопросы о блокчейнах и помощь в редактировании поста!

THE END

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

habr.com

Изучаем блокчейн на практике / Блог компании Everyday Tools / Хабр

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

Но разобраться в блокчейне не так-то просто, по крайней мере, по моему опыту. Я корпел над заумными видео, продирался через туториалы и с нарастающей досадой отмечал недостаток иллюстрирующих примеров.

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

Но для начала…

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

Если вы не совсем понимаете, что такое хэш, вам сюда.

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

Что будет нужно для работы? Проверьте, чтобы у вас был установлен Python 3.6+ (вместе с pip). Также вам нужно будет установить Flask и прекрасную библиотеку Requests:

pip install Flask==0.12.2 requests==2.18.4 Ах да, еще вам понадобится HTTP клиент, например, Postman или cURL. Тут подойдет любой.

Где можно посмотреть то, что получится в итоге? Исходный код доступен здесь.

Шаг первый: Делаем блокчейн

Откройте свой любимый текстовый или графический редактор, мне вот, например, нравится PyCharm. Создайте новый файл под названием blockchain.py. Мы будем работать только в этом файле, а если запутаетесь, всегда можно подсмотреть в исходный код.

Представление блокчейна

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

class Blockchain(object): def __init__(self): self.chain = [] self.current_transactions = [] def new_block(self): # Creates a new Block and adds it to the chain pass def new_transaction(self): # Adds a new transaction to the list of transactions pass @staticmethod def hash(block): # Hashes a Block pass @property def last_block(self): # Returns the last Block in the chain pass

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

Как выглядит блок?

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

Вот пример того, как может выглядет отдельный блок:

block = { 'index': 1, 'timestamp': 1506057125.900785, 'transactions': [ { 'sender': "8527147fe1f5426f9dd545de4b27ee00", 'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f", 'amount': 5, } ], 'proof': 324984774000, 'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" } Теперь идея цепочки должна быть очевидна — каждый блок включает в себя хэш предшествующего. Это очень важно: именно так обеспечивается неизменность цепочки: если хакер повредит какой-либо блок, то абсолютно все последующие будут содержать неверные хэши.

Понятно? Если нет, остановитесь и дайте себе время усвоить эту информацию — именно в ней состоит базовый принцип блокчейна.

Добавляем транзакции в блок

Нам нужно каким-то образом добавлять в блок новые транзакции. За это отвечает метод new_transaction(), работает он достаточно просто:

class Blockchain(object): ... def new_transaction(self, sender, recipient, amount): """ Creates a new transaction to go into the next mined Block :param sender: <str> Address of the Sender :param recipient: <str> Address of the Recipient :param amount: <int> Amount :return: <int> The index of the Block that will hold this transaction """ self.current_transactions.append({ 'sender': sender, 'recipient': recipient, 'amount': amount, }) return self.last_block['index'] + 1 Когда new_transaction() добавляет новую транзакцию в список, он возвращает индекс блока, куда она была записана, следующему, с которым будет осуществляться майнинг. Позже это пригодится следующему пользователю, добавляющему транзакцию.

Помимо создания блока genesis в конструкторе, мы также распишем методы new_block(), new_transaction() и hash():

import hashlib import json from time import time class Blockchain(object): def __init__(self): self.current_transactions = [] self.chain = [] # Create the genesis block self.new_block(previous_hash=1, proof=100) def new_block(self, proof, previous_hash=None): """ Create a new Block in the Blockchain :param proof: <int> The proof given by the Proof of Work algorithm :param previous_hash: (Optional) <str> Hash of previous Block :return: <dict> New Block """ block = { 'index': len(self.chain) + 1, 'timestamp': time(), 'transactions': self.current_transactions, 'proof': proof, 'previous_hash': previous_hash or self.hash(self.chain[-1]), } # Reset the current list of transactions self.current_transactions = [] self.chain.append(block) return block def new_transaction(self, sender, recipient, amount): """ Creates a new transaction to go into the next mined Block :param sender: <str> Address of the Sender :param recipient: <str> Address of the Recipient :param amount: <int> Amount :return: <int> The index of the Block that will hold this transaction """ self.current_transactions.append({ 'sender': sender, 'recipient': recipient, 'amount': amount, }) return self.last_block['index'] + 1 @property def last_block(self): return self.chain[-1] @staticmethod def hash(block): """ Creates a SHA-256 hash of a Block :param block: <dict> Block :return: <str> """ # We must make sure that the Dictionary is Ordered, or we'll have inconsistent hashes block_string = json.dumps(block, sort_keys=True).encode() return hashlib.sha256(block_string).hexdigest() Вышеприведенный код, вероятно, в пояснениях не нуждается — я добавил кое-где комментарии и докстринги, чтобы было понятнее. С представлением блокчейна мы практически закончили. Но сейчас вы, должно быть, задаетесь вопросом, как происходит процесс создания, встраивания и майнинга блоков.

Разбираемся с доказательством работы

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

Чтобы стало яснее, давайте рассмотрим очень простой пример.

Допустим, хэш некоторого числа X, помноженного на другое Y, должен оканчиваться на 0. Соответственно, hash(x * y) = ac23dc...0. Для этого упрощенного примера установим x = 5. Прописываем все это на Python:

from hashlib import sha256 x = 5 y = 0 # We don't know what y should be yet... while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0": y += 1 print(f'The solution is y = {y}') Правильный ответ здесь: y = 21; именно при таком значении получается хэш с 0 в конце:hash(5 * 21) = 1253e9373e...5e3600155e860 В биткойне алгоритм доказательства работы называется HashCash и не особенно отличается от простенького примера, приведенного выше. Это уравнение, которые майнеры наперегонки пытаются разрешить, чтобы создать новый блок. В целом, сложность определяется тем, сколько символов нужно вычислить в заданной последовательности. За верный ответ майнеры получают вознаграждение в виде одной монеты — в ходе транзакции.

Проверить их решение для системы не составляет труда.

Пишем простое доказательство работы

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

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

import hashlib import json from time import time from uuid import uuid4 class Blockchain(object): ... def proof_of_work(self, last_proof): """ Simple Proof of Work Algorithm: - Find a number p' such that hash(pp') contains leading 4 zeroes, where p is the previous p' - p is the previous proof, and p' is the new proof :param last_proof: <int> :return: <int> """ proof = 0 while self.valid_proof(last_proof, proof) is False: proof += 1 return proof @staticmethod def valid_proof(last_proof, proof): """ Validates the Proof: Does hash(last_proof, proof) contain 4 leading zeroes? :param last_proof: <int> Previous Proof :param proof: <int> Current Proof :return: <bool> True if correct, False if not. """ guess = f'{last_proof}{proof}'.encode() guess_hash = hashlib.sha256(guess).hexdigest() return guess_hash[:4] == "0000" Мы можем варьировать сложность этой задачи, меняя количество нулей в начале. Но четырех вполне достаточно. Вы можете сами убедиться, что один-единственный дополнительный нолик значительно замедляет процесс поиска решения.

Работа над классом почти завершена и теперь мы готовы начать взаимодействие с ним при помощи HTTP запросов.

Шаг второй: Блокчейн как API

Здесь мы будем использовать Python Flask — микрофреймворк, который облегчает процесс соотнесения конечных пунктов с функциями Python, что позволяет нам осуществлять диалог с блокчейном по Сети при помощи HTTP запросов.

Создаем три метода:

  • /transactions/new для создания новой транзакции в блоке
  • /mine для майнинга нового блока на сервере
  • /chain для возвращения полной цепочки блокчейна.
Настраиваем Flask

Наш «сервер» сгенерирует один-единственный узел сети в блокчейн-системе. Давайте напишем немного шаблонного кода:

import hashlib import json from textwrap import dedent from time import time from uuid import uuid4 from flask import Flask class Blockchain(object): ... # Instantiate our Node app = Flask(__name__) # Generate a globally unique address for this node node_identifier = str(uuid4()).replace('-', '') # Instantiate the Blockchain blockchain = Blockchain() @app.route('/mine', methods=['GET']) def mine(): return "We'll mine a new Block" @app.route('/transactions/new', methods=['POST']) def new_transaction(): return "We'll add a new transaction" @app.route('/chain', methods=['GET']) def full_chain(): response = { 'chain': blockchain.chain, 'length': len(blockchain.chain), } return jsonify(response), 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) Краткие пояснения к тому, что мы добавили:

Строка 15: Инстанцирует узел. Подробнее о Flask можно почитать здесь. Строка 18: Создает произвольное имя для узла. Строка 21: Инстанцирует класс Blockchain. Строки 24-26: Создает конечную точку /mine, то есть запрос GET. Строки 28-30: Создает конечную точку /transactions/new, то есть запрос POST, так как именно туда мы и будем отсылать данные. Строки 32-38: Создает конечную точку /chain, который возвращает блокчейн целиком. Строки 40-41: Запускает сервер на порту 5000.

Конечный пункт для транзакций

Вот как будет выглядеть запрос на транзакцию. Именно это пользователь отсылает на сервер:

{ "sender": "my address", "recipient": "someone else's address", "amount": 5 } Метод класса для добавления транзакции в блок у нас уже есть, поэтому дальше все легко. Давайте напишем функцию для добавления транзакции:import hashlib import json from textwrap import dedent from time import time from uuid import uuid4 from flask import Flask, jsonify, request ... @app.route('/transactions/new', methods=['POST']) def new_transaction(): values = request.get_json() # Check that the required fields are in the POST'ed data required = ['sender', 'recipient', 'amount'] if not all(k in values for k in required): return 'Missing values', 400 # Create a new Transaction index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount']) response = {'message': f'Transaction will be added to Block {index}'} return jsonify(response), 201Конечный пункт для майнинга

Именно в этой конечной точке творится вся магия, но ничего особо сложного в нем нет. Она должна делать три вещи:

  1. Рассчитывать доказательство работы
  2. Выдавать майнеру (то есть нам) вознаграждение, добавляя транзакцию, с ходе которой мы получаем одну монету
  3. Встраивать новый блок в цепочку
import hashlib import json from time import time from uuid import uuid4 from flask import Flask, jsonify, request ... @app.route('/mine', methods=['GET']) def mine(): # We run the proof of work algorithm to get the next proof... last_block = blockchain.last_block last_proof = last_block['proof'] proof = blockchain.proof_of_work(last_proof) # We must receive a reward for finding the proof. # The sender is "0" to signify that this node has mined a new coin. blockchain.new_transaction( sender="0", recipient=node_identifier, amount=1, ) # Forge the new Block by adding it to the chain block = blockchain.new_block(proof) response = { 'message': "New Block Forged", 'index': block['index'], 'transactions': block['transactions'], 'proof': block['proof'], 'previous_hash': block['previous_hash'], } return jsonify(response), 200 Обратите внимание, что в качестве получателя созданного блока указан адрес узла. Большая часть того, что мы тут делаем, сводится к взаимодействию с методами нашего класса Blockchain. По завершению этого шага основная работа закончена, можно начинать диалог.

Шаг третий: Диалог с блокчйном

Для взаимодействия с API в рамках системы можно использовать старый-добрый cURL или Postman.

Запускаем сервер:

$ python blockchain.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) Давайте попробуем создать блок, отправив запрос GET по адресу localhost:5000/mine: Теперь создаем новую транзакцию, отправив запрос POST, содержащий ее структуру, по адресу localhost:5000/transactions/new: Если вы работаете не с Postman, вот как сформулировать аналогичный запрос в cURL:$ curl -X POST -H "Content-Type: application/json" -d '{ "sender": "d4ee26eee15148ee92c6cd394edd974e", "recipient": "someone-other-address", "amount": 5 }' "http://localhost:5000/transactions/new" Я перезапустил сервер и создал еще два блока, чтобы в итоге получилось три. Давайте изучим получившуюся цепочку через запрос localhost:5000/chain:{ "chain": [ { "index": 1, "previous_hash": 1, "proof": 100, "timestamp": 1506280650.770839, "transactions": [] }, { "index": 2, "previous_hash": "c099bc...bfb7", "proof": 35293, "timestamp": 1506280664.717925, "transactions": [ { "amount": 1, "recipient": "8bbcb347e0634905b0cac7955bae152b", "sender": "0" } ] }, { "index": 3, "previous_hash": "eff91a...10f2", "proof": 35089, "timestamp": 1506280666.1086972, "transactions": [ { "amount": 1, "recipient": "8bbcb347e0634905b0cac7955bae152b", "sender": "0" } ] } ], "length": 3 }

Шаг четвертый: Консенсус

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

Распознаем новые узлы

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

  1. /nodes/register, который будет принимать список новых узлов в URL формате
  2. /nodes/resolve для внедрения алгоритма консенсуса, который будет разрешать возникающие конфликты и отслеживать, чтобы в узле содержалась правильная цепочка.
Нам нужно подкорректировать конструктор блокчейна и обеспечить метод для регистрации узлов:... from urllib.parse import urlparse ... class Blockchain(object): def __init__(self): ... self.nodes = set() ... def register_node(self, address): """ Add a new node to the list of nodes :param address: <str> Address of node. Eg. 'http://192.168.0.5:5000' :return: None """ parsed_url = urlparse(address) self.nodes.add(parsed_url.netloc) Заметьте: мы использовали set() для хранения списка узлов. Это нехитрый способ гарантировать, что при добавлении новых узлов будет соблюдаться индемпотентность — то есть сколько бы раз мы ни добавляли какой-то конкретный узел, он будет засчитан только единожды.

Внедряем алгоритм консенсуса

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

... import requests class Blockchain(object) ... def valid_chain(self, chain): """ Determine if a given blockchain is valid :param chain: <list> A blockchain :return: <bool> True if valid, False if not """ last_block = chain[0] current_index = 1 while current_index < len(chain): block = chain[current_index] print(f'{last_block}') print(f'{block}') print("\n-----------\n") # Check that the hash of the block is correct if block['previous_hash'] != self.hash(last_block): return False # Check that the Proof of Work is correct if not self.valid_proof(last_block['proof'], block['proof']): return False last_block = block current_index += 1 return True def resolve_conflicts(self): """ This is our Consensus Algorithm, it resolves conflicts by replacing our chain with the longest one in the network. :return: <bool> True if our chain was replaced, False if not """ neighbours = self.nodes new_chain = None # We're only looking for chains longer than ours max_length = len(self.chain) # Grab and verify the chains from all the nodes in our network for node in neighbours: response = requests.get(f'http://{node}/chain') if response.status_code == 200: length = response.json()['length'] chain = response.json()['chain'] # Check if the length is longer and the chain is valid if length > max_length and self.valid_chain(chain): max_length = length new_chain = chain # Replace our chain if we discovered a new, valid chain longer than ours if new_chain: self.chain = new_chain return True return False Первый метод valid_chain() отвечает за проверку цепочек на валидность, проходя каждый блок и верифицируя и хэш, и доказательство.

resolve_conflicts() — метод, который прорабатывает все соседние узлы: скачивает их цепочки и проверяет их описанным выше способом. Если при этом найдена валидная цепочка длиннее, чем наша, производится замена.

Давайте введем в наш API две конечные точки, один для добавления соседних узлов, другой для разрешения конфликтов:

@app.route('/nodes/register', methods=['POST']) def register_nodes(): values = request.get_json() nodes = values.get('nodes') if nodes is None: return "Error: Please supply a valid list of nodes", 400 for node in nodes: blockchain.register_node(node) response = { 'message': 'New nodes have been added', 'total_nodes': list(blockchain.nodes), } return jsonify(response), 201 @app.route('/nodes/resolve', methods=['GET']) def consensus(): replaced = blockchain.resolve_conflicts() if replaced: response = { 'message': 'Our chain was replaced', 'new_chain': blockchain.chain } else: response = { 'message': 'Our chain is authoritative', 'chain': blockchain.chain } return jsonify(response), 200 На данном этапе, если хотите, можете привлечь другие машины и насоздавать разных узлов для вашей системы. Или добиться того же используя разные порты на одной машине. Я создал новый узел на другом порте той же машины, и позволил исходному узлу его распознать. Таким образом, получилось два узла: localhost:5000 и localhost:5001. В узел номер два я добавил побольше блоков, чтобы цепочка получилась однозначно длиннее. После чего вызвал GET /nodes/resolve в первом узле — и алгоритм консенсуса заменил его цепочку на цепочку второго. Ну, вот и все. Теперь собирайте друзей и тестируйте вам блокчейн совместными усилиями.

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

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

habr.com

Язык программирования для написания блокчейн-проектов: как заработать на технологии?

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

Итак, сегодня The Coin Shark сделает обзор криптовалютных мемов, и покажет как отреагировала современная онлайн-культура на бум, связанный с биткоином, криптовалютами, майнингом и ICO-кампаниями.

Содержание:(пожалуйста, нажмите на тему, чтобы перейти в нужный раздел)

  1. Немного истории
  2. Мемы по Биткоин
  3. Мемы о криптовалюте
  4. Мемы про майнинг
  5. Мемы про ICO
  6. Заключение

1. Немного истории

Интернет-мемы – явление онлайн пространства, зародившееся, пожалуй, одновременно с ним. Когда всемирная паутина опутала своей информационной сетью действительно весь земной шар, а люди в разных уголках планеты получили возможность общаться и обмениваться информацией также легко, как если бы они сидели за одним столом, мемы по большей части возникали и развивались в среде интернет-форумов. Новые онлайн-инструменты позволяли быстро обмениваться данными, а любой броский мем мог стать популярным и распространяться по сети с огромной скоростью. Мемы ширились через форумы, сервисы видеохостинга, социальные сети, и т.д. Это были интересные и смешные картинки, видео, gif-изображения, мелодии, отдельные слова, фразы и т.д. Мемами интернет-сообщество отвечало на все мировые тренды – политические, спортивные, технологические, культурные. Сложно сказать, какие мемы появились первыми, но среди первопроходцев определенно можно выделить lolcat (изображения котов со смешными подписями), O RLY?, факты о Чаке Норрисе, Pepe the Frog и многие другие.

2. Мемы про Биткоин

Хайп вокруг Биткоина уж точно не уступал хайпу вокруг последних президентских выборов в США, да и держался куда дольше. Сегодня о цифровом золоте говорят уже не так часто, а курс первой криптовалюты вовсе не радует тех, кто совсем недавно купил её по $10 или $15 тысяч. Однако, стремительный рост криптовалюты в 2017 году породил сотни и тысячи мемов. Биткоин начал уверенно расти еще в 2016 году, но именно 2017-тый стал для него золотым. Криптовалюта начала год с приблизительно $890 за монету, а закончила на отметке в $19,000 и более. Основными темами для мемов о Биткоине стал рост криптовалюты, её волатильность, биткоин-гики, те, кто пол года назад отказался купить монеты за гроши, и т.д.

Я: Я не могу поверить, что она выросла на 1500%!

Профессор: мне надоело слушать про этот БИТКОИН! Ничто не может вырасти настолько, оставаясь при этом хорошей инвестицией…

Я: я имел в виду оплату за обучение в колледже с 1980 года…

Hold like a pro (Удерживай профессионально)

“Я не собираюсь тратить эти монеты, пока на них нельзя будет купить весь магазин сладостей!”

И действительно, во времена стабильного роста курса Биткоина в 2017 году, придержав монеты неделю можно было окупить их покупку вдвое или даже больше!

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

– Мы должны отправится в прошлое, Марти!

– Спасти мир?

– Нет, купить биткоины!

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

“Просто жду, пока биткоин обвалится, чтобы купить его у тебя за крупицу того, что ты за него заплатил”.

И напоследок, мем про волатильность криптовалюты – стремительные колебания ее курса.

“Если ты не можешь выдержать мои 20%-ные падения, ты не заслуживаешь моей 600%-ной прибыли”.

3. Мемы о криптовалюте

Криптовалюту многие до сих пор считают новым финансово-информационным инструментом, однако, если задуматься, существует она уже достаточно давно. Сам Биткоин был запущен более 10 лет назад, а криптовалютный рынок со всей необходимой инфраструктурой начал оформляться в 2013-2014 годах. С начала 2018 года мы наблюдаем существенный спад этого рынка – Биткоин спустился ниже $6,5 тысяч, Ethereum и вовсе стоит меньше $200, при том, что начал он этот год с отметки более чем в $1000. По этому поводу, естественно, появилось множество мемов, например этот:

“Криптовалютные ожидания: январь 2017, март 2018”.

Говоря о криптовалютных мемах, нельзя не упомянуть о Dogecoin – проекте, который избрал в качестве своего названия и логотипа популярное изображение удивленной собаки японской породы сиба-ину. Мем возник и приобрел большую популярность в 2013 году. Он изображает собаку с текстом на фотографии, набранным шрифтом Comic Sans MS в различных цветах. Dogecoin — криптовалюта, разработанная на блокчейне Litecoin, она была запущена в конце 2013 года. Сегодня Dogecoin замыкает 20-тку ведущих криптовалют по уровню рыночной капитализации. Однако, это инфляционная монета, запас ее эмиссии не ограничен, а в настоящее время в обороте находится уже более 100 миллиардов монет, стоимостью примерно в $0.006 каждая. Dogecoin известен участием в благотворительности – так, в 2014 году сообщество криптовалюты участвовало в сборе 50 тысяч долларов для участия сборной Ямайки по бобслею в Зимних Олимпийских играх 2014 года. Сборная получила право принимать участие в соревнованиях, однако не имела средств на поездку в Россию. Such Doge.

4. Мемы про майнинг

Добыча криптовалюты – целая индустрия. Сейчас широкая аудитория уже не может выгодно майнить биткоины, Ethereum,  Litecoin и другие популярные криптовалюты на обычном железе. Майнинг – расшифровка алгоритма хеширования криптовалюты, результатом которого является создание нового блока в блокчейне, то есть формирование новой монеты. Как известно в начале 2010-тых биткоин можно было выгодно майнить на собственном ноутбуке. Сегодня для выгодной добычи потребуется специальное дорогостоящее оборудование, огромная майнинг-ферма или, как минимум присоединение к пулу майнеров. Многие криптовалюты, майнинг которых с годами значительно усложнился, раньше можно было добывать с помощью процессора. Этот вид майнинга назывался CPU-майнинг и был исторически первым. Затем вычислительной мощности процессоров стало не хватать, и появился GPU-майнинг на видеокартах. По этому случаю есть и мем:

“Я слышал, первые люди майнили на CPU”.

Майнинг – это проведение вычислительных операций. Они требуют немало электроэнергии, что чувствуют на себе как владельцы небольших ферм, так и те, кто добывают криптовалюту в промышленных масштабах. На эту тему есть вариация популярного мема “What if I told you” с изображением Морфеуса – героя серии фильмов “Матрица”.

“Что если я скажу тебе, что майнинг Биткоина потребляет больше электроэнергии, чем 139 стран?”

5. Мемы про ICO

ICO – выпуск и продажа токенов – цифровых “акций”, свободных от государственного регулирования и сложностей, связанных с функционированием фондового рынка.

Первое публичное предложение монет провел проект Mastercoin в 2013 году, собрав около $5 млн. Cегодня в мире проходят сотни ICO, предлагающих инвестировать в создание платежных платформ, блокчейн-банков, облачных сервисов, систем транспорта, площадок монетизации творческой деятельности и многого другого. К сожалению, несмотря на всю надежность технологии блокчейн, ICO нередко может оказаться мошенничеством, а потому этот вид инвестиций, при всей своей привлекательности, не защищен от рисков. Золотое время ICO-проектов – 2016-2017 год. Тогда многим стартапам удавалось привлечь необходимые для реализации своего проекта инвестиции. В то же время, финансовые регуляторы неоднозначно отнеслись к первичному предложению монет, а некоторые из них, например Китай, и вовсе запретили его.

“ICO, стартапы, SEC – Комиссия по ценным бумагам и биржам США”.

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

“ICO краудсейл – реальный продукт”.

6. Заключение

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

Подписывайтесь на новости The Coin Shark в Facebook: https://www.facebook.com/coinshark/

 

thecoinshark.net

Блокчейн программирование — все нюансы - BITSIDE

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

Блокчейн программирование: основы

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

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

Есть ряд языков программирования, на которых стоит сосредоточить внимание начинающему блокчейн-разработчику. Многое зависит от того, на какой платформе он намерен создавать децентрализованные приложения. Не лишним будет посмотреть рейтинги самых популярных языков программирования. Например, судя по индексу TIOBE в июле 2018 в топ-3 входят Java, C и C++.

Чтобы создать основу для криптопрограммирования, лучше начать с C++. На этом языке написан клиент Bitcoin Core. Затем можно перейти к экспериментам с Node.JS, Python, Perl и другими релевантными языками, которые совместимы, поддерживаются или обычно используются при создании криптовалютной среды.

Для разработки криптотехнологий можно сфокусироваться на C/C++ с OpenCL / Cuda для GPU программирования, советует основатель консалтинговой фирмы Blockgram Базель Измаил. Пользу от изучения можно получить, сфокусировавшись на таких направлениях как кошельки, майнинговые сервисы и пулы. Здесь также в первую очередь пригодится опыт С или C++.

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

Несколько книг, которые понадобятся начинающему блокчейн-разработчику:

блокчейн программирование

Что учить для работы с Ethereum и Биткоин

Биткоин написан на C++. Для знакомства с темой отлично подойдут гайды Дэвида Деросы и другие ресурсы:

  1. Bitcoin Script Language: первая и вторая части.
  2. Стандартные скрипты в программировании блокчейна.
  3. «Программирование блокчейн на C#» есть в свободном доступе на GitBook.
  4. Тестовое консольное решение, которое поможет создать блок-приложение за несколько минут.
  5. Много полезного можно узнать в сообществе разработчиков биткоина.
  6. Список полезных материалов о программировании биткоина и связанных с ним проектов.

Ethereum — децентрализованная среда с открытым исходным кодом. Разработчик получает массу интересных возможностей. Но в сети советуют сосредоточится на изучении языка Go и освоить все, что связано с децентрализованными приложениями (DApps). Вот с чего лучше начать изучение последних:

  1. Если нет совершенно никаких знаний в разработке придется начать с нуля. Codeacademy предлагает пробную версию курсов «Learn Java Script» и «Learn Java». Вступительные модули помогут разобраться во всех базовых принципах обоих языков. В том числе функции, массивы и циклы, а также jQuery для JavaScript.
  2. После изучения основ можно переключиться на Solidity, язык на котором пишут смарт-контракты Эфириума. Познакомится с ним можно здесь.
  3. Ether.fund содержит раздел посвященный смарт-контрактам на Solidity. Здесь можно узнать много интересного и найти шаблоны smart-контрактов.
  4. На Github Ethereum есть большой список ресурсов, которые помогут в разработке DApps.
  5. Полезная вводная статья по программированию DApp на базе смарт-контрактов.
  6. Популярный гайд «Введение в разработку DАpp». В нем пользователь познакомится с разработкой DApp с помощью блокчейн-клиента Geth и фреймворка Meteor.js.

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

программирование для блокчейн

Как создают смарт-контракты

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

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

Смарт-контракты создаются на специальных площадках. Их количество растет из-за интереса к технологии. В числе популярных платформ, кроме Ethereum, NEM, Hyperledger и Stellar. Лучше выбрать одну из них и подробно изучить.

Стандартным выбором является Ethereum. Тут мы получаем функциональные смарт контракты и развитое сообщество. Последнее особенно важно для ICO-проектов, которые ищут платежеспособных пользователей.

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

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

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

программирование блокчейн

Программирование блокчейн

Для разработки blockchain знания языка программирования и опыта в написании кода не хватит. Блокчейн-разработчик — не просто программист, а еще и специалист, понимающий все ключевые аспекты технологии

  1. Основы: что такое блок, распределенная база данных, их виды и как она работает; механизмы консенсуса; блок и транзакции в распределенном реестре; как происходит майнинг и другие базовые знания.
  2. Криптография: все то, что связано с хешированием.
  3. Разработка блокчейна: начиная с изучения нужных языков программирования и заканчивая написанием структуры блока и других частей системы.
  4. Смарт-контракты: начиная с подходящих для этого платформ и заканчивая ключевыми моментами написания контрактов для разных целей.

Чтобы получить необходимые знания, вы можете посещать офлайн-курсы, лекции и конференции. Также придется стать постоянным читателем специализированной литературы, отраслевых ресурсов, каналов в Telegram, форумов Reddit и BitcoinTalk.

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

Полезные курсы можно выбрать из нашего материала. Неплохо подойдет набор из четырех курсов от Университета Буффало на Coursera.

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

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

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

Выводы

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

Чтобы их обрести, придется потратить не один месяц. Сделать это можно на онлайн и офлайн-курсах. Также стоит посещать конференции, лекции, читать отраслевые литературу, ресурсы и форумы.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

bitside.org

Эволюция блокчейна

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

Введение

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

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

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

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

В качестве предмета данного анализа было выбрано исследование GitHub по ряду причин:

1.    GitHub – это крупнейшая в мире платформа для совместной работы над программным обеспечением; уже создано более 68 миллионов проектов, в которые вовлечены 24 миллиона участников.

Рисунок 1.

2.   GitHubпринимает активное участие в основных блокчейн-проектах.

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

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

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

Блокчейн процветает в открытой среде

Хотя обмен программным кодом на общественном форуме был доступен уже 1950-е годы, платформы с открытым исходным кодом стали хабами для разработки программного обеспечения только 30 лет назад (см. рисунок 2). Интернет стал рычагом распространения открытого исходного кода в массах: если раньше деятельность с таким кодом была возможна по большей части в академических кругах, то всемирная паутина сделала это доступным поклонникам и экспертам всех мастей: любителей и профессионалов, частных лиц и коммерческих предприятий. Впоследствии революционные инновации способствовали росту экономики совместного потребления, которая переместила разработку программного обеспечения на платформы с открытым исходным кодом. 

Рисунок 2.

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

Основной предмет анализа данных, предоставленных GitHub – это хранилище/репозитории. Репозиторий содержит соответствующий код и файлы проектов, в которых находится действующий протокол и программа. В этом отчете мы используем термины «репозиторий» и «проект» в качестве синонимов. Мы также рассмотрим два основных типа авторов проектов: пользователей - лиц, не имеющих известной принадлежности к какому-либо учреждению, и организации, связанные со сферой финансовых услуг, стартапами, исследовательскими центрами или занимающиеся разработкой программного обеспечения.

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

Репозитории организаций

Код, на котором работает биткоин, был создан в 2009 году. С тех пор количество блокчейн-проектов на GitHub значительно выросло (среднее число – 8600 проектов в год). Однако в 2016 году зарегистрировано 27000 новых проектов. 

Рисунок 3.

Рост числа проектов был обусловлен появлением новых инструментов, созданных специально для разработок на блокчейне (см. рисунок 4). 

Рисунок 4.

Анализ блокчейн-репозиториев и их контента показал, что все больше компаний вовлекается в эту сферу. В 2010 году компании разработали меньше 1 процента от числа всех проектов. В 2017 году на организации приходится уже более 11 процентов. И недавние данные о том, насколько коммерческие организации могут преуспеть, работая над инициативами по внедрению блокчейна на открытом коде кажутся довольно многообещающими; некоторые крупные коммерческие структуры уже работают в этом направлении.

Некоторые разработанные компаниями проекты имеют особое значение, некоторые из них привели к появлению новых платформ (таких как Ethereum, Ripple, Corda и Quorum). Проекты, разрабатываемые организациями, как правило, обновляются регулярнее, чем те, которые разрабатываются обычными пользователями; их также в пять раз чаще копируют. Это говорит о том, что блокчейн-сообщество считает их наиболее релевантными.

Когда проект копируется, весь контент становится доступным для аккаунта, скопировавшего репозиторий, тем самым работая де-факто как механизм передачи знаний. Этот процесс обычно называют сетью цитирования: проекты, которые чаще всего копируются, играют центральную роль в сети репозиториев. Это определяется количеством отсылок на них.Так, например, некоторые из основных проектов были разработаны и поддерживаются следующими организациями: реализация C ++ и Go для Эфириума, клиент Python для Эфириума. Вы можете самостоятельно изучить топологию сети проектов в GitHub. 

Пройдя по ссылке, вы увидите интерактивный график. Имейте в виду, что первоначальные проекты Эфириум и Биткоин поддерживаются организациями (фондами) и что огромное количество репозиториев и блокчейн-приложений в GitHub фактически построено на базе этих двух платформ. Если коротко, проекты, созданные организациями, по факту создают основной код для тысяч других проектов. Из 20 наиболее центральных блокчейн-проектов (на основании популярности, цитирования и сотрудничества) 18 были созданы именно компаниями (см. таблицу 1).

Таблица 1.

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

Эволюция блокчейна – эволюция сообщества      

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

В блокчейн-пространстве сообщества обычно объединяют не менее 25 проектов, также включая кластеры, состоящие из сотни проектов. (интерактивная доска по ссылке Сообщества вокруг репозиториев).

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

Неудивительно, что это, по-видимому, связано со склонностью многих ICO дополнять блокчейн Эфириума (более подробно об ICO читайте в статье «InitialCoinOffering: A new paradigm»). Эта платформа позволяет разработчикам и стартапам выпускать свою собственную валюту на блокчейне Эфириума через смарт-контракты, в том числе посредством ICO, что может значительно снизить барьер для входа новых токенов на рынок.

Интересный пример того, как разрозненные сообщества объединяются, – это криптовалюта Monero, созданная в 2014 году. Monero имеет разные атрибуты, отличные от биткоина относительно уровня конфиденциальности (без повторного использования разрешенных адресов), масштабируемости (без ограничения по размеру) и безопасности (касательно децентрализации). Тем не менее, сообщество вокруг Monero и связанных с ним проектами, имеет прочную связь с сообществом, которое поддерживает основной репозиторий биткоина.

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

Уровень банкротства среди блокчейн-проектов

Суровая реальность в мире открытых исходных проектов заключается в том, что большинство из них либо закрываются, либо не достигают поставленных целей. К сожалению, блокчейн-репозитории не являются исключением. Наш анализ показал, что активны только 8 % проектов, обновленные не позднее чем 6 месяцев назад. При этом среди проектов, разработанных пользователями, активны лишь 7 %, среди проектов компаний – 15 %.

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

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

2.   Во-вторых, количество вовлеченных людей в проект. Наш анализ показывает, что большинство обанкротившихся проектов – это те, в которых один разработчик выполняет большую часть работы. Оказалось, что таких проектов большинство. Часто этот ведущий разработчик переключает внимание на другие проекты или просто отключается. С другой стороны, большинство выживших проектов имеют несколько разработчиков с меньшей концентрацией активности, приписываемых одному конкретному создателю. Как и выяснилось, большинство организаций структурировано именно таким образом.

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

Языки программирования для блокчейн-проектов в сфере финансовых услуг

У потенциальных разработчиков в первую очередь должен возникать вопрос: «С чего начать?». Чтобы ответить на этот вопрос, важно выяснить, что находится в основе уже функционирующих проектов.

Анализ данных показал, что язык C ++ чаще других используется для создания репозиториев. Это неудивительно, учитывая, что C ++ уже некоторое время используется в индустрии финансовых услуг для разработки приложений, требующих эффективного управления памятью, а также высокой скорости работы и надежной защиты данных. Для криптовалютных проектов (в том числе и для биткоина) C ++ по-прежнему является предпочтительным языком. Для большинства центральных репозиториев на GitHub C ++ также является наиболее используемым языком программирования (см. Самые популярные языки в интерактивной информационной панели).

Однако мы также обнаружили, что язык программирования Go, разработанный Google в 2009 году, постепенно набирает обороты. В настоящее время это второй по популярности язык, используемый для блокчейн-проектов. Всего два года назад на базе Go было разработано менее 2 процентов всех блокчейн-проектов. Программисты приписывают резкий рост интереса к Go его простоте и способности к масшабированию. И хотя компании в сфере финансовых услуг все же отдают предпочтение управлению памяти, высокой скорости и надежности, которые предоставляет C ++, масштабируемость, по-видимому, также является важным фактором для подобных организаций, которые взаимодействуют с многочисленными стейкхолдерами. Также считается, что проекты Эфириум и Hyperledger, которые включают в себя интеграцию других технологий в блокчейн с целью расширить ее использование за пределами криптовалют, благоприятствуют развитию языка Go.

Талантливый блокчейн-разработчики: где они?

Важной проблемой, с которой сталкиваются финансовые учреждения, является привлечение талантливых разработчиков для создания, внедрения или поддержки новых технологий. Ввиду этого мы пришли к выводу, что было бы полезно собрать информацию о местоположении одаренных людей. Большинство владельцев проектов GitHub – разработчиков, которые создают репозитории – живут в Северной Америке или Европе, но самая высокая концентрация IT-гениев в Сан-Франциско. Интересно, что следующие два города по популярности– это традиционные центры финансовых услуг: Лондон и Нью-Йорк (см. рисунок 5 и интерактивную доску Географическое распределение репозиториев).

Рисунок 5.

Мы обнаружили, что проекты разработчиков из Сан-Франциско довольно разнообразны: они включают в себя решения для бирж, кошельки для криптовалют, интерфейсы для разных блокчейнов (например, Ripple, Hyperledger и Ethereum) и инструменты для проведения платежей криптовалютами. Экосистема в Лондоне также разнообразна, но большинство проектов связаны с сообществом Эфириум, что подразумевает работу над такими технологиями, как цифровая идентичность, смарт-контракты и открытые API. Разработчики в Нью-Йорке, больше специализируются на проектах, ориентированных на традиционные финансовые услуги. Стоит также отметить высокий уровень активности в Китае, в частности, в Шанхае и Пекине. В обоих городах большинство проектов связаны с криптовалютами и биржами с акцентом на масштабируемость.

Чем данные GitHub могут быть полезны финансовому сектору?

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

Мы узнали, что фирмы по предоставлению финансовых услуг участвуют в разработке блокчейнов на GitHub. В GitHub есть два типа участников: создатель (commiter)  и наблюдатель (watcher). Создатель работает с кодом, в то время как наблюдатель следит за разработкой проекта без внесения предложений по развитию. До сих пор лишь немногие работники финансовой сферы были создателями проектов от имени фирм. Тем не менее, есть несколько высококлассных компаний, которые имеют свои собственные брендированные решения. 

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

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

Наш анализ позволит финансовым учреждениям и другим фирмам следующее:

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

2.   Определить, где высокая конкуренция, а где игроков на рынке меньше

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

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

5.    Оценить партнерские отношения и возможности сотрудничества

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

Источник

chainmedia.ru