Разбираем код первого контракта.

Здесь я разберу код, который мы деплоили в блокчейн из прошлого поста «Как начать работать с geth и mist. Деплой первого контракта в сеть.»

Продублирую полный код контракта:

pragma solidity ^0.4.18;
 
contract HelloWorld {
string wellcomeString = "Hello, world!";
function getData() public constant returns (string) {
 return wellcomeString;
 }
function setData(string newData) public {
 wellcomeString = newData;
 }
}

Далее разберемся построчно что же делает контракт.

pragma solidity ^0.4.18

pragma (прагма) — препроцессорная директива, которая указывает компилятору на какой версии solidity написан контракт.

contract HelloWorld {

Создаем контракт с названием HelloWorld, контракты можно сравнить с классами в ООП.

string wellcomeString = "Hello, world!";

Создаем переменную с именем welcomeString типа String и значением «Hello, world!»

function getData() public constant returns (string) {

Создаем публичную функцию с именем getData, которая возвращает значение типа String.

return wellcomeString;

Внутри функции мы описываем, что она должна делать, в данном конкретном случае — возвращает переменную wellcomeString, с заданным ранее значением «Hello, World!».
В этом контракте мы пошли немного дальше стандартного «Hello, World!» и создали еще одну публичную функцию с именем setData.

function setData(string newData) public {

Данная функция принимает значение переменной newData типа String.

wellcomeString = newData;

Функция присваивает значение переменной newData переменной wellcomeString. Тем самым мы можем менять начальное «Hello, World!» на что угодно.

Загрузив контракт в сеть, если вы все сделали правильно из прошлого поста, вы можете это проверить.

Для этого в браузере Mist перейдите на вкладку Contracts и выберите созданный контракт.

В поле Select Function, выберите функцию Set Data и в поле ниже введите свое значение, например «Wellcome» и нажмите кнопку Execute.

Если вы все сделали правильно, то вы увидите, что значение переменной getData поменялось на «Wellcome».

 

Как начать работать с geth и mist? Деплой первого контракта в сеть.

Для взаимодействия с блокчейном Ethereum необходимо установить программное обеспечение.
Geth — интерфейс командной строки, написанный на языке GO.
Скачиваем geth со страницы — https://geth.ethereum.org/downloads/.

В моем случае я работаю в ос Windows. Устанавливаем и запускаем через интерпретатор командной строки cmd.
Используем сочетание клавиш Win+R -> cmd и запускаем geth с подключением к тестовой сети Rinkeby, командой geth -rinkeby.

В конечном итоге вы должны увидеть аналогичную картину:

Далее скачиваем браузер Misthttps://github.com/ethereum/mist/releases выбираем подходящий вам клиент и устанавливаем. После скачивания блокчейна и запуска приложения вы увидите следующее:

Единственное отличие должно быть в том, что у вас будет нулевой баланс.

Получить бесплатный тестовый эфир в сети rinkeby вы можете на этой странице https://www.rinkeby.io/#faucet.

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

Переходим в пункт — Contracts и нажимаем кнопку Deploy New Contract.
В поле кода копируйте данный код:

pragma solidity ^0.4.18;
 
contract HelloWorld {
string wellcomeString = "Hello, world!";
function getData() public constant returns (string) {
 return wellcomeString;
 }
function setData(string newData) public {
 wellcomeString = newData;
 }
}

Справа от кода в выпадающем меню Select Contract To Deploy выбирайте Hello World, выставляйте максимальную комиссию ползунком Select Fee и нажимайте кнопку Deploy.

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

В следующем посте я подробно разберу код контракта.

Основы протокола Ethereum.

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

В протоколе Ethereum главное звено — EVM (Ethereum Virtual Machine), виртуальная машина Ethereum. Суть в том, что все вычисления в блокчейне совершает децентрализованный 256-битный виртуальный компьютер. Виртуальная машина Ethereum, является, так называемой state — машиной, то есть компьютером, число возможных внутренних состояний которого конечно. Это значит, что в момент времени х в экосистеме Ethereum существует y токенов сети (эфир), которые распределены между аккаунтами. В момент x, если один пользователь посылает z эфиров другому пользователю, то состояние EVM изменится следующим образом, что у посылающего аккаунта уменьшится количество токенов на z, а соотвественно у принимающего аккаунта на это же количество увеличется. За исключением комиссии за транзакцию. Таким образом реализуется функционал передачи ценности в протоколе Ethereum.

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

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

Первая большая и перспективная область развития блокчейна — финансовая. Это и криптовалюта, и смарт-контракты, и госреестры. Например, сейчас, чтобы продать дом, нужно несколько недель, а это может занимать всего 3 минуты.(С) Виталик Бутерин, Москва, 30 августа 2017 года.

На данный момент существует 4 языка программирования для EVM:

  • Serpent (похожий на Python)
  • LLL (Lisp Like Language)
  • Mutan (на некоторых сайтах написано, что он похож на C, а на некоторых, что на GO)
  • Solidity (похожий на JavaScript)

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

 

 

Настраиваем Atom для написания смарт-контрактов на Solidity.

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

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

Первое, с чем сталкивается человек, который хочет начать программировать — это IDE — Integrated Development Inveronment или интегрированная среда разработки. Эта самая IDE включает в себя:

  • Редактор текста.
  • Компилятор и/или интерпретатор текста.
  • Средства автоматизации сборки.
  • Отладчик.

На данном этапе — главное для нас это удобный редактор текста с подсветкой синтаксиса. С моей точки зрения идеально подойдет — Atom (https://atom.io/). Скачиваем, устанавливаем.

Сам по себе Atom не будет подсвечивать синтаксис Solidity и код будет очень тяжело читать.


Согласитесь, читать такое, крайне не комфортно.

Для комфортного чтения и написания кода нам понадобится два плагина.
Autocompete-solidity (https://github.com/austp/autocomplete-solidity).

Language-ethereum (https://github.com/caktux/language-ethereum).

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

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

Очевидно, что такой код намного легче воспринимать визуально.

Установка дополнений идет внутри самого Atom’a, вам необходимо открыть вкладку «File -> Settings -> Install», как показано на рисунке ниже и в строке поиска ввести название плагинов.

 

 

 

 

 

 

 

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