Как организовать блокчейн-разработку
Согласно данным HeadHunter, за год потребность в блокчейн-разработчиках в России выросла в 10 раз (в мире, по данным LinkedIn, втрое). При этом найти их не так просто, а крупные компании, успешно организовавшие блокчейн-разработку, можно пересчитать по пальцам. Вот пять советов, как вам наладить качественную блокчейн-разработку в своей компании.
Еще три года назад в Москве блокчейн-разработчики были наперечет, а на «Дне карьеры» в Московском физико-техническом институте студенты охотнее шли к стендам Deutsche Bank или Ernst & Young, чем к непонятному слову «blockchain». Сейчас такой проблемы нет: все хотят освоить эту технологию, и набирать людей стало проще. Учитывая резкий рост спроса на блокчейн-разработчиков, на рынке наблюдается явный дефицит достойных кандидатов. Можно дать ряд простых, но действенных рекомендаций, как собрать команду топовых разработчиков.
Не возлагайте большие надежды на хантинг
Блокчейн — молодая отрасль, в которой пока немного опытных и совсем нет свободных разработчиков. Первое, что приходит на ум, — переманить кандидата из другой компании. Но следует оценить возможные риски: на волне хайпа многие стартапы занимаются несущественными проектами, а кандидаты спешат вписать в свое резюме заманчивое слово «блокчейн», не демонстрируя при этом нужных навыков.
Хантинг из-за рубежа не слишком рентабелен: если средняя заработная плата блокчейн-разработчика в России составляет $4-6 тыс., то специалисту из Штатов нужно не меньше $9-12 тыс. При этом, переманивая человека, вам придется платить ему выше рынка.
Основные каналы найма блокчейн-специалистов в России:
рынок middle- и senior-разработчиков, которые пишут на Java, C/C++, Go, Python и Rust;
хантинг готового блокчейн-разработчика из крупного банка или из блокчейн-стартапа (последнее — с осторожностью);
встречи, хакатоны, ивенты;
профессиональные чаты и форумы;
вузы: МФТИ, МГТУ им. Баумана, МГУ, ВШЭ, СПбГУ и ИТМО.
Изучите профессиональную тусовку
Профессиональное сообщество в сфере блокчейна активно развивается: регулярно проводятся встречи, ивенты, хакатоны (в Москве — еженедельно). Сейчас в сообществе все знают друг друга и понимают, кто и что может; это один из самых живых и перспективных каналов поиска нужного человека. Резюме многих талантливых разработчиков не найдешь на сайтах поиска работы: их нужно встречать и заинтересовывать лично.
Растите перспективных кандидатов «под себя»
Учитывая дефицит кадров на рынке и новизну отрасли, не стоит считать отсутствие опыта в блокчейне недостатком. Сильный разработчик, особенно с наработанной технической базой, разберется в этой технологии за относительно небольшой срок. Хорошо подойдут толковые middle/senior-разработчики, пишущие на Java, C/C++, Go, Python и Rust, готовые к обучению и применению собственных знаний в новой сфере.
Еще один перспективный ресурс — талантливые выпускники ведущих технических вузов (мы в Bitfury предпочитаем МФТИ). Особое внимание стоит обратить на победителей международных олимпиад по математике и программированию — талант к решению нестандартных задач в значительной степени облегчает работу с блокчейном. Серьезным плюсом станет наличие знаний в области прикладной криптографии.
Соберите команду нестандартных и амбициозных людей
Помимо профессионализма и математических способностей, в блокчейне важны новаторский подход и амбициозность. По ряду задач не существует готовых решений, и разработчикам приходится быть первопроходцами. Рутинная работа и стандартные таски — не для этой сферы, поэтому хорошее тестовое задание для будущего блокчейн-девелопера должно содержать в себе вызов — необходимость выходить за рамки компетенций кандидата.
Следующий фактор, который следует учитывать при построении команды, — взаимная психологическая совместимость. Безусловно, качественный тимворк важен во всех сферах бизнеса, но именно в сфере блокчейна его отсутствие особенно сильно сказывается на достигнутых результатах. Не секрет, что значительная часть программистов – люди интровертного склада, не склонные активно налаживать социальные связи. В еще большей степени эта особенность проявляется у талантливых и увлеченных своей работой кандидатов, нередко ориентирующихся в виртуальном мире лучше, чем в реальном. В такой ситуации компания-работодатель должна сделать все, чтобы упростить взаимную адаптацию членов команды. Существуют различные способы достижения этой цели: найм людей с общим бэкграундом — из одного вуза или комьюнити, грамотный и осторожный тимбилдинг с учетом личных особенностей кандидатов, а также помощь психолога. Большое значение имеет и подбор менеджера: он должен быть таким же «технарем», способным говорить с командой на одном языке, и владеть навыками руководства творческими и интеллектуальными людьми.
Предложите особые условия работы
Спрос на рынке вакансий в сфере блокчейна пока что значительно превышает предложение, и кандидаты имеют возможность выбирать, а их мотивация не ограничивается высокой заработной платой. Одним из наиболее сильных мотивирующих факторов является интеллектуальный и профессиональный рост — активное участие в развитии индустрии, решение интересных и сложных задач (математик обязательно бы добавил: «красивое решение»!). Интеллектуальная специфика этого бизнеса определяет и характер поощрений: опционы, возможность постоянного повышения квалификации, участие в конференциях и прочих ивентах мирового уровня, поддержка инициативы.
Для многих девелоперов дополнительным аргументом при выборе компании становится возможность трудиться удаленно, но если вы организуете комфортное рабочее пространство, разработчики сами будут заинтересованы в работе из офиса. На помощь придут приятные бонусы: спортзал, бесплатное питание, помощь ассистентов по различным вопросам — в общем, высокий базовый уровень комфорта, позволяющий команде сфокусироваться на ее непосредственных задачах.
И, конечно же, беспроигрышный вариант для привлечения и удержания ценных кадров – внимание к личным целям. Для талантливых людей (ведь вы хотите найти именно таких?) особенно важно, чтобы их принимали такими, какие они есть. И дело не только в создании комфортных условий и содействии — кто-то, напротив, ценит, когда его оставляют в покое и не мешают творить. Обеспечивая индивидуальный подход к каждому, вы обретете лояльных сотрудников, готовых работать в вашей команде долгие годы. Последнее будет особенно ценно: блокчейн-лихорадка продолжается, а это значит, что спрос на хороших специалистов вряд ли упадет в ближайшие несколько лет.
Источник
Блокчейн как бизнес
Blockchain — система, хэширующая информационный поток, база данных, информация которой использует одновременно большое число компьютерных систем, а новые блоки появляются ежесекундно. С ее помощью зашифровываются или привязываются к определенному бизнес-условию транзакции, при этом выполнение данного условия может быть публичным и непубличным.
Принципами, лежащими в основе блокчейна, стали:
- децентрализованность информационных данных;
- распределение по различным источникам хранения;
- безопасность инфопотока, его открытость;
- неизменяемость первоначальных данных.
Практически блокчейн использовали при создании первой криптовалюты – биткоина в 2009.
Технология блокчейн в бизнесе
Универсальность технологии открывает для нее обширную сферу применения. Если бизнес-проекту подходит распределенная структура данных, то можно переходить на блокчейн. Реализовать с ее использованием можно:
- верификацию потока электронной документации;
- платформу для ведения финансовых операций;
- платформы программ лояльности, где не останется места мошенникам и ошибкам, а баллы будут начисляться автоматически;
- мотивационные меры, направленные на повышение работоспособности и результативности сотрудников.
ВАЖНО. Блокчейн позволяет отказаться от субъективных оценок эффективности труда, обладает способностью интегрироваться в разнообразную информационную среду, индивидуально настраивается для конкретной бизнес-структуры.
Бизнес-идеи на блокчейне
Перспективными представляются бизнес-идеи, основанные на смарт-контрактах. Подобные сделки подразумевают передачу ключа шифрования только при соблюдении указанных заранее условий. Если этого не происходит, то участники операции остаются при своем. Блокчейн станет надежной защитой от ненадлежащих сделок, так как не дает изменять записи в информационных блоках задним числом.
- Внедрение в работу успешных компаний нового принципа управления информационным потоком. Банкам и коммерческим гигантам выгодно внедрить сервис «умных» сделок, и переходить на него лучше сегодня, пока основная масса конкурентов не освоила новую систему.
- Криптовалюта (ICO). Новые криптовалюты возникают все чаще, и каждому доступна возможность разработать свою. Собственные токены обмениваются на устойчивые биткоины или лайткоины. Чтобы вызывать доверие у потенциальных инвесторов, проект должен быть максимально прозрачен.
- Кредитование с применением криптовалют и сервисы, позволяющие работать с биткоинами. Есть немало платформ, где осуществляется кредитование виртуальными деньгами или ведется обмен, приобретаются ценности и проходят прочие финансовые сделки. Открываются даже букмекерские конторы. Бизнес, базирующийся на собственном ресурсе, где работают подобные сделки, лучше основывать на безопасной блокчейн-технологии.
Источник
Как сделать свой блокчейн. Часть 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__ мы будем верить, что вся необходимая информация уже представлена в словаре. Для производственного блокчейна — это не самое мудрое решение, но подходит в качестве примера, потому что код пишу только я. Также я напишу метод, запаковывающий важную информацию блока в словарь, а после заведу более удобный способ для отображения информации блока при его печати в терминал.
Чтобы создать первый блок, запустим этот простой код:
Отлично. Последний вопрос в этой части — где хранить данные в файловой системе. Это необходимо, если мы не хотим потерять локальные данные блока при отключении узла.
Я назову папку с данными ‘chaindata’, в какой-то степени подражая схеме папок Etherium Mist. Каждому блоку теперь присвоен отдельный файл, названный по его индексу. Нужно убедиться, что имена файлов содержат в начале достаточное количество нулей, чтобы блоки перечислялись по порядку.
С учетом кода выше, нужно написать следующее для создание первого блока:
Шаг 2 — Синхронизация блокчейна, локально
Прежде чем начать майнинг, интерпретацию данных или отправку/создание новых данных для цепи, необходимо синхронизировать узел. В нашем случае других узлов нет, поэтому я говорю только о чтении блоков из локальных файлов. В будущем частью синхронизации будет не только чтение из файлов, но и коммуникация с пирами для сбора блоков, которые были сгенерированы, пока ваш узел не был запущен.
Пока просто и красиво. Чтение строк из файлов их загрузка в структуры данных не требуют чрезмерно сложного кода. Пока это работает. Но в будущих постах, где я буду писать о возможностях коммуникации разных узлов, эта функция sync станет значительно сложнее.
Шаг 3 — Отображение блокчейна
Теперь наш блокчейн находится в памяти, и поэтому я хочу отобразить цепь в браузере. Для того, чтобы сделать это прямо сейчас, есть две причины. Во-первых, необходимо подтвердить в браузере, что изменения произошли. Во-вторых, я буду использовать браузер в будущем для просмотра и совершения каких-либо операций, связанных с блокчейном. Например, отправка транзакций или управление кошельком.
Для этого я использую Flask — у него низкий порог вхождения, и я решил, что он подходит для наших целей.
Ниже представлен код для отображения json блокчейна. Я проигнорирую импорты для экономии места.
Запустите этот код, зайдите на localhost:3000/blockchain.json и увидите текущий блок.
Шаг 4 — “Майнинг”, также известный как создание блока
Сейчас есть только генезис блок, но если у нас появится больше данных, которые необходимо хранить и распределять, нужен способ включить это в новый блок. Вопрос — как создать новый блок и соединить его с предыдущим.
Сатоши описывает это следующим образом в Bitcoin whitepaper. Учтите, что “timestamp сервер” назван “узлом”.
“Начнем описание нашего решения с timestamp сервера. Его работа заключается в хэшировании блока данных, на который нужно поставить timestamp, и открытой публикации этого хэша… Timestamp показывает, что в данный момент конкретные данные существовали и потому попали в хэш блока. Каждый хэш включает в себя предыдущий timestamp: так выстраивается цепь, где очередное звено укрепляет все предыдущие.”
Скриншот изображения, прикрепленного под описанием:
Основная идея раздела — при необходимости соединить блоки, мы создаем хэш информации о новом блоке, включая время создания блока, хэш предыдущего блока и информацию в самом блоке. Я буду называть всю эту информацию “хедером” блока. Таким образом, мы можем проверить корректность блока, посчитав все хэши перед ним, подтвердив последовательность.
В данном случае хедер, который я создаю, объединяет значения строки в одну огромную строку. Я включил следующие данные:
- Индекс, показывающий каким по счету является блок;
- Хэш предыдущего блока;
- Данные — просто случайные строки. Для bitcoin они называются Merkle root и содержат информацию о транзакциях;
- Timestamp майнинга этого блока.
Поясню один момент — объединение строк информации не является обязательным для создания хедера. Требование состоит в том, чтобы каждый знал, как генерировать хедер блока и хэш предыдущего блока внутри него. Делается это для того, чтобы каждый мог убедиться в корректности хэша в новом блоке и подтвердить связь между двумя блоками.
Хедер Bitcoin значительно сложнее объединения строк. Он использует хэши данных и времени и завязан на то, как данные расположены в памяти. Но в нашем случае объединения строк достаточно.
Теперь у нас есть хедер и можно вычислить валидность хэша. Я буду использовать метод, отличающийся от метода Bitcoin, но все равно запущу хедер блока через функцию sha256.
Для майнинга блока мы используем функцию выше, чтобы получить хэш, положить его в новый блок и сохранить этот блок в директории chaindata.
Готово! Но при таком типе создания блока кто угодно с самым быстрым CPU сможет создавать самые длинные цепи, которые другие узлы посчитают корректными. Нужен способ снизить скорость создания блока и подтверждение до перехода к следующему блоку.
Шаг 5 — Доказательство выполнения работы
Для снижения скорость я использую Доказательство выполнения работы, как и Bitcoin. Доказательство доли владения — другой способ, используемый в блокчейнах для достижения консенсуса, но в этом случае я воспользуюсь работой.
Способ сделать это — установить требования к структуре хэша блока. Как и в случае с bitcoin, необходимо убедиться, что хэш начинается с определенного количества нулей, перед тем, как перейти к следующему. А для этого нужно добавить в хедер дополнительную информацию — случайно перебираемое число (nonce).
Теперь функция майнинга настроена для создания хэша, но если хэш блока не содержит достаточного количества нулей, мы увеличиваем значение nonce, создаем новый хедер, вычисляем новый хэш и проверяем хватает ли нулей.
Отлично. Новый блок содержит валидное значение nonce, поэтому другие узлы могут подтвердить хэш. Мы можем сгенерировать, сохранить и распределить новый блок остальным.
На этом все! Пока что. Осталось еще много вопросов и фичей в блокчейнах, которые я не объяснил.
Например, как задействовать другие узлы? Как узлы передают данные, когда включаются в блок? Существуют ли иные способы хранения данных кроме огромных строк данных?
Ответы на эти вопросы можно будет найти в следующих частях этой серии постов, как только я сам найду на них ответы. Пожелания по содержанию можно писать мне в твиттер, в комментарии к посту или через форму обратной связи!
Спасибо моей сестре Саре за уточняющие вопросы о блокчейнах и помощь в редактировании поста!
Комментарии, вопросы, как всегда, приветствуются и тут, и на дне открытых дверей.
Источник