Глава 5. Смарт-контракты и токены

Содержание страницы

Глава 5

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

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

EVM в качестве бэкенда

Программные приложения в том виде, в котором они  существуют сегодня для Веба, iOS, MacOS, Windows, Android, Linux и т.д., как правило состоят из двух частей: фронтенд и бэкенд. К бэкенду обычно относятся база данных и логика взаимодействия с ней, которая (как вы узнали из Главы 3) является местом, где программа хранит свою информацию. Под фронтендом обычно понимается та часть приложения, которую видит пользователь: интерфейс с его различными метками и элементами управления. В дизайне программного обеспечения элементы управления – это общий термин для маленьких кнопок, слайдеров, ручек настроек, сердец, звезд, иконок с большим пальцем и любых других мелочей, на которые вы можете нажать, чтобы что-либо произошло.

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

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

В сухом остатке на данный момент имеем то, что EVM является некоей заменой для традиционного бэкенда приложений и обычного хостинга веб- или мобильных приложений. Хотя EVM сама по себе является полноценным компьютером, она еще не является законченной end-to-end платформой, способной хостить HTML/CSS-интерфейсы; самая полезная роль, которую она может играть, – это бэкенд для распределенного приложения.

Смарт-контракты для распределенных приложений

Умный контракт – это всего лишь единица функционала, которую вы загружаете в EVM. Термин “распределенное приложение” или dapp обычно описывает доступный для веб или смартфонов фронтенд приложения с графическим пользовательским интерфейсом, которое использует EVM в качестве бэкенда. Если только это не очень простое dapp, его бэкенд-функционал будет опираться на несколько смарт-контрактов.

Активы, обеспеченные чем угодно

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

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

Обмен на фиатную валюту

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

Допустим, вы хотите заплатить кому-то в Нью-Йорке за услуги по переводу. Этого человека зовут Боб. Боб – переводчик, использующий доллары США; он хранит сбережения в долларах; также он платит налоги в долларах.

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

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

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

Эфир в роли стеклянных бус

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

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

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

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

Криптовалюта как мера времени

Поскольку криптоактивы и криптовалюты невозможно подделать, это обеспечивает их таким интересным свойством, как мера времени. Глава 7 описывает схему выпуска эфира, но дело здесь в том, что эти токены почти как кольца деревьев – их появление происходит путем процесса высокой сложности, который не может быть “ускорен”. Таким образом, при торговле с кем-либо, находящимся в удаленной экономике, становится легче доверять ценам, выраженным в криптовалюте, поскольку подделка невозможна, независимо от того, насколько богата или могущественна группа, с который вы торгуете.

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

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

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

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

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

Владение активами и цивилизация

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

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

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

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

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

Так как же связан этот экскурс в историю с криптовалютами?

Ваши личные сбережения = репутация

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

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

Кто знает, будет ли кто-либо использовать эти сети через 50 лет! Для сравнения, национальные государства склонны существовать веками. Когда они выпускают фиатную валюту, они также создают армии для защиты своих экономических систем; нет такой центральной власти, которая бы обеспечивала использование биткойнов или эфира. Чтобы добавить еще больше неопределенности, отметим, что компьютерные сети в целом появились не так давно, чтобы мы могли действительно знать о продолжительности их пригодности, по сравнению с правительствами, которые существовали (в той или иной форме) на протяжение тысячелетий и могут существовать тысячи лет. Как криптовалюта станет более долговечной, чем деньги, которые у нас уже есть?

Деньги, токены, репутация… Что с того?

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

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

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

Но такой подход ограничивает нас транзакциями, которые мы и так уже совершаем сегодня. Перспектива протоколов Ethereum и Биткойн – это представление новых видов транзакций и инструментов. Что насчет мира повседневных потребительских товаров в этом интернете вещей? Разве эти товары не “вещи” тоже?

Предположим, вы печатаете Ethereum-адрес (открытый ключ) на физическом товаре, и этот адрес относится к смарт-контракту.

Или на практике, рассмотрите QR-код, показанный на изображении 5-1, который является машиночитаемым кодом в шаблоне с вложенным квадратом. Этот код ведет на ссылки для этой книги. Если вы отправитесь в iOS App Store или Google Play на своем смартфоне, то найдете какое-то количество бесплатных приложений для чтения QR-кодов. Просто поищите “QR reader”. Представьте себе, как эти QR-коды, напечатанные на повседневных ценных товарах, таких как одежда, ювелирные изделия, произведения искусства или другие физические товары, могли бы комбинировать концепции деривативных контрактов, ежедневно перезагружаемых дебетовых карт и коллекционных предметов.

QR-коды обеспечивают простой способ для машин читать криптовалютные адреса и URL-адреса. Данный QR-код ведет на http://eth.guide.

Монеты – предметы коллекционирования

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

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

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

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

Функция коллекционных предметов в человеческих системах

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

Использование предметов коллекционирования для подсчета одолжений

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

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

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

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

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

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

Ранние подделки

Решением для межплеменной торговли было использование редких предметов искусства: не просто редких земельных элементов, но любых объектов, которые нельзя было просто найти или создать с нуля. Они не могли быть просто набором красивых объектов. Их должно было быть крайне трудно достать, либо они должны были представлять из себя продукты квалифицированной искусной работы, что гарантировало, что каждый предмет коллекционирования имел за собой определенное количество человеко-часов (рабочего времени). Появляющийся в результате такой работы предмет для коллекционирования можно считать “доказательством работы” (proof-of-work) мастера. И следовательно, мы возвращаемся к концепции, озвученной ранее: биткойны и эфир как хранилища времени. Как говорит Сабо:

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

Ювелирные изделия и предметы искусства в качестве денег

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

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

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

Шаг к банкнотам

Деньги, репутация и статус всегда были объединены вместе. Это было логичным, что примитивные ценности – это вещи, которые вы могли одеть; будь то золотые украшения или усеянные бриллиантами короны. В конце концов, почему бы вам не похвастаться статусом, который был дарован вам тяжелой работой (или удачей)?!

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

К этому моменту в развивающемся обществе в банках хранится достаточно богатств, чтобы владельцы индивидуальных счетов могли начать торговать банкнотами. Как это работает, лучше всего объяснено экономическим исследователем Мартином Армстронгом. Сабо говорит:

  – Различие между банкнотами и депозитными расписками, выпускавшимися “золотых дел мастерами”, было простым. Депозитная квитанция преобразовывалась в банкноту, если квитанция подлежала к оплате на предъявителя, а не держателя счета. В связи с этим, Банк Англии Патерсона де факто ловко создал банковские билеты в обращении, поскольку их квитанции подлежали выплате на предъявителя, таким образом создав “банкноты” для обращения, не имея резерва для покрытия подобного инструмента.

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

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

Платформы для высокоценных цифровых предметов коллекционирования

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

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

В будущем, возможно, никогда нельзя будет “забыть” о правах собственности, ценности и происхождении физической вещи до тех пор, пока работает блокчейн, в который эта вещь была внесена и учтена. Через 100 лет на телевидении не будет передачи “Antiques Roadshow”. (Мы могли бы даже написать смарт-контракт, чтобы сделать ставки на это!)

Токены – это категория смарт-контракта

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

Примечание

В этой главе вы развернете свой собственный токен.

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

В настоящее время нет такой другой категории смарт-контрактов, которая была бы адаптирована подобным образом в Mist.

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

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

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

Примечание

В этой главе содержатся упражнения, в которых используется кошелек Mist, вы должны были установить его в процессе чтения Главы 2. После установки на ваш компьютер он может отображаться как Ethereum Wallet. Эта книга упоминает его как “Mist”, чтобы отличить его от многих других кошельков Ethereum, доступных на сегодняшний день для настольных и мобильных компьютеров.

Токены как социальные контракты

Токены иногда называют монетами, как вы узнали из Главы 3. Вы также узнали, что сами по себе токены – это смарт-контракты. (С достаточным количеством повторений эти термины, надеюсь, войдут в ваш естественный словарный запас к концу этой книги!).

Но сами по себе токены (как и все формы денег) также могут рассматриваться как социальные контракты или соглашения между группами пользователей. На простом английском языке неявное соглашение группы, использующей токен, было бы следующим: “Мы все согласны с тем, что этот токен – деньги в нашем сообществе”. Это также негласное соглашение не подделывать его, тем самым не подрывая доверие к системе!

Сегодня самая близкая вещь к социальному контракту в форме программного обеспечения – это, вероятно, лицензионные соглашения конечного пользователя или EULA, которые подписывают пользователи при создании учетных записей в таких сервисах, как Facebook, Twitter, iTunes или Gmail. Это соглашение обычно включает в себя положения о запрете такой деятельности, как рассылка спама другим пользователям, которая ухудшит опыт пользователей по взаимодействию с сервисом.

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

Токены – отличное приложение для старта

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

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

Примечание

Временное платежное средство (scrip) – это термин, произошедший от слова “расписка/подписка” (subscription). У него есть множество определений из прошлого, но главным образом оно относится к долговым распискам. Он также может относиться к частной валюте, такой как воздушные мили или премиальные баллы. Он используется в этой книге для обозначения общей единицы учета: горошины, которые подсчитывает гигантский децентрализованный бухгалтер EVM! (прим. переводчика: bean counter – “тот, кто скрупулезно считает каждую горошину, каждую мелочь”, используется в англ. языке в отношении бухгалтеров).

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

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

Создание токена в тестовой сети

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

Примечание

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

Запустите кошелек Mist на вашем персональном компьютере. Перейдите в меню “Дополнительно” кошелька Mist и выберите пункт “Сеть”, который позволит вам выбрать тестовую сеть, как показано на изображении 5-2.

Как только вы начнете использовать тестовую сеть, вы должны увидеть предупреждение в браузере Mist, выделенное красным цветом, как показано на изображении 5-3.Подключение к тестовой сети.

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

Получение тестового эфира из крана

В Ethereum достаточно просто настроить сборщик (кран), который выдает искусственный эфир, вы можете использовать его в тестовой сети Ropsten. В этом разделе вы не будете настраивать собственный кран, но будете использовать сторонний сборщик, показанный на изображении 5-4 и доступный по адресу.

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

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

1.1. Убедившись, что ваш кошелек Mist подключен к тестовой сети, создайте адрес, если вы еще этого не сделали. Скопируйте этот длинный шестнадцатеричный адрес (начинающийся на 0x…) в буфер обмена вашей системы, а затем вставьте его в адресное поле:

2.2. Чтобы получить эфир, нажмите кнопку “Отправить мне 1 тестовый эфир”.

Если вы хотите протестировать передачу эфира, вы можете это сделать, отправив тестовый эфир с одного адреса в своем кошельке Mist на другой адрес своего кошелька Mist. Для этого: вернитесь в Mist и создайте новый адрес кошелька на домашнем экране. Вы можете использовать диалоговое окно “Отправить” для отправки эфира с одного из ваших адресов на другой. Это будет приблизительно одинаково по скорости как для отправки эфира самому себе, так и для отправки кому-либо на другом конце мира; в этом состоит красота распределенных систем.

В тестовой сети также есть обозреватель блокчейна, где вы можете увидеть все свои транзакции в тестовой сети. Просто введите один из ваших адресов Mist из тестовой сети в поле поиска в нижеследующем блокчейн-обозревателе, и вы увидите список всех транзакций: http://testnet.etherscan.io/

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

Примечание

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

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

Упражнение: создайте настраиваемый токен без написания кода.

Создание собственного токена может быть выполнено примерно за 5 минут. Все, что вам нужно, это браузер Mist, который вы загрузили в процессе чтения Главы 2, и текстовый редактор. Если вы используете macOS, Windows или Ubuntu, на вашем компьютере есть приложение для редактирования текста, но вы также можете выбрать стороннее приложение типа Sublime Text.

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

Примечание

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

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

В процессе подготовки откройте кошелек Ethereum Mist. Перейдите на вкладку “Контракты” в правом верхнем углу, как показано на изображении 5-5.

1.1. Выберите опцию “Развернуть новый контракт”, как показано на изображении 5-6.На вкладке “Контракты” вы можете вставить и развернуть свой контракт.

Нажмите на кнопку “Развернуть новый контракт”, чтобы ввести код контракта.

2.2. Перейдите к Github-проекту этой книги и найдите документ mytoken.sol. Скопируйте код из этого файла. Он похож на код на изображении 5-7.

Код для этого тестового проекта на Github.

3.3. Скопируйте этот код. Затем вернитесь в кошелек Mist и вставьте его в поле с надписью “Исходный код контракта на Solidity” на вкладке “Контракты”, как показано на изображении 5-8. Убедитесь, что вы заменили все, что там есть, во время вставки; содержимое, показанное здесь, является замещающим текстом.

Замените весь замещающий текст при вставке вашего исходного кода контракта.

4.4. Теперь код должен выглядеть так, как показано на изображении 5-9.Замените весь замещающий текст при вставке вашего исходного кода контракта.

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

5.5. Теперь вы увидите, что имя контракта автоматически загрузилось в меню справа. Оно должно иметь название “My Token” (“Мой токен”). Выберите его. Должны появиться поля, показанные на изображении 5-10.

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

Примечание

Обратите внимание на светло-серый текст после каждой характеристики и вспомните наше обсуждение типов из Главы 4. Вы увидите, что поля объем эмиссии (supply) и количество знаков после запятой (decimals) должны быть типа uint или положительными числами; все остальное может быть строками из произвольного текста или цифр.

6.6. Далее, давайте заполним эти поля:

  • Объем эмиссии: сколько токенов вы хотите создать?
  • Имя: как должен называться токен?
  • Символ (тикер): используйте любой символ на клавиатуре в качестве вашего “знака доллара”
  • Количество цифр после запятой: сколько вам нужно суб-единиц для токена? 100 как в долларах и центах? Или 1000? Или 10000?

7.7. Теперь, когда вы установили параметры, прокрутите страницу вниз и нажмите на кнопку “Развернуть”. Вы можете оставить слайдер комиссии в позиции по умолчанию; все, что не будет потрачено при разворачивании вашего токена, будет возмещено.

8.8. На вкладке “Кошельки” прокрутите список до последних транзакций, и вы должны будете увидеть адрес только что развернутого контракта.

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

После того, как вы создали токен, вы можете отправить его кому-либо еще, у кого есть кошелек Mist, после того, как он предоставит вам адрес своего кошелька. Чтобы получатель смог увидеть этот токен, вам нужно будет сообщить ему о том, чтобы он начал “наблюдение” за ним. Более подробная информация об этих особенностях приведена ниже.

Упражнение: Наблюдение за токенами.

Будь то токен, созданный вами, или токен, созданный какой-либо крупной организацией, все токены в системе Ethereum создаются на равных условиях. Ваш кошелек Mist будет игнорировать их, если только вы не скажете ему делать обратное. Так же, как ваш iPhone не станет загружать каждое приложение из App Store, Mist позволяет вам искать и загружать только те токены, которые вам нужны.

Как видно из диалогового окна “Наблюдать за контрактом” (Watch contract), показанном на изображении 5-11, для отслеживания токена нужно немногое. Давайте углубимся.

Знание базовых вещей о токене позволяет браузеру Mist отслеживать ваш баланс в этом токене.

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

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

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

1.1. Вернитесь на вкладку “Контракты” в Mist.

2.2. Нажмите “Наблюдать за токеном” (Watch Token).

3.3. Вставьте адрес токена. Впишите имя токена, если оно есть.

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

5.5. Нажмите на кнопку “Наблюдать”. Теперь вы должны увидеть, что баланс этого токена отображается в вашей основной панели инструментов Mist.

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

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

Регистрация ваших токенов

Токены доступны для проверки публично, если вы зарегистрируете свои токены с помощью обозревателя блокчейна, такого как Etherescan, и приведете их в соответствие со стандартом токенов ERC. ERC означает Ethereum Request for Comment (запрос комментариев по Ethereum) и относится к общему соглашению под названием RFC, используемому ведущими организациями в области технической разработки и определения стандартов для интернета.

В дополнение к документам ERC, разработка Ethereum в рамках сообщества также руководствуется Ethereum Improvement Proposals или EIP (предложений по улучшению Ethereum). Вы можете посмотреть список всех предварительно запрограммированных стандартизированных функций, доступных для стандартного токена, на странице.

Венчурная студия Ethereum ConsenSys также выпустила свободный и опенсорсный стандартный код смарт-контракта:

https://github.com/ConsenSys/Tokens

Оба этих URL-адреса также представлены на странице.

Развертывание вашего первого контракта

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

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

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

Примечание

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

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

Дважды перепроверьте, что вы действительно подключены к тестовой сети, прежде чем задеплоить контракт в первый раз. Если вы используете MacOS, Windows или Ubuntu, вы увидите меню “Разработка” (Develop) в верхней панели, как показано на изображении 5-12 в среде Ubuntu 14.04. Также обратите внимание, что Mist может выполнять майнинг в тестовой сети. Это позволит вам тестировать контракты локально. Подробнее об этом – в следующих разделах.

Дважды перепроверьте, что вы в тестовой сети. Упражнение: развернуть простой контракт за пять минут.

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

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

Вы найдете код контракта здесь: https://github.com/chrisdannen/Introducing-Ethereum-and-Solidity/.

Из-за рискованной природы контрактов важно практиковать написание контрактов, которые вы, программист, сможете контролировать. Исходя из этого, называемый Owned контракт учит, как написать небольшой класс для эфира, который контролируется другим кодом на Solidity. Давайте посмотрим на owned.sol:

//! Owned contract.

//! By Gav Wood (Ethcore), 2016.

//! Released under the Apache Licence 2. pragma solidity ^0.4.6;

contract Owned {

modifier only_owner { if (msg.sender != owner) return; _; } event NewOwner(address indexed old, address indexed current); function         setOwner(address _new) only_owner { NewOwner(owner,

_new); owner = _new; }

address public owner = msg.sender;

}

Примечание

Не забудьте добавить версию Solidity (pragma) в первую строку вашего контракта перед его развертыванием. Это не является строго необходимым, но помогает предотвратить ошибки компилятора.

Вы развернете контракт Owned мгновенно, и EVM выдаст вам адрес контракта. Как только он будет загружен в тестовую сеть, вы сможете вставить этот адрес контракта в поле To в кошельке Mist и отправить на его адрес определенное количество эфира для его активации. Это сделает ваш внешний аккаунт msg.sender и, следовательно, владельцем этого контракта.

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

Один дом, разные адреса

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

Owned.sol – это “золотистый ретривер” среди смарт-контрактов: позови его, и он тут же прибежит и подтвердит, что вы его владелец, – независимо от того, являетесь ли вы человеком, управляющим внешним аккаунтом, или это попросту другой смарт-контракт, который вызывает owned.sol программным образом.

Если Алиса загружает owned.sol в EVM из Индии, к нему можно будет получить доступ как к локальному скрипту, а значит, можно и расширить при помощи контракта, который вы загрузите в EVM из Нью-Йорка. Круто, не так ли?

В последнем развертывании – токена – вы просто вставили код на Solidity и позволили Mist выполнить свою работу. Это круто, но слишком легко. Чтобы узнать больше, что происходит “под капотом”, давайте вручную скомпилируем код Solidity в байт-код EVM, используя онлайн-компилятор. В качестве напоминания, вы можете найти онлайн-компилятор по адресу.

После того, как вы откроете компилятор в своем браузере, вернитесь на Github-страницу этой книги.

Давайте скомпилируем и протестируем контракт Owned. Найдите скрипт на Solidity под названием owned.sol в репозитории Github и откройте его, чтобы выполнить следующие шаги:

Примечание

Скопируйте весь текст в файле. Он включает в себя заголовок версии pragma в верхней части, который сообщает компилятору, на какой версии языка Solidity был написан этот контракт.

1.1. Скопируйте текст этого контракта в буфер обмена вашего компьютера (Ctrl+C в Windows или Linux и Command+C на Mac).

2.2. Вставьте свой код (Ctrl+V или Command+V) в основное текстовое поле браузерного компилятора. Если там есть образец кода, сначала очистите это поле целиком. Вам не нужен никакой мусор в вашем прекрасном чистом контракте. Все должно выглядеть примерно так, как показано на изображении 5-13.

Вставьте код контракта в окно компилятора в браузере.

3.3. Нажмите кнопку “Скомпилировать” (Compile), и ваш контракт начнет компиляцию. Выберите байт-код, который появится в соответствующем поле, и скопируйте его в буфер обмена.

4.4. Вернитесь к браузеру Mist.

5.5. Повторите процесс развертывания контракта из контракта токена: в кошельке Mist перейдите на вкладку “Контракты” в правом верхнем углу и нажмите “Развернуть новый контракт”. Вставьте свой новый байт-код в поле для байт-кода контракта.

6.6. Прокрутите страницу вниз и нажмите на кнопку “Развернуть”.

7.7. На вкладке “Кошельки” прокрутите список до последних транзакций и вы увидите адрес только что развернутого контракта.

8.8. Пройдите через тот же  путь “Наблюдение за контрактом”, который вы проходили для токена. Вставьте адрес контракта, полученный из вашего списка транзакций и дайте контракту название “Owned”. В этот раз вы добавите немного JSON-кода в поле.

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

Экспериментируем с контрактами

Теперь, когда ваш контракт развернут с интерфейсом в Mist, вы можете его активировать. Чтобы вызвать контракт в EVM, вам необязательно отправлять какое-либо количества эфира; вы можете вызвать его, просто отправив 0 эфира на адрес контракта. Вжух, и теперь вы владелец! Если это не сработает, убедитесь, что контракт был загружен в тестовую сеть, и что Mist, который вы используете для отправки транзакции с нулевым значением эфира, также подключен к тестовой сети.

Для контракта Owned активация – это вопрос с ответом “да” или “нет”. Вы можете вызвать его нулевым значением эфира или 100. В более сложных контрактах сумма, которую вы отправляете, имеет критически важное значение для того, как контракт будет вести себя после вызова.

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

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

Итоги Главы 5

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

Далее, нам стоит узнать больше про то, как сетевая база данных EVM достигает консенсуса: процесса, известного как майнинг по протоколу proof-of-work. Это тема следующей главы.

Примечания к Главе 5

  1. Wikipedia, “Legality of Bitcoin by Country,” https://en.wikipedia.org/wiki/Legality_of_bitcoin_by_country , 2017.
  2. ConsenSys Media, “Programmable Blockchains in Context: Ethereum’s Future,” https://medium.com/consensys-media/programmable-blockchains-in-context-ethereu m-s-future-cd8451eb421e#.rwdqmpvu0 , 2015.
  3. Nick Szabo, “Shelling Out: The Origins of Money,” http://nakamotoinstitute.org/shelling-out/ , 2002.
  4. Armstrong Economics, “Money and the Evolution of Banking,” www.armstrongeconomics.com/research/monetary-history-of-the-world/historical-outl ine-origins-of-money/money-and-the-evolution-of-banking/ , 2016.

Андрей Никитенко
Андрей Никитенко
Задать вопрос эксперту
Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Share via
Copy link