Loading...
Новости блокчейнаОбучение

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

Как стать разработчиком блокчейна

После феноменальной волны роста в декабре 2017 года и последующего снижения, который мы наблюдали весь 2018 год, интерес к блокчейн-технологиям и криптовалютам, никуда не делся и в целом только растет. Блокчейн — технология новая, интерес к ней высокий, а квалифицированных разработчиков, в которых нуждаются компании на рынке очень мало. Это привело к тому, что навыки в разработке блокчейна стали очень ценными на рынке труда, и оплата за рабочие места варьируется от 150 000 до 250 000 долларов в год. Тем не менее, до сих пор многим непонятно что это за блокчейн такой и как в нем разобраться, какие навыки необходимы для его программирования. Платформы блокчейна второго поколения, такие как Ethereum, открыли совершенно новые сферы деятельности с умными контрактами и децентрализованными приложениями. Прежде чем углубляться в специфику, давайте сначала рассмотрим, каковы основные принципы блокчейна и как они работают.

Как работает блокчейн?

Как работает и устроен блокчейн

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

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

Необходимые навыки для разработки блокчейна и создания криптовалюты

Как и любое другое предприятие по программированию, блокчейны требуют базового понимания концепций высокого уровня, таких как объектно-ориентированное программирование и фрагментация. Децентрализованное приложение обычно состоит из двух частей — внешнего интерфейса, развернутого в централизованном сервисе, с которым взаимодействует пользователь, и внутреннего интерфейса, который использует виртуальную машину Ethereum для обработки вычислений для платформы. Внешний интерфейс обычно разрабатывается аналогично любому другому веб-приложению, использующему веб-стек, такой как HTML, CSS, AngularJS и Node.JS. Бэкэнд — это та часть, которая включает блокчейн и требует хорошего понимания работы с умными контрактами. Они могут быть закодированы в Serpent (аналог Python), Mutan (аналог Go), LLL (аналог Lisp) и Solidity (аналог C++ с некоторыми концепциями JS). Однако важно помнить, что блокчейн следует использовать не для очень сложных вычислений, а для приложений, чувствительных к безопасности.

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

Интерактивная консоль

Интерактивные консоли значительно упрощают внесение изменений в сценарий. Самый простой способ получить интерактивную консоль для отладки, настройки узлов и использования кошелька через командную строку — это установить JavaScript-консоль Go Ethereum.

Тестовая сеть

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

Solc Compiler

После написания контракта в Solidity, разработчикам потребуется каким-то способом скомпилировать программу — вот где он и пригодится. Solc Compiler основан на библиотеке C++ Ethereum и более эффективен для больших программ, чем браузерный компилятор Cosmo.

Обучение программированию блокчейна криптовалюты

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

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

Причина № 1: Безопасность
Блокчейны должны быть защищены со всех сторон, не иметь ни одного слабого места, своего рода должны быть как крепости. Во-первых, код общедоступен и открыт для всеобщего обозрения. Любой может посмотреть и проверить его на наличие ошибок и уязвимостей. Однако, в отличие от других ресурсов с открытым кодом, найденные уязвимостей в коде блокчейна могут стоить очень дорого для его разработчиков. Любой программист может взломать и потенциально уйти с миллионами и миллионами долларов. Из-за подобных проблем безопасности разработка блокчейна обычно идет очень медленно и скурпулезно. Что зачастую не могут понять инвесторы проектов, ожидая быстрой разработки и стремительного роста цены коинов.

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

Причина № 3: Производительность
Блокчейн всегда должен работать с максимально допустимыми возможностями, но для этого выбранный язык должен быть чрезвычайно универсальным. Дело в том, что в блокчейне есть определенные задачи, которые можно распараллелить, в то время как есть задачи, которые нельзя выполнять параллельно.

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

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

Причина № 4: Изоляция
Что такое детерминированное поведение?

Если A + B = C, то независимо от обстоятельств A + B всегда будет равно C. Это называется детерминированным поведением.

Хеш-функции являются детерминированными, то есть хеш А всегда будет H (A).

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

Единственное решение для этого — изоляция. По сути, вы изолируете свои умные контракты и транзакции от недетерминированных элементов.

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

И хотя C++ может показаться немного устаревшим, правда состоит в том, что он прекрасно удовлетворяет всем функциям, которые мы описали выше. Фактически, Сатоши Накамото написал исходный код Биткойна на C++.

Наряду с HTML и CSS это одна из трех основных технологий в производстве контента для всемирной паутины. Javascript обычно используется для создания интерактивных веб-страниц.

Давайте рассмотрим как создать очень простой блокчейн с использованием Javascript.

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

Индекс: чтобы знать номер блока
Метка времени: чтобы знать время создания
Данные: данные внутри блока
Предыдущий хэш: хэш предыдущего блока
Хэш: Хэш текущего блока

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

This: Ключевое слово «this» вызывается внутри функции и позволяет вам получить доступ к значениям внутри конкретного объекта, который вызывает эту конкретную функцию.
Constructor: Constructor — это специальная функция, которая может помочь создать и инициализировать объект в классе. Каждый класс ограничен только одним конструктором.

Теперь, когда вы знаете о чем мы, давайте начнем делать наш блок.

Создание блока

const SHA256 = require("crypto-js/sha256");
class Block
{
constructor(index, timestamp, data, previousHash = '')
{
this.index = index;
this.previousHash = previousHash;
this.timestamp = timestamp;
this.data = data;
this.hash = this.calculateHash();
}
calculateHash()
{
return SHA256(this.index + this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();
}
}

Анализ кода

Ок, так вот это блок. Итак, в первой строке кода мы назвали библиотеку crypto-js, потому что хеш-функция sha256 недоступна в JavaScript.

Затем мы вызвали конструктор внутри класса для вызова объектов, которые будут иметь определенные значения. То, что, вероятно, бросается в глаза, — это функция calculateHash (). Давайте посмотрим, что именно она делает.

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

Итак, у нас есть блок, готовый к работе. Теперь давайте соединим блоки вместе в Blockchain.

Создание блокчейна: становимся блокчейн-разработчиками

class Blockchain
{
// создали генезис блок
constructor()
{
this.chain = [this.createGenesisBlock()];
}
createGenesisBlock()
{
return new Block(0, "01/01/2018", "Genesis block", "0");
}
// добавили новые блоки
getLatestBlock()
{
return this.chain[this.chain.length - 1];
}
addBlock(newBlock) {
newBlock.previousHash = this.getLatestBlock().hash;
newBlock.hash = newBlock.calculateHash();
this.chain.push(newBlock);
}
// проверяем цепочку блоков
isChainValid()
{
for (let i = 1; i < this.chain.length; i++)
{
const currentBlock = this.chain[i];
const previousBlock = this.chain[i - 1];
if (currentBlock.hash !== currentBlock.calculateHash()) {
return false;
}
if (currentBlock.previousHash !== previousBlock.hash)
{
return false;
}
}
return true;
}
}

Анализ кода

Итак, в цепочке выше происходит много интересный вещей, давайте попробуем разобрать их по пунктам:

1: Генезис блок

Что такое генезис блок (The Genesis Block)?

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

Также вы можете увидеть функцию «createGenesisBlock ()», в которой мы передали данные блока вручную:

createGenesisBlock()
{
return new Block(0, "01/01/2018", "Genesis block", "0");
}

2: Добавление блоков

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

getLatestBlock()
{
return this.chain[this.chain.length - 1];
}
// теперь, когда мы определили последний блок, давайте посмотрим, как мы собираемся добавлять новые блоки.
addBlock(newBlock) {
newBlock.previousHash = this.getLatestBlock().hash;
newBlock.hash = newBlock.calculateHash();
this.chain.push(newBlock);
}

Итак, что здесь происходит? Как мы добавляем новые блоки? Как мы проверяем, является ли данный блок действительным или нет?

Помните содержимое блока? Блок имеет хэш предыдущего блока, верно? Верно.

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

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

3: Проверка цепочки

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

Мы используем цикл «for» для перехода от блока 1 к последнему блоку. Генезис-блок — это block 0.

for (let i = 1; i < this.chain.length; i++)
{
const currentBlock = this.chain[i];
const previousBlock = this.chain[i - 1];
// в этой части кода мы видим два значения: текущий блок (current block) и предыдущий блок (previous block). И теперь мы просто собираемся найти хэш этих двух значений.
if (currentBlock.hash !== currentBlock.calculateHash()) {
return false;
}
if (currentBlock.previousHash !== previousBlock.hash)
{
return false;
}
}
return true;
}

Если «previousHash» текущего блока не равен «Hash» предыдущего блока, то эта функция вернет значение «False» (ложь), если все верно — вернет значение «True» (истина).

Использование блокчейна

Теперь, наконец, мы собираемся использовать блокчейн для создания нашей ChillCoin.

let ChillCoin = new Blockchain();
ChillCoin.addBlock(new Block(1, "20/07/2018", { amount: 4 }));
ChillCoin.addBlock(new Block(2, "20/07/2018", { amount: 8 }));

И это все!

Так-так что здесь и сейчас произошло?
Все просто, мы создали новую криптовалюту на основе блокчейна и назвали ее ChillCoin. Вызвав этот новый объект, мы активировали конструктор, который, в свою очередь, автоматически создал генезис-блок.

И мы просто добавили к нему еще два блока и добавили им некоторые данные.

Это вроде как все очень просто, но определенно это все совсем и не легко:

Для начала лучше изучить один из многих дружественных к блокчейну языков, таких как C++, Javascript, C #, Go и т.д. и разобраться что такое умные контракты.

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

Что такое умный контракт?

Согласно Википедии, умный контракт — это «компьютерный протокол, предназначенный для облегчения, проверки или обеспечения выполнения переговоров или исполнения контракта». Хотя он был впервые предложен американским криптографом Ником Сабо в 1996 году, Ethereum часто приписывают популяризацию этой концепции и ее широкое распространение.

Будьте в всегда в тренде

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

Присоединяйтесь к форумам Reddit, страницам Gitbub и StackExchange, общайтесь с другими разработчиками и всегда следите за новостями, касающимися технологии.

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

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

Блокчейн-программист: заключение

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

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

 

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

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