Разработка на блокчейн: Как запустить свой блокчейн: выбираем движок

Содержание

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

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

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

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

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

Блокчейн с нуля

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

Написание с нуля кода блокчейн-ноды напоминает создание собственной базы данных с механизмом надежной сетевой репликации. Если вы поищете, сколько таких БД было создано за последние десятилетия, то найдете максимум сотню проектов. Огромной долей рынка владеют всего несколько компаний (Oracle, MS SQL Server, MySQL, PostgreSQL), а разработчики ядра таких систем ценятся крайне высоко.

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

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

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

Готовые блокчейн-движки

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

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

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

Ethereum

Этот комплекс ПО построен на базе ядра публичного блокчейна Ethereum. Публичный Ethereum использует консенсус типа Proof-of-Work, а его многочисленные тестовые сети — различные виды Proof-of-Authority и Proof-of-Stake консенсусов. ПО отвечает самым строгим критериям безопасности, проверено в десятках реально работающих сетей и, на мой взгляд, является наиболее развитым для создания блокчейнов с любыми видами консенсусов и полноценными, многофункциональными смарт-контрактами.

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

Код блокчейн-ноды и консенсус

Существуют две основных имплементации кода ноды Ethereum: на языке Rust (код, названия: poa-parity (старое) или openethereum(новое)) и на Go (код, название: geth).

На момент написания при построении PoA-сети на geth (Go) вам будет доступен только консенсус Clique — это простейший и небезопасный протокол без финализации, который можно использовать только в тестовых целях.

Консенсус, реализованный в poa-parity (Rust), состоит из двух алгоритмов: schedule валидаторов Aura и finality gadget GRANDPA. Именно этот вариант, проверенный и безопасный, работает в POA-сетях на базе Ethereum. POA Network работают также над имплементацией перспективного BFT-консенсуса HoneyBadger.

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

Смарт-контракты и управление сетью

POA Ethereum использует виртуальную машину EVM и смарт-контракты, которые лучше всего писать на языке Solidity. EVM давно стала стандартом для виртуальных машин с большим количеством готового кода и паттернов разработки. Код контрактов под EVM отвечает за большие суммы криптовалюты, и любая найденная уязвимость вызывает мощную реакцию сообщества и СМИ, поэтому безопасность контрактов EVM на текущий момент крайне высока.

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

Дополнительное ПО

С Ethereum можно использовать JavaScript-библиотеку web3.js, вне зависимости от консенсуса, валидаторов и ее расположения.

Для POA Ethereum существует репозитарий для автоматизации операций по развертыванию готовой сети — deployment-playbooks.

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

Готовая POA-сеть Ethereum присутствует в AWS, но я все же рекомендую контролировать запуск своими руками. Вы должны понимать, какие сервисы вы запускаете и как они работают.

EOS и его форки

Вторым по гарантиям работоспособности и безопасности будет EOS. “OS” в его названии появилась не случайно.

EOS можно запустить в качестве отдельной сети, в PoS- или PoA-варианте. Как и Ethereum, это ПО уже проверено в бою, обладает высокой безопасностью и функционалом, который позволяет запустить собственный блокчейн со смарт-контрактами для автоматизации любых сделок

Если Ethereum имеет простую систему адресов, то в EOS сразу же используется иерархическая система аккаунтов и права на различные действия. Все это делает EOS похожей по дизайну на операционную систему — «программу для запуска других программ».

В качестве межкорпоративной платформы EOS позволяет из коробки получить удобную систему управления аккаунтами и быстрый консенсус, а также легко интегрировать практически любой функционал при помощи плагинов на C++ и смарт-контрактов на C++/WebAssembly (например, можно добавить другую криптографию).

Дизайн консенсуса в EOS и быстрые блоки позволяют достичь очень быстрого времени ответа пользователю, что крайне важно для построения децентрализованных приложений со сложным функционалом (например, проекты Cyberway, Golos.io или соцсеть Commun). Cyberway недавно произвел сложнейшую миграцию всей бизнес-логики из предыдущего блокчейна прозрачно для пользователей, что лишний раз доказывает гибкость и универсальность EOS.

Код блокчейн-ноды и консенсус

Код EOS написан на C++ и развивался на основе опыта, полученного разработчиками при работе над движками Graphene, Bitshares, Steemit. Используется собственный вариант DPoS-консенсуса.

Сейчас почти все проекты, использующие DPoS, строят свои алгоритмы очень похожим на EOS образом: это аккаунты, «голосующие» балансом токена за топ валидаторов. Валидаторы подписывают блоки по одиночке, но каждый в назначенный квант времени, согласно расписанию. Затем они коллективно фиксируют так называемый Last Irreversible Block (LIB), на котором собирается 2/3 + 1 подписей от валидаторов.

Многие форки EOS пытаются улучшить это консенсус. Например, наш вариант Haya использует для фиксации LIB другой finality gadget — RANDPA, чтобы достичь времени финальности в 2-3 секунды.

Переход к корпоративному POA-консенсусу не вызывает затруднений, так как список валидаторов управляется системными смарт-контрактами.

Смарт-контракты и управление сетью

Смарт-контракты в EOS используют модифицированную виртуальную машину WebAssembly, обычно пишутся на языке C++ и могут создаваться и использоваться любым аккаунтом. Писать смарт-контракты не сложно, во многом они перекликаются с Solidity.

В EOS, как и в POA Ethereum, управление сетью, основной токен (или токены) и типы транзакций можно реализовать в системных смарт-контрактаx (вот, например, системный токен). Интересной особенностью контрактов EOS является использование абстракции table для хранения данных контракта. В Ethereum в основном используется mapping (ассоциативный массив).

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

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

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

Дополнительное ПО

BOSCore, Telos, Haya и еще десяток форков EOS доказывают, что это ПО интересно большому количеству проектов. Для EOS существует достаточно инструментов, и вам не придется с нуля реализовывать сопутствующее ПО.

Eosjs — аналог web3.js, позволяет работать с контрактами любой сети на базе EOS из браузера и любых приложений.

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

У EOS нет одного большого и мощного интегратора, как POA Network для Ethereum, поэтому каждый проект строит собственное решение. Тем не менее, основной код ноды стабилен и работает под серьезными нагрузками без сбоев.

Parity Substrate

Substrate создается командой компании Parity. Разработано огромное количество ПО: кошельки, блокчейн-ноды, системы смарт-контрактов, компиляторы, виртуальные машины.

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

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

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

Код блокчейн-ноды и консенсус

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

Что касается консенсуса, то можно выбрать из нескольких готовых вариантов или написать свой собственный. В большинстве случаев это PoA или DPoS, что в случае Substrate означает использование алгоритма Aura и GRANDPA.

Производительность блокчейнов на базе Substrate высока. Основная цепочка Polkadot была протестирована нами в конфигурации с 99 валидаторами, распределенными по трем континентам, и показала отличные результаты.

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

Смарт-контракты и управление сетью

Substrate, в отличие от Ethereum и EOS, обрабатывает транзакции при помощи кода, который размещается валидаторами, а не пользователями. Это код называется “runtime” и исполняется виртуальной машиной WebAssembly.

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

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

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

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

Дополнительное ПО

Для Substrate есть ряд полезных решений: polkascan — обозреватель блоков и комплекс программ на JS для работы с Polkadot и сетями на базе Substrate. Возможно, вам пригодятся ansible-сценарии для развертывания готового кластера на базе Substrate, который мы использовали для тестирования Polkadot.

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

Cosmos SDK

Cosmos — это проект на базе одной основной цепочки и множества дочерних блокчейнов, называемых «zones». Дочерние цепочки строятся на основе Cosmos SDK — набора ПО для построения блокчейнов.

Cosmos — это продолжение проекта Tendermint, из которого ключевыми технологиями является надежный консенсус и концепция Application, сходная с runtime в Substrate.

Как и в случае Polkadot+Substrate, блокчейн, созданный с помощью Cosmos SDK, может жить отдельно или подключиться к экосистеме Cosmos как дочерняя цепочка.

Весь комплекс ПО Cosmos написан на Go и отлично структурирован и активно используется. На его основе уже работают несколько проектов, среди которых Binance Chain.

Если ваши разработчики пишут на Go — Cosmos SDK может вам подойти. Он работает и активно развивается в реальных проектах, чьи блокчейны и транзакции можно увидеть в публичных сетях.

Код блокчейн-ноды и консенсус

Главная концепция Cosmos называется Application. Любой блокчейн представляет собой машину состояний, и в Cosmos она вынесена в отдельную часть кода.

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

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

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

Смарт-контракты и управление сетью

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

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

Для ограничения транзакций в Cosmos, как в Ethereum, используется газ. Исполняя транзакцию, валидаторы вычисляют ее стоимость в условных единицах «gas». Отправляя транзакцию, пользователь указывает цену, которую он готов платить за единицу газа и лимит, который он готов потратить. Это является основанием для вычисления цены за транзакцию.

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

Дополнительное ПО

Параллельно с созданием кода Application, Cosmos SDK позволяет сразу же получить код, который вызывает нужные функции с клиентских машин. Этот код можно использовать на сайте, работающем с Cosmos, или в кошельке (клиенте) сети.

На JavaScript я нашел несколько полезных библиотек: js-cosmos, cosmosjs и универсальную js-abci, реализующую интерфейс ABCI. Их удобно использовать, если взаимодействие с вашим блокчейном планируется из браузера. ABCI позволяет создавать Application на разных языках, среди которых Java, C++, Python. Проект lotion, например, позволяет создать блокчейн полностью на Javascript.

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

Подписывайтесь на канал Forklog в YouTube!

Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Ресурсы для изучения блокчейн-разработки с нуля

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

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

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

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

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

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

Начните разбираться с этого видео:

Затем следующие два. Там есть и то, о чём вы уже знаете, и новая информация. Это поможет уложить в голове суть технологии.

Затем перейдите к изучению конкретной технологии − Ethereum. Есть мнение, что она наиболее перспективна, несмотря на то, что находится на втором месте по капитализации после Bitcoin. Это объясняют наличием команды разработки и большого комьюнити.

Советуем почитать What is Ethereum и Mastering Ethereum.

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

Самый простой способ научиться Solidity-разработке − игра CryptoZombies. В процессе создания собственной игры с коллекционными крипто-предметами игрок учится писать смарт-контракты на Solidity. Она регулярно обновляется и учитывает последние Solidity-изменения.

В дополнение к CryptoZombies можно использовать следующие вещи:

  1. Серия Youtube-роликов для разработки dapp − объясняется всё максимально понятно, но есть минус: в систему были внесены некоторые изменения, так что могут вылезать ошибки синтаксиса. Это решается простым гуглением. А ещё с ошибками поможет справиться редактор Remix, но об этом позже.
  2. Курс Стефана Гридера − платный, но на него часто действует скидка, так что есть возможность пройти его за 10$. Контент качественный, с хорошими примерами.

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

Кроме того, следует разобраться с кошельками и клиентами Ethereum, протестировать браузерное расширение Metamask.

Уже после этого можно переходить к изучению более продвинутых вещей. Для начала почитайте документацию Solidity: там вы найдете примеры качественных децентрализованных приложений. Они также есть на Ethereum.org. Их можно копировать и проверять прямо в Remix IDE.

После того как вы начнёте хорошо разбираться в Solidity и смарт-контрактах, перейдите к приложениям с открытым исходным кодом, Crypto Kitties, например (код контракта можно увидеть на любом Ethereum-адресе через etherscan.io).

Ещё можно изучить следующие инструменты:

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

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

  • Software Engineering Daily, Blockchain − хорошо справляются с объяснением сложных тем, работают с лидерами блокчейн-тусовки
  • CryptoDisrupted − рассказывают об интересных блокчейн-проектах

Сообщество Ethereum, безусловно, наиболее крупное, а значит и разбираться с принципами работы технологии проще всего. Тем не менее было бы упущением не рассказать о других инновационных проектах:

  • Lisk − блочная цепь на JavaScript.
  • EOS − проект многосерийного блокчейн-предпринимателя, направлен на устранение недочётов Ethereum вроде масштабирования и безопасности.
  • Interchain Protocols − решения, созданные для упрощения транзакций между цепями блоков и масштабирования. Примеры − Cosmos, Polkadot, Interledger.
  • Hyperledger − работает над продвижением технологий межсетевых блок-цепей.
  • Holo − технология, решающая проблемы централизации при сохранении масштабируемости.

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

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

Источник: Ресурсы для изучения блокчейн-разработки на freeCodeCamp

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

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


Предлагаю читателям Хабрахабра перевод статьи «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:


Заключение


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

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

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

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

Как сделать свой блокчейн. Часть 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

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

Разработка на Blockchain — что изменится для разработчиков?

Эта статья является переводом поста Винсента Чена (Vincent Chen) и Рамона Рекуэро (Ramon Recuero), цели которого очень схожи с теми, что преследуем и мы, и написанного для таких разработчиков, которых мы хотели бы видеть на своих мероприятиях.

Введение


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

Целью нашего поста является:

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

Если же вы только начинаете разбираться в этой теме, мы рекомендуем вам начать с чтения bitcoin white paper и white paper для Ethereum.

Сдвиг парадигмы для разработчиков


Веб-приложения выгодно использование сетевого эффекта благодаря тому, что они придерживаются централизованного хранения информации. Построенные на общих открытых протоколах (например, TCP/IP и HTTP), компании Yelp, Facebook и Amazon выигрывают от того, что всех их пользователи и, в результате, их данные находятся в одном месте. Таким образом, они не просто получают преимущество над конкурентами, у которых имеется меньше данных, но и держат полный контроль над тем, как монетизировать эти данные. Цитируя криптоинвестора Джоэла Монегро:
«Нынешняя парадигма интернета извлекает максимум полезности из толстого слоя приложений, в то время как тонкий слой коммуникационных протоколов под ним имеет минимальную ценность».

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

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

Монегро считает, что из-за этого сдвига парадигмы разработчики должны иначе относится к своим приложениям:

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

Ethereum


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

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

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

Dapps, токены и смарт-контракты


Нынешние блокчейн-разработчики обычно создают распределенные приложения (dapps, сокращение от distributed apps) поверх существующих протоколов для того, чтобы решить конкретные бизнес-задачи и удовлетворять конечных пользователей. Таким образом, разработчики могут выпускать токены, или койны (app coins), которые используются для выполнения конкретных «функций» распределенных приложений, в отличии от «универсальных» токенов, которые используются как монетки для игровых автоматов. Эти функции и есть смарт-контракты, которые предоставляют сервисы распределенного приложения в обмен на цифровой актив, тем самым убирая необходимость в посреднике для проверки транзакций. Другими словами, смарт-контракты обещают, что за один токен вы получите одну партию за игровым автоматом.

По мере того, как функциональность распределенный приложений становится все более востребованной, стоимость фиксированного количества койнов приложений растет как функция спроса и предложения. Другими словами, если ваш игровой автомат оказывается по-настоящему запоминающимся и начинает пользоваться спросом, то ограниченное количество токенов начинает расти в цене. Это принцип, лежащий в основе ICO (initial coin offereing), в рамках которых разработчики занимаются сбором инвестиций предлагая койны в обмен на капитал для финансирования их проектов.

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

Возможности на ранних этапах


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

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

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

Технологические инновации блокчейна многих натолкнули на идею построения нового, децентрализованного веб-стека, который будет независим от централизованных правительств и корпораций. Традиционный стек в вебе состоит из кирпичиков вроде TCP/IP, DNS, баз данных, веб-серверов, систем аутентификации и CDN, и мы в процессе воспроизведения этих компонентов при помощи базовых платформ вроде Ethereum.

Проблемы неизменяемости


К сожалению, технология похожая на ранние итерации JavaScript, почти всегда содержит в себе проблемы, самые частые из которых связаны с устойчивостью протоколов к фальсфикации. Разработчики не могут изменить лежащий в основе блокчейн или высокоуровневые смарт-контракты. Отсутствует простой способ версионирования библиотеки или контрактов. Недавний баг в Parity, который заблокировал средства объемом в 150 000 000 $, наряду с другими подобными инцидентами, лишний раз напоминает нам о необходимости построения надежных архитектур.

Брэндон Милман, разработчик в 0x, следующим образом описывает влияние неизменяемости блокчейна на безопасность:

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

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

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

Ограничения Ethereum


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

Более того, спецификация Ethereum препятствует вычислениям в реальном времени. Обработка блока транзакций занимает до 15 секунд (что прямо-таки молниеносно в сравнении с 10 минутами, которые требуются биткоину). В результате, разработчики вынуждены писать асинхронный код, взаимодействующий с фронтенд-фреймворками, которые умеют работать с такой моделью обновления состояний (например React).

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

Начало работы


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

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

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


Нельзя не упомянуть и сообщества для разработчиков:
Если вы предпочитаете учиться на практике, вот вам несколько идей для проектов:
  • Создайте свой собственный кошелек. Это может быть веб, мобильное или десктоп-приложение.
  • Создайте свой собственный ERC-20 токен и разверните его в тестовой сети.
  • Замените криптокотиков на криптособачек, крпитотанки или криптозомби и разверните в тестовой сети.

Вперед в будущее


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

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



От себя хотим обратить внимание и на русскоязычное сообщество блокчейн-разработчиков:
Ну и конечно, пригласить на нашу специализированную конференцию DeCenter TokenConf про блокчейн-технологию. Это единственная конференция в России, целиком и полностью рассчитанная на аудиторию разработчиков блокчейна. За рамки программы принципиально вынесены все вопросы, касающиеся ICO, майнинга, криптовалют и спекуляций. Только чистая технология.

Как создать первое приложение на блокчейне за 15 минут? — HUB

Нажмите кнопку «Create a new account». Проверьте, что выбрали сеть Testnet в левом нижнем углу. Это позволит получить тестовые токены WAVES для экспериментов с транзакциями!

Такая страничка станет доступна после создания аккаунта. Обратите внимание, что у аккаунта есть четыре поля: адрес и публичный ключ, которые позволяют идентифицировать его в сети, а также приватный ключ и seed-фраза, выступающие в роли пароля. Раскрывать приватный ключ и seed-фразу нельзя! Поэтому символы скрыты звездочками.

В верхней части окна Waves Keeper отображается баланс. Сейчас там достаточно угнетающе горят нули. Давайте пополним баланс аккаунта с помощью Waves Faucet, который позволяет «начеканить» тестовых монет. Кликните на «Transactions» и перейдите в Waves Explorer:

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

В левом нижнем углу перейдите на страницу Faucet:

Вбейте адрес своего аккаунта и докажите, что вы не робот. После этого получите 10 тестовых WAVES на счет:

Теперь у нас есть стартовый капитал для экспериментов! Приступим к самому интересному и научим наше приложение общаться с блокчейном. В наш уже созданный аккаунт можно сохранять данные, используя его Data State. Пока он пустой:

С помощью транзакций мы можем менять данные аккаунта. Это несложно, ведь для таких задач у Waves Keeper есть API: https://docs.waves.exchange/en/waves-keeper/waves-keeper-api!

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

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

На картинке выше нас интересует тип 12 – Data Transaction. Наша цель – хранить данные.

Отправка сертификатов в блокчейн

Используем Waves Keeper, чтобы отправить транзакцию.

Пример транзакции в Waves Keeper:

https://gist.github.com/vlzhr/4c2015f1c614b656826a3622d786c084

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

Функция sendData:

https://gist.github.com/vlzhr/448a0a26072960a80ef60ce4d4151ac6

Теперь при нажатии на кнопку «send!» пользователь добавляет сертификат в блокчейн:

После ввода пароля от расширения отобразится информация по отправляемой транзакции и предложение подписать ее:

Какую информацию о транзакции мы видим? Прежде всего – тип Data Transaction, который означает, что цель транзакции – отправить данные в блокчейн. Мы видим и сами данные: под ключом «1» пользователь сохраняет имя владельца диплома с этим номером – «Sasha Ivanov». Также видим уникальный идентификатор транзакции и комиссию за отправку транзакции в блокчейн.

Транзакция отправлена! Это значит, как минимум, три вещи:

  1. Баланс аккаунта уменьшился, так как 0.001 WAVES ушли на оплату комиссии.

2. На странице аккаунта в Waves Explorer в списке транзакций добавилась одна Data Transaction.

3. Во вкладке Data появился сертификат. Теперь в блокчейне зафиксирован факт владения Сашей Ивановым сертификатом номер 1. Никто не сможет скрыть или изменить эту информацию.

Верификация подлинности сертификатов

Мы разработали приложение, которое позволяет владельцу мероприятия выпускать сертификаты. Waves Explorer отображает сертификаты в блокчейне.

Тем не менее удобнее проверять подлинность диплома через отдельную форму, без необходимости разбираться в Waves Explorer. Сделаем для этой формы дополнительную страницу!

верстка check.html:

https://gist.github.com/vlzhr/e7e7c849980f19e49fae84a20b1ddb0c

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

Осталось сделать так, чтобы кнопка «check cerificado!» работала. Добавим хандлер checkData():

Функция checkData:

https://gist.github.com/vlzhr/b2b455a4de8e19d44ccff03b90478dfe

Основной момент – отправка GET-запроса к API блокчейна: https://testnodes.wavesnodes.com/addresses/data/3N6EmqqQ1pZderX8sNMrfVuEo85ocPoqs2M.

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

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

Задача со звездочкой для удобства пользователей

Итак, наше приложение теперь имеет две страницы: добавления и верификации сертификатов! Последний пункт, который стоит реализовать – возможность делиться ссылкой на проверку своего сертификата.

Функционал шеринга сертификата:

https://gist.github.com/vlzhr/8fc5394215b14e5b599c65edf1bf4dfc

Ссылку на проверку сертификата можно отправлять так, чтобы проверяющему не было нужно заполнять форму. Ссылки вида “URL/check.html?2 VladimirZhuravlev” достаточно, чтобы форма автоматически заполнилась данными 2 Vladimir Zhuravlev.

Заключение

За достаточно короткое время мы разработали полноценное веб-приложение Certificado, разобрались в том, что блокчейн – это удобный способ хранения данных, а Waves Keeper и Waves Explorer – инструменты работы с ним, которые нужно интегрировать в свое приложение.

Используя блокчейн вместо обычного централизованного хранилища данных, можно добавить приложению уникальный функционал и повысить его ценность для клиентов. В экосистеме Waves есть множество инструментов, упрощающих процесс разработки. Помимо разобранных нами Keeper и Explorer, существуют Waves Signer, клиентские библиотеки для разных языков программирования и собственный язык смарт-контрактов Ride.

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

Присоединяйтесь к Waves Community

Читайте Waves News channel

Смотрите Waves Youtube

Подписывайтесь на Waves Twitter, Waves Subreddit

Пишем свой блокчейн

Самый быстрый способ изучить работу Блокчейнов – это создать свой блокчейн. Стоит лишь только попробовать!

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

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

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

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

Если вы не уверены в том, что такое хэш, то вот объяснение.

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

Убедитесь в том, что у вас установлен Python 3.6+ (также как и pip). Вам также необходимо установить библиотеку Flask и прекрасную библиотеку Request:

pip install Flask==0.12.2 requests==2.18.4

О, вам также понадобится HTTP-клиент, наподобие Postman или cURL. Но все будет дальше.

Исходный код будет доступен здесь.

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

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

 	
class Blockchain(object):	
    def __init__(self):
        self.chain = []
        self.current_transactions = []
 	
    def new_block(self):
        # Создает новый Блок и добавляет его к цепочке
        pass

 	
    def new_transaction(self):
        # Добавляет новую транзакцию к списку транзакций
        pass
 	
    @staticmethod	
    def hash(block):
        # Хэшируем блоки
        pass
 	

    @property
    def last_block(self):
        # Возвращает последний блок в цепочке
        pass

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

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

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

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):
        """
      Создает новую транзакцию для того чтобы перейти к следующему искомому Блоку

        :параметр sender: <str> Адрес отправителя
        :параметр recipient: <str> Адрес получателя	
        :параметр amount: <int> Количество
        :return: <int> Индекс Блока, в котором будет хранится данная транзакция
        """

        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })
 	
        return self.last_block['index'] + 1

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

После того, как мы создали экземпляр нашего Блокчейна, нам необходимо заполнить его исходным блоком – блок у которого нет предшественников. Также нам необходимо добавить «proof» в наш исходный блок, который является результатом анализа (или алгоритма «доказательство выполнения работы»). По поводу анализа мы поговорим позднее.

Кроме этого, для создания исходного блока в нашем конструкторе, нам также необходимо добавить следующие методы: 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):
        """
        Создаем новый блок в нашем Блокчейне

 	 	
        :параметр proof: <int> proof полученный после использования алгоритма «Доказательство выполнения работы»
        :параметр previous_hash: (Опциональный) <str> Хэш предыдущего Блока
        :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]),
        }

 	
        # Сбрасываем текущий список транзакций
        self.current_transactions = []

 	
        self.chain.append(block)
        return block
 	
    def new_transaction(self, sender, recipient, amount):
        """
        Создает новую транзакцию для перехода к следующему замайненному Блоку

        :param sender: <str> Address of the Sender
        :param recipient: <str> Address of the Recipient
        :param amount: <int> Amount
        :return: <int> Индекс блока который будет хранить в себе эту транзакцию
        """

        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):
        """
        Создает a SHA-256 хэш блока

        :параметр block: <dict> Блок
        :return: <str>
        """

        # Мы должны быть уверены что наш Словарь упорядочен, или мы можем непоследовательные хэши
        block_string = json.dumps(block, sort_keys=True).encode()	
        return hashlib.sha256(block_string).hexdigest()

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

Алгоритм «Доказательство выполнения работы» (PoW) – это то, как новые блоки создаются или майнятся в блокчейне. Целью алгоритма PoW является нахождение такого числа (метки), которое будет решать проблему. Число должно быть таким, чтобы его было сложно найти и легко проверить. Говоря в вычислительном отношении не важно кем в сети это может быть сделано. В этом и заключается основная идея данного алгоритма.

Итак, давайте взглянем на простой пример, которой поможет нам во всем разобраться.

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

from hashlib import sha256


x = 5
y = 0  # Пока мы не знаем каким должен быть y


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):
        """
        Простой алгоритм Proof of Work:
         - Ищем число p' такое, чтобы hash(pp') содержал в себе 4 лидирующих нуля, где p это предыдущий p'
         - p это предыдущий proof, а p' это новый proof

        :параметр 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):
        """
        Проверяем Proof: Содержит ли hash(last_proof, proof) 4 лидирующих нуля?

        :параметр last_proof: <int> предыдущий Proof
        :параметр proof: <int> Тукущий Proof
        :return: <bool> True если все верно, иначе False.
        """
	
        guess = f'{last_proof}{proof}'.encode()	
        guess_hash = hashlib.sha256(guess).hexdigest() 	
        return guess_hash[:4] == "0000"

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

Наш класс практически готов, и мы готовы начать взаимодействовать с ним посредствам HTTP-запросов.

Мы будем использовать фреймворк Flask. Данный микро-фреймворк упрощает размещение конечных точек (endpoints) в 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):	
    ...

 	
# Создаем экземпляр нашего узла	
app = Flask(__name__)
 	
# Генерируем уникальный глобальный адрес для этого узла	
node_identifier = str(uuid4()).replace('-', '')

# Создаем экземпляр 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: Создаем endpoint для метода /mine, который является GET-запросом;
  • Строки 28-30: Создаем endpoint для метода /transactions/new, который является POST-запросом, поскольку мы будем отправлять сюда данные;
  • Строки 32-38: Создаем endpoint для метода /chain, который будет возвращать весь Блокчейн;
  • Строки 40-41: Запускаем наш сервер на порт 5000.

Endpoint для транзакций

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

{
 "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()


    # Проверяем, что обязательные поля переданы в POST-запрос
    required = ['sender', 'recipient', 'amount']
    if not all(k in values for k in required):
        return 'Missing values', 400

 	
    # Создаем новую транзакцию	
    index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])
 	
    response = {'message': f'Transaction will be added to Block {index}'}
    return jsonify(response), 201

Endpoint для майнинга

Наш endpoint майнинга – это то, где происходит магия, и в ней нет ничего сложного. Здесь совершаются три следующих вещи:

  1. Расчет алгоритма PoW;
  2. Майнер(ы) получают награду в виде транзакции, которая гарантируем им 1 биткойн;
  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():
    # Мы запускаем алгоритм PoW для того чтобы найти следующий proof...
    last_block = blockchain.last_block	
    last_proof = last_block['proof']
    proof = blockchain.proof_of_work(last_proof)

 	
    # Мы должны получить награду за найденный proof.
    # Если sender = "0", то это означает что данный узел заработал биткойн.	
    blockchain.new_transaction(
        sender="0",	
        recipient=node_identifier,
        amount=1,
    )


    # Формируем новый блок, путем добавления его в цепочку
    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. На данном этапе мы закончили с подготовкой нашего блокчейна и теперь готовы взаимодействовать с ним.

Вы можете использовать простой, но уже устаревший cURL или Postman, для взаимодействия с нашим API через сеть.

Запускаем наш сервер:
$ python blockchain.py* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Давайте попробуем смайнить блок. Для этого воспользуемся GET-запросом на http://localhost:5000/mine:

Создадим новую транзакцию с помощью POST-запроса на http://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"

Я перезагрузил свой сервер, и смайнил два блока, чтобы в итоге получилось три. Давайте проверим всю цепочку, с помощью запроса на http://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
}

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

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

  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):
        """
        Добавляем новый узел в список узлов

        :параметр address: <str> Адрес узла, например: '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):
        """
        Определяем, что данный блокчейн прошел проверку
 
        :параметр chain: <list> Блокчейн
        :return: <bool> True если прошел проверку, иначе False
        """

        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")
            # Проверяем, что хэш этого блока корректен
            if block['previous_hash'] != self.hash(last_block):
                return False

            # Проверяем, что алгоритм PoW корректен
            if not self.valid_proof(last_block['proof'], block['proof']):
                return False

 	
            last_block = block
 	
            current_index += 1

        return True

    def resolve_conflicts(self):
        """
        Это наш алгоритм Консенсуса, он разрешает конфликт путём
        замены нашей цепочки на самую длинную в нашей сети.

        :return: <bool> True если наша цепочка была заменена, False если это не так
        """

 	
        neighbours = self.nodes
        new_chain = None

        # Мы ищем цепочки длиннее наших
        max_length = len(self.chain)

        # Берем все цепочки со всех узлов нашей сети и проверяем их
        for node in neighbours:
            response = requests.get(f'http://{node}/chain')
 	
            if response.status_code == 200:
                length = response.json()['length']
                chain = response.json()['chain']

                # Проверяем, что цепочка имеет 
                # максимальную длину и она корректна
                if length > max_length and self.valid_chain(chain):
                    max_length = length
                    new_chain = chain

        # Заменяем нашу цепочку, если нашли другую, 
        # которая имеет большую длину и является корректной
        if new_chain:
            self.chain = new_chain
            return True
 	
        return False

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

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

Давайте зарегистрируем два endpoint-а в нашем 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

На этом этапе вы можете задействовать любое количество машин, по вашему усмотрению, и реализовать различные узлы в вашей сети. Или же реализовать все то же самое на одной машине, используя разные порты. Я это реализовал вторым способом, используя разные порты. То есть, я зарегистрировал другой узел, уже с имеющимся узлом. Итак, у меня есть два узла: http://localhost:5000 и http://localhost:5001.

После чего я замайнил новые блоки на узел 2, для того чтобы цепочка стала длиннее. Потом, я вызвал GET /nodes/resolve на узел 1, где цепочка была заменена по алгоритму Консенсуса:

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

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

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

Простейший блокчейн своими руками
10 полезных ресурсов по технологии blockchain

Ссылка на оригинальную статью
Перевод: Александр Давыдов

ведущих компаний-разработчиков блокчейнов — лучший консалтинг в области блокчейн

Тип услугРазработка индивидуального программного обеспеченияВеб-разработкаМобильная разработкаРазработка носимых приложенийРазработка IoTВстроенная разработкаНосимая разработкаРазработка настольных компьютеровБизнес-анализДизайнКачество и тестированиеУправление и поддержка приложенийРазработка аппаратного обеспечения ИТ-консалтингКибербезопасностьDevOpsOther

$ 20 часов в час — $ 30 / час 50 — 99 долларов в час 100 — 149 долларов в час 150 — 199 долларов в час> 200 долларов в час

Мин.размер проекта <$ 5000 $ 5000 + $ 10 000 + $ 25 000 + $ 50 000 + $ 75 000 + $ 100 000 +

Клиент focusStartupsSMBsEnterprise

Сотрудники <1010 - 4950 - 99100 - 249250 - 9991000+

LocationAfghanistanAlbaniaAlgeriaAmerican SamoaAndorraAngolaAnguillaAntarcticaAntigua и BarbudaArgentinaArmeniaArubaAustraliaAustriaAzerbaijanBahamasBahrainBangladeshBarbadosBelarusBelgiumBelizeBeninBermudaBhutanBolivia (многонациональное государство) Бонайре, Синт-Эстатиус и SabaBosnia и HerzegovinaBotswanaBouvet IslandBrazilBritish Индийский океан TerritoryBrunei DarussalamBulgariaBurkina FasoBurundiCabo VerdeCambodiaCameroonCanadaCayman IslandsCentral африканских RepublicChadChileChinaChristmas IslandCocos (Килинг) IslandsColombiaComorosCongoCongo (Демократическая Республика) Кук IslandsCosta RicaCroatiaCubaCuraçaoCyprusCzech RepublicCôte d’IvoireDenmarkDjiboutiDominicaDominican RepublicEcuadorEgyptEl SalvadorEquatorial GuineaEritreaEstoniaEthiopiaFalkland (Мальвинские) острова Фарерские IslandsFijiFinlandFra nceFrench GuianaFrench PolynesiaFrench Южный TerritoriesGabonGambiaGeorgiaGermanyGhanaGibraltarGreeceGreenlandGrenadaGuadeloupeGuamGuatemalaGuernseyGuineaGuinea-BissauGuyanaHaitiHeard остров и McDonald IslandsHoly SeeHondurasHong KongHungaryIcelandIndiaIndonesiaIran (Исламская Республика) IraqIrelandIsle из ManIsraelItalyJamaicaJapanJerseyJordanKazakhstanKenyaKiribatiKorea (Корейская Народно-Демократическая Республика) Корея (Республика) KuwaitKyrgyzstanLao Народная Демократическая RepublicLatviaLebanonLesothoLiberiaLibyaLiechtensteinLithuaniaLuxembourgMacaoMadagascarMalawiMalaysiaMaldivesMaliMaltaMarshall IslandsMartiniqueMauritaniaMauritiusMayotteMexicoMicronesia (Федеративные Штаты) Молдова (Республика) MonacoMongoliaMontenegroMontserratMoroccoMozambiqueMyanmarNamibiaNauruNepalNetherlandsNew CaledoniaNew ZealandNicaraguaNigerNigeriaNiueNorfolk ОстровСеверная МакедонияСеверные Марианские островаНорвегияОманПакистанПалауПалестин, Штат ПанамаПапуа-Новая ГвинеяПарагвайПеруФилиппиныПиткэрнПольшаПортугалияПуэ RTO RicoQatarRomaniaRussian FederationRwandaRéunionSaint BarthélemySaint Елены, Вознесения и Тристан-да CunhaSaint Киттс и NevisSaint LuciaSaint Мартин (французская часть) Сен-Пьер и MiquelonSaint Винсент и GrenadinesSamoaSan MarinoSao Томе и PrincipeSaudi ArabiaSenegalSerbiaSeychellesSierra LeoneSingaporeSint Маартен (Голландская часть) SlovakiaSloveniaSolomon IslandsSomaliaSouth AfricaSouth Джорджия и Южные Сандвичевы IslandsSouth SudanSpainSri LankaSudanSurinameSvalbard и Ян MayenSwedenSwitzerlandSyrian Arab RepublicTaiwan, провинция ChinaTajikistanTanzania, Объединенная Республика ofThailandTimor-LesteTogoTokelauTongaTrinidad и TobagoTunisiaTurkeyTurkmenistanTurks и Кайкос IslandsTuvaluUgandaUkraineUnited Арабские EmiratesUnited Королевство Великобритании и Северной IrelandUnited Штаты Экваторияльная IslandsUnited Штаты AmericaUruguayUzbekistanVanuatuVenezuela (Боливарианской Республики) Viet NamVirgin острова (Британские) Виргинские острова ( U.С.) Уоллис и FutunaWestern SaharaYemenZambiaZimbabweeSwatiniÅland острова

Решение typeWebsites & LandingsBusiness SoftwareSaaSEcommerceEnterprise SoftwareStartups MVPIoTAR & Vrai & MLBlockchainBI ToolsChatbotsRoboticsGaming3D Modeling3D RenderingOther

LanguageC / C ++ C # CSSGoHTMLJavaJavaScriptKotlinMATLABObjective — CPerlPHPPythonRRubyRustScalaSchemeSQLSwiftTypeScript

Frameworks.NETAngularBackboneChefCordovaCryEngineDjangoDrupalEmberExpressFlaskFlutterHadoopjQueryLaravelMeteorNode.jsReact NativeReact.jsRuby на RailsSpringTensorFlowTorch / PyTorchUnity 3DUnreal EngineVue.jsXamarinOther

CMS solutionsBigCommerceBitrix24BloggerDrupalJoomlaMagentoPrestaShopShopifySquarespaceTYPO3WebFlowWixWooCommerceWordPressOther

домена focusAdvertising & MarketingAutomotiveBanking & Financial службыPегламент предприниматель.Деловые ServicesGamblingGamingCommerceConsumer Продукты и ServicesEducationEnergy & UtilitiesGovernmentHealthcareLegalManufacturingMedia & EntertainmentNon-profitReal EstateRetail и RestaurantsTelecommunicationsTechnologyTravel & HospitalityTransportation & LogisticsOther

Готов к startWithin 1 weekWithin 2 -3 неделиВ течение 1 месяца Другое

Результат фильтра: 42 компании

.

Компания по разработке блокчейнов | Найдите правильную помощь по решениям на основе блокчейна с нами

  • Доверьтесь технологиям будущего

    Blockchainerz предоставляет вам платформу, где вы найдете все Решения на основе блокчейн.

    Доверяйте технологиям будущего

    Blockchainerz предоставляет вам платформу, на которой вы найдете все решения на основе Blockchain.

  • Блокчейн как решение

    В этом вся суть Blockchainerz.Найдите простой способ получить доступ к миру Blockchain и его приложениям.

    Блокчейн как решение

    Вот что такое Blockchainerz. Найдите простой способ получить доступ к миру Blockchain и его приложениям

  • Поднимите свой ICO

    Crowdfunding становится проще с нами и позволяет вам инвестировать в в нужном месте и в нужное время.

    Поднимите свой ICO

    Crowdfunding становится проще с нами и позволяет вам инвестировать в нужное место и в нужное время.

  • .

    Услуги по разработке приложений для блокчейн | Blockchain Development Company

    Blockchain покоряет такие отрасли, как здравоохранение, недвижимость, банковское дело, предлагая блестящие решения, которые обеспечивают безопасный, децентрализованный и мощный перенос и документирование данных. В CIS мы поставили перед собой задачу постоянно предоставлять более продвинутые решения и добиваться чего-то, что выходит за рамки обычного использования технологии блокчейн. Мы стремимся предоставить вам совершенно новое поколение услуг по разработке пользовательских блокчейнов, которые предлагают решения корпоративного класса.Наше техническое мастерство позволило нам прикоснуться к популярным платформам приложений и протоколам, включая Corda, Lisk, Ethereum, Virtual Machine, Hyperledger, Bitcoin.

    Технологические решения блокчейн

    От кастомных криптовалют, алгоритмов хеширования, архитектур, отдельных узлов до технологии распределенного реестра — мы в CIS покрываем все это в нашей разработке Blockchain. Доказательство работы, концептуальные модели и ставки являются неотъемлемой частью нашего протокола консенсуса, который помогает нам искоренить ошибку двойных расходов и устранить необходимость в устаревших третьих сторонах.Каждый раз, продвигаясь на милю вперед в процессе разработки, мы используем продвинутую децентрализованную сеть. технологии и использовать BaaS от Oracle, AWS, IBM, Microsoft Azure.

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

    Разработанный для повышения безопасности главной книги, мы, специалисты по встроенному программному обеспечению, программируем компьютеры для майнинга криптовалюты. Чтобы ускорить проверку транзакций, мы интегрируем микросхемы ASIC (Application Specific Integrated Circuit) во внутреннее оборудование для майнинга и программируем функции двухэтапной проверки хэша.Мы также занимаемся разработкой майнинговых ферм, для которой мы проектируем панель управления производительностью майнеров, создаем решения с компрессионной архитектурой, создаем децентрализованные сети для майнинговых пулов и многое другое.

    Разработка смарт-контрактов на блокчейн

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

    Кошельки с блокчейном и приложения для обмена

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

    Банковские решения с блокчейном

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

    Экспертиза программного обеспечения блокчейн

    Модульные приложения и интегрированная функциональность криптовалюты отображаются на веб-сайтах и ​​в приложениях с использованием профессионально разработанных и интегрированных API, библиотек, SDK и другой документации с использованием технологии цепочки блоков. Мы используем популярные биржи блокчейнов, включая Coinbase, Tierion, Factom, ChromaWay, SICCAR, Neurowave и другие, в дополнение к услугам по разработке криптографических клиентов.

    .

    Руководство для инсайдеров по разработке приложений на основе блокчейна

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

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

    Есть сомнения? Компания On-Line PLC, базирующаяся в Великобритании, получила значительный трафик, более высокие предложения от инвесторов и рост цен на акции на 394%, просто изменив свое название на On-Line Blockchain PLC.

    Трудно переваривать? Тогда взгляните на эту статистику,

    1. В 2017 году рынок блокчейнов составлял около 339 долларов.В размере 5 миллиардов долларов, тогда как прогнозируется, что к 2021 году он превысит 2,3 миллиарда долларов.
    2. Согласно IDC, глобальные расходы на разработку блокчейна в 2018 году составят 2,1 миллиарда долларов. И эта значительная сумма будет поддерживаться растущим интересом предприятий к блокчейну, что приведет к огромному скачку от проектов Proof-of-Concept к решениям блокчейнов. .
    3. В качестве лидера в области блокчейн-инноваций только США потратят 40% глобальных расходов на блокчейн, особенно в финансовой и производственной сфере.
    4. До 2022 года рост блокчейна будет составлять 42,8% в год, и основным катализатором этого повышения будет внедрение блокчейна при обмене денег и растущий интерес ведущих мировых банков к созданию криптовалют, таких как Utility Settlement Coin (USC), для обеспечения лучших трансграничных транзакций. . [Подробнее об этом здесь.]
    5. Согласно отчету, 71% бизнес-лидеров, использующих блокчейн, считают, что он будет играть ключевую роль в развитии технологии, что приведет к широкой поддержке отраслевых стандартов.

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

    Итак, готовы ли вы к революции под названием разработка приложений Blockchain?

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

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

    Технология блокчейн

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

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

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

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

    Типы систем / решений блокчейн

    Ответ на вопрос, как разработать приложение Blockchain, начинается с категоризации типа решения Blockchain —

    1. Сеть
    2. Поддержка криптовалюты

    Типы блокчейнов на основе сетей

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

    1. Блокчейн без разрешения : В блокчейнах без разрешения вся сеть общедоступна на всех компьютерах и устройствах. Любой желающий может получить доступ к коду, запустить общедоступный узел на локальных устройствах, инициировать взаимодействие в сети, проверить транзакцию, и это также при сохранении анонимности. Короче говоря, децентрализованный, равно доступный и анонимно доступный блокчейн называется без разрешения. Например: Биткойн, Эфириум.
    2. Разрешенная цепочка блоков : это закрытая экосистема, в которой могут действовать только авторизованные участники в зависимости от их конкретных ролей.Эти типы блокчейнов устанавливаются на основе набора правил, которые определяют, как транзакция будет реализована для удовлетворения потребностей конкретной организации (например, для управления базами данных, для аудита и т. Д.). Например: Multichain.

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

    Типы блокчейнов, основанные на поддержке криптовалюты

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

    1. Блокчейн на основе криптовалюты : Как видно из названия, эти типы решений блокчейна работают на основе криптовалют. Популярные типы блокчейнов, которые попадают в эту категорию:

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

      г. Crypto Exchange : в основном это системы блокчейнов, используемые для торговли криптовалютами или цифровыми валютами. Они принимают платежи по кредитным картам, почтовые денежные переводы и другие формы оплаты и отправляют криптовалюту на ваш кошелек. Их также называют системами обмена цифровой валюты (DCE).

      г. ICO : Первоначальное предложение монет (ICO) или первичное предложение валюты (ICO) считается системой краудфандинга, которая занимается генерацией и продажей криптовалют / крипто-токенов.

      г. Dapp : децентрализованное приложение или служба разработки dApp — это служба, которая имеет дело с приложением, которое не контролируется одним объектом. Его могут запускать несколько пользователей в децентрализованной P2P-сети в режиме реального времени с помощью надежных протоколов. Augur, Golem и Sia — лучшие примеры того, что может воплотить в жизнь компания по разработке dApp.

    2. Блокчейн, не основанный на криптовалюте : Этот тип решений по разработке приложений для блокчейн не зависит от криптографических токенов. Рассматриваемый в основном для управления запасами, этот тип цепочки блоков основан на технологии распределенной книги (DLT).
      Хотите знать, что такое технология распределенной книги? С технической точки зрения это база данных, распределенная по различным узлам и вычислительным устройствам. Здесь каждый узел имеет копию реестра и может обрабатывать ее независимо.И что самое впечатляющее, это то, что реестр не управляется каким-либо центральным органом. Изменения могут быть внесены на индивидуальном уровне, а затем голосование узла получает максимальное одобрение. Этот процесс голосования, при котором для внесения обновления необходимо согласие большинства, называется консенсусом. Как только консенсусный предел достигнут, изменения вносятся напрямую в базу данных.

    Платформы разработки блокчейнов

    Несмотря на то, что существует более 25 платформ для создания решений блокчейн, основными платформами блокчейнов, которые обычно рассматриваются для разработки блокчейн / DLT, являются: —

    1. Ethereum : это общедоступная платформа (и операционная система) с открытым исходным кодом, принимаемая во внимание при разработке dApp на основе блокчейна и ICO с функциональностью смарт-контрактов.В отличие от биткойнов, он является гибким и адаптируемым, что делает его первым выбором для каждой компании, занимающейся разработкой приложений блокчейн, для создания приложения блокчейн.
    2. EOS : цель платформы EOS — предложить возможности смарт-контрактов, децентрализованный хостинг приложений и децентрализованное хранилище корпоративных решений, которые решают проблемы масштабируемости, обнаруженные в блокчейнах, таких как Ethereum и Bitcoin, а также устраняют все комиссии, связанные с пользователи.
    3. Multichain : это платформа, которая позволяет разработчикам мобильных приложений создавать и развертывать частные решения на основе блокчейнов для использования внутри или между несколькими организациями.
    4. LiquidApps : имя, стоящее за DAPP Network, недавно запустило DSP 2.0, чтобы сделать платформу намного более гибкой и мощной. Они способны поддерживать создание ряда децентрализованных приложений.
    5. Hyperledger : это платформа с открытым исходным кодом, используемая для создания передовых решений блокчейна. Например, создание блокчейн-решений на основе Интернета вещей, создание блокчейн-приложений для управления цепочкой поставок и т. Д.
    6. IOTA : это решение на основе DLT с открытым исходным кодом, используемое для предоставления более быстрых и безопасных платежных услуг между подключенными устройствами IoT.Эта платформа использует технологию направленного ациклического графа (DAG) и предлагает уникальные характеристики, такие как бесплатные транзакции независимо от размера транзакции, более быстрое время подтверждения, обработка неограниченного количества транзакций за раз и т. Д., Что делает ее идеальной платформой для построения. платежные системы.
    7. Кворум : Это платформа DLT и смарт-контрактов с открытым исходным кодом, основанная на Ethereum.

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

    1. Характер платформы : хотя некоторые платформы блокчейнов основаны на криптовалюте, другие полагаются на смарт-контракты или используют более одного крипто-токена. Определение того, какой тип подходит вам, упростит процесс разработки приложений Blockchain.
    2. Смарт-контракты : Второе, на что нужно обратить внимание, — это определить, нужен ли вам смарт-контракт или нет.Смарт-контракт, как вы, возможно, знаете, — это самоисполняющийся протокол, который обрабатывает, проверяет или обеспечивает выполнение любых действий на основе триггеров, хранящихся в системе блокчейн.
    3. Протокол консенсуса : разные платформы разработки блокчейнов работают по разным протоколам консенсуса, включая Proof of Work, Proof of Stake, Proof of Elapsed time, Proof of Burn и т. Д. Таким образом, определение правильной платформы на основе протокола консенсуса также благоприятная ситуация.
    4. Криптовалюта : Следующее, что вам нужно учитывать при ответе на вопрос Как разработать приложение Blockchain, — это то, нужно ли вам использовать криптовалюту в вашем мобильном приложении или нет, также играет ключевую роль в поиске правильной платформы.
    5. Публичная / частная сеть : Спросите себя, какую сеть вы хотите — ту, в которой все могут вносить изменения, или ту, в которой могут участвовать только авторизованные пользователи. Исходя из принятого решения, выберите платформу и приступайте к созданию собственного блокчейн-приложения.

    Языки, которые следует учитывать при разработке цепочки блоков

    Как и платформы, существуют различные языки программирования, которые можно учитывать при разработке приложений блокчейн.Вы можете начать с традиционных языков программирования, таких как C ++, Python, Go и Java, или обратиться к более продвинутым языкам, ориентированным на блокчейн, таким как Simplicity и Solidity.
    Предполагая, что вы знакомы с традиционными языками, давайте поговорим только о простоте и надежности.

    1. Простота : Простота используется для разработки блокчейна смарт-контрактов. Язык прост, использует статический анализ и может рассматриваться как улучшение основных языков криптовалюты, таких как виртуальная машина Ethereum (EVM) и биткойн-скрипт.
    2. Solidity : Solidity — это статически типизированные языки разработки блокчейнов, используемые, в частности, для создания смарт-контрактов, работающих в EVM. С помощью этого языка вы можете легко реализовать саморегулируемую бизнес-логику в смарт-контрактах, оставив надежную и достоверную запись транзакций.

    Разработка блокчейн: сколько времени и затрат на это потребуется?

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

    Процесс

    Требуемое время (в часах)

    Бэкэнд-разработка

    150-200

    Внешняя разработка: Android

    500-550

    Front-end разработка: iOS

    470-510

    Front-end разработка: веб / настольное приложение

    80-100

    Проект

    120–150

    Обеспечение качества / Управление проектами

    60-80

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

    Тип цепочки блоков

    Требуемое время (в часах)

    Веб-кошелек

    250-300

    Криптообмен

    450-600

    Смарт-контракты + выпуск токена

    50-70

    Сайт ICO

    130–180

    ICO Полный сервис

    6,000-8,000

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

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

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

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

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

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

    Real Estate — Из-за огромного количества данных и документов, с которыми имеет дело рынок недвижимости, Real Estate становится идеальным получателем технологии Blockchain. Кроме того, функция смарт-контрактов очень удобна в отрасли, которая имеет дело с многочисленными контрактами.

    Хотя известно, что эти отрасли широко применяют технологию Blockchain, среда децентрализации ими не ограничивается. На самом деле существует несколько вариантов использования технологии в повседневном процессе.

    Давайте посмотрим на некоторые из них —

    Как внедрить блокчейн в свой бизнес-процесс?

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

    Блокчейн

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

    1.Для транзакций

    Являясь основой биткойнов и других криптовалют, технология блокчейн готова обновить транзакции. Отсутствие посредников не только ускорит процесс, но и упростит обслуживание перевода средств по сверхнизкой цене.
    Хотите пример из реальной жизни? Такие фирмы, как Bitwage, Abra и Coinpip, используют блокчейн для перевода средств и обработки платежных ведомостей.

    2. В качестве распределенного облачного хранилища

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

    3. Смарт-контракты As

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

    [Узнайте все о функции Blockchain в нашем подробном руководстве по смарт-контрактам]

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

    4. Для нотариальных целей

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

    5. Для управления цепочкой поставок

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

    6. В процессе цифровой идентификации

    Блокчейн

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

    Хотите несколько примеров использования из реальной жизни? ShoCard использует блокчейн для проверки личности людей на их мобильных устройствах.

    7. В программах вознаграждений и лояльности

    Устраняя посредников, блокчейн помогает розничным торговцам привлекать своих клиентов с помощью подарочных карт, вознаграждений и других программ лояльности экономически эффективным образом.
    Хотите знать, есть ли такая существующая компания / пример? GyftBlock, который является партнерством между Chain разработчиков API биткойнов и Gyft, предоставляет цифровые карты, которые можно безопасно торговать в публичной книге.

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

    Судип Шривастав

    Генеральный директор, Appinventiv

    В поисках стратегических сессий ?.

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

    Статьи по теме:

    .

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *