Universa: разрушение мифов. Часть 2 – токены, в подробностях

Общаясь с сообществом Universa, мы часто видим одни и те же ситуации с недопониманием (а иногда даже мифы). Обсудим их поподробнее, а заодно и узнаем особенности Universa получше.

Миф второй. А разве «утилити-токен» (“utility-token”), да и вообще просто «токен» — это не просто очередной модный синоним для «криптовалюты»?

В предыдущей статье я уже объяснил, почему UTN — это «токен, а не монета/coin», но давайте рассмотрим тему поподробнее и обсудим, чем же и насколько сильно «токены» отличаются от «валюты/монеты».

Ну, по крайней мере, UTN — это токен, вне всяких сомнений. Но что обозначает само слово «токен»? Чем оно так сильно отличается от «криптовалюты»? А что у него общего с криптовалютами? И насколько UTN отличается от смарт-контрактов U?

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

Так что же, в конце концов, такого в этих токенах?

Если мы будем думать о Bitcoin и подобных ему сетях «перевода денежной ценности» как о «первом поколении блокчейнов», то само слово «токен» появилось где-то в районе второго поколения. Примерно тогда, когда блокчейны стали мыслить чуточку шире, чем просто «а как послать изменение баланса с одного аккаунта на другой аккаунт и пересчитать оба баланса», и начали предлагать механизмы создания dApp-ов (приложений распределённого исполнения) или хотя бы механизмы создания самодельных «монет/валют». «Токенами» стали называться как раз такие «ценные денежные единицы», создаваемые вручную

Некоторые блокчейны подразумевали и включали в себя платформы для создания множества различных «монет» или «валют», что-то вроде «создай отдельную монету для любой пришедшей в голову задачи» (помните тот промежуток времени, когда самым хайпом считались «раскрашенные монеты», “colored coins”?).

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

Вот где-то примерно тут и проходит та самая граница — между тем, что «всё ещё криптовалюты» и тем, что «уже токены». Криптовалюта, или, как их ещё называют, «монета» — чаще всего это какой-то «гражданин первого класса», выделенная и явная самостоятельная сущность в блокчейне (вроде даже того, чем в блокчейне Ethereum является валюта ETH), механизм для «учёта передачи ценности», явно заложенный в сам протокол. Токен же — это скорее какая-то «самостоятельно разрабатываемая более высокоуровневая функциональность, имитирующая поведение денег, сделанная из более низкоуровневых блокчейновых возможностей», как, например, «интерфейс dApp-ов, эмулирующий поведение денег».

Это — одно из возможных определений понятия «токен», но единственное ли? Конечно, нет; надо учитывать ещё как минимум один аспект. Как я уже объяснил в предыдущей статье, важный фактор, который надо учитывать, размышляя про что-то, «а это у нас криптовалюта или токен» — это а как эта вещь изначально позиционируется и рекламируется. Если актив пытается быть «новым поколением денег», чтобы его принимали в гастрономах, интернет-магазинах и киосках, как евро и биткойны — скорее всего, это «криптовалюта». А если что-то — это нишевый платежный механизм для каких-то конкретных сервисов, то это скорее «токен» (что переводится как «жетон» или «фишка»), вот как бывают «фишки в казино» или «жетоны для игровых автоматов».

Помните ту старую добрую рекламу Universa “New money order” («Новый денежный порядок»)? А вот заметили ли вы, что даже тогда, в 2017ом, мы уже говорили слова «Новый денежный порядок» не о самом UTN, а про блокчейн Universa в целом? В мире Биткойна, например, «революционной новой валютой» была сама криптовалюта Bitcoin (BTC); в мире Universa же «новый денежный порядок» — это вся парадигма «умных денег» и «умных документов», которые можно создать на базе архитектуры Universa blockchain.

«Новыми деньгами» называли не сам UTN — «новые деньги 21-го века» должны разрабатываться на базе Universa blockchain, отражая специфические требования тех, кто их разрабатывает (от «умных денег на школьный завтрак», которые мог бы использовать только школьник и только в школьной столовой, и до социальных пособий и пособий по безработице). Тогда это выглядело достаточно нечётко, как размытая цель в далёком будущем; сейчас же в Universa уже много всего сделано и добавлено, чтобы приблизить и это будущее и эту цель, от типовых шаблонных контрактов и процедур работы с ними (вроде схемы по выполнению escrow, условного депонирования) и до… сейчас у нас есть даже «коробочный CBDC», UDC, готовый для развёртывания для таких целей в масштабе целых государств и использующий для этого всю мощь контрактов Universa.

А UTN… как я уже говорил в предыдущей статье, UTN был — и остаётся — всего лишь платёжной единицей для оплаты использования сети Universa.Просто топливо для функционирования нового денежного порядка. Потому что кому ну нужен “UTN” как подобие какой-тото «суррогатной валюты», когда у вас потенциально может быть самая что ни на есть реальная валюта вашей страны, оцифрованная для использования в смарт-контрактах.

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

Но что значит эта фраза, «вести себя почти как деньги»? Как ведут себя деньги? Мы все пользовались какими-то монетами или деньгами с самого нашего босоногого детства; а в школе, во время уроков истории, мы все слышали эти рассказы про ранние исторические формы денег (помните все вот эти «ракушки в качестве денег» и прочие «шкуры животных», использовавшиеся когда-то как «натуральные деньги»?). Но что же делает деньги удобными (и что делает какие-то объекты воспринимающимися «как подобие денег»)?

Ну, давайте рассмотрим некоторые…

Основные функции денег

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

Делимость

Центы для доллара и евро. Пенсы для фунта стерлингов. Копейки для рубля. «Сатоши» для BTC, «веи» для ETH. Любая единица должна быть делима достаточно мелко, чтобы вы могли использовать её не только для макро-транзакций, стоящих очень дорого, но и для микроплатежей. Вот почему Биткойн делится вплоть до 10⁻⁸, и почему в каждом ERC20 есть этот странный параметр “decimals”.

И это как раз то, для чего у пермишна (разрешения) SplitJoinPermission в смарт-контрактах Universa (то самое «разрешение», которое позволяет вам создавать «денежноподобные» контракты в Universa) есть поле min_unit (к примеру, см. на строку 47 в YAML-представлении смарт-контракта UTN).

Если что-то можно разделить на мелкие равные части, то этими частями можно «платить» за транзакции малой ценности.

Долговечность

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

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

Редкость

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

И в частности, это одна из причин, почему в Bitcoin — помимо его маркетинга как «валюты нового поколения» — ограниченный total supply (максимальное количество). Если максимальное количество ресурса определённо и доказуемо ограничено, свойство редкости выполняется.

Портативность

Деньги — портативны

Это то самое свойство, с которым у «исторических» валют вроде мехов и ракушек и начались проблемы. Чтобы носить с собой достаточное количество мехов, не хватит кошелька или сумки — нужно скорее что-то вроде повозки. Слишком много ракушек с собой тоже не потаскаешь — чем более богатым ты становишься, тем больше физического пространства занимает твоё богатство. А сложить их в своём сарае и просто держать там — тоже не получится: деньги должны работать, «двигаться», использоваться для платежей, а не просто для хранения.

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

Чудесная особенность Bitcoin — что ты можешь носить с собой столько биткойнов, сколько только захочется, просто храня ключ доступа к ним в одном-единственном «аппаратном кошельке» (или даже на металлической пластинке с выгравированным на ней «мнемоническим кодом»). Если у тебя есть хоть какой-то доступ к интернету (и компьютер или приложение в смартфоне, чтобы запустить на нём клиент Bitcoin) — этого достаточно, чтобы ты мог распоряжаться всем своим богатством.

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

Узнаваемость

Да, деньги ещё должны быть легко узнаваемы и распознаваемы людьми.

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

А восприниматься… как что-то конкретное. «Это банкнота – это настоящие 100 долларов Соединённых Штатов Америки». «Это — монетка в одно евро». «Эта странная транзакция, зарегистрированная где-то в интернете на каких-то серверах, называющих себя нодами, это на самом деле платёж в 1,5 биткойна».

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

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

Индивидуальность и идентифицируемость

Деньги идентифицируемы

В тех блокчейнах, в которых одновременно может использоваться сразу несколько «монет/токенов», вроде Ethereum или Universa, необходимо знать какой-то уникально идентифицирующий фактор токена, чтобы понять, что ты видишь перед собой именно конкретный токен. Люди могут считать таким идентификатором «название токена/монеты», но обычно названия недостаточно — нужно знать также и официальный метод «узнавания этой единицы». Просто в таких системах кто угодно может легко создать новый токен или валюту; и обычно никто не может предотвратить то, что они назовут новый токен или валюту именем уже имеющегося токена или монеты. Делаешь новый токен и называешь его “Universa” или “UTN-токен” (а может, и “UTNP”, если дело происходит в блокчейне Ethereum)? могут быть люди, которые попробуют сделать такое и попытаются имитировать наши токены своими фальшивками. Некоторые даже пытались.

В сети Ethereum таким уникальным идентификатором обычно является адрес dApp-а/«децентрализованного приложения». Это уникальный адрес для любого “токена/валюты” (например, для UTNP это 0x9e3319636e2126e3c0bc9e3134AEC5e1508A46c7, как упомянуто в нашей KB), и его достаточно, чтобы отличить наш токен от любого другого токена, даже если тот выглядит похоже или называется аналогично.

В архитектуре Universa отличать токены/валюты может быть немного сложнее. Как вы, наверное, уже знаете из наших предыдущих статей, в Universa токен — это просто любой смарт-контракт (умный документ), у которого определено разрешение (permission) “split-join”. Свойства этого разрешения как раз и формируют «методику определения» токена. Опять же, как уже упоминалось в нашей KB в той же самой статье про UTN и UTNP, правило опознавания настоящего UTN-токена и отличия его от других токенов — это «Origin ID смарт-контракта является NPo4dIkNdgYfGiNrdExoX003+lFT/d45OA6GifmcRoTzxSRSm5c5jDHBSTaAS+QleuN7ttX1rTvSQbHIIqkcK/zWjx/fCpP9ziwsgXbyyCtUhLqP9G4YZ+zEY/yL/GVE».

В обычном «нецифровом» мире эта проблема проявляется в не меньшей степени. Задумывались ли вы, что проблема «токена, который называется точно так же, как какой-то другой» вовсе не уникальна для блокчейнов (в связи с легкостью создания в них новых токенов)? — знаете ли вы, что в мире существует больше 20 валют, каждая из которых называется «доллар»? и что если вы не хотите, чтобы кто-нибудь вам под видом «сингапурских долларов» выдал «гонконгские доллары», хорошо бы научиться отличать их друг от друга. Думали про то, что туристам, путешествующим по России и Беларуси, хорошо бы научиться различать русские и белорусские рубли, потому что один из них — примерно в 30 раз дешевле, чем другой?

Легитимность

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

В «оффлайн-мире» это на удивление сложно. Положим, научиться «отличать доллары США от гонконгских» («распознаваемая индивидуальность») можно достаточно быстро. Но вот как отличать настоящие доллары США от поддельных долларов США? Особенно в мире, где типографские технологии промышленного качества понемногу становятся доступны рядовым пользователям? Это настоящая и неиллюзорная проблема.

Интересно, что блокчейн и цифровые технологии в этой области как раз показывают свои сильные стороны. Чтобы отличить «UTN Universa» от «похожих токенов, тоже называющихся UTN», и чтобы отличить «настоящий UTN Universa» от «фальшивого UTN, имитирующего UTN Universa», достаточно воспользоваться одними и тем же идентифицирующими правилами. Вроде таких, как, «dApp создан в основной сети Ethereum / mainnet, и адрес этого dApp-а — 0x9e3319636e2126e3c0bc9e3134AEC5e1508A46c7», или «контракт зарегистрирован в Universa Mainnetwork, и его Origin ID — NPo4dIkNdgYfGiNrdExoX003+lFT/d45OA6GifmcRoTzxSRSm5c5jDHBSTaAS+QleuN7ttX1rTvSQbHIIqkcK/zWjx/fCpP9ziwsgXbyyCtUhLqP9G4YZ+zEY/yL/GVE». И не надо читать толстые многостраничные брошюры с рассказом про «интегрированные в тело купюры красные и белые нити», «ультрафиолетовый свет» и «рельефную печать».

Но все вышеописанные свойства не настолько интересны и важны (когда вы размышляете, считать какой-то актив «ведущим себя как деньги» или нет), как следующее свойство денег:

Взаимозаменяемость (Fungibility)

Деньги взаимозаменяемы

Наверное, это самое интересное — и в то же время самое мало обсуждаемое — свойство денег. Вы постоянно использовали его, вы подразумевали его — и в то же время, очень даже вероятно, вы никогда не задумывались о нём. Интуитивно вы его всегда учитывали, даже когда играли с «деньгами из листиков деревьев»; а когда вы повзрослели и столкнулись с купюрами в игре «Монополия», вы использовали его уже в полную силу. Вы догадывались про это свойство ещё до того, как изучили некоторые другие из свойств (например, до того как научились опознавать фальшивые банкноты).

Суть этого свойства: какие-то конкретные активы «обладают свойством взаимозаменяемости/fungibility», если любые конкретные экземпляры этого актива можно заменять на другие экземпляры этого актива, и любые части этого актива можно заменять на любые другие (аналогичные) части.

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

5-евровая купюра стоит 5 евро, вне зависимости от того, старая она или новая, напечатана в Германии или в Италии, есть на ней какие-нибудь (незначительные по размеру) пометки или нет. И её всегда можно поменять на какие-то монеты евро суммарной ценностью в 5 евро — неважно, пять ли это одноевровых монет, две монеты по два евро и одна одноевровая, или это целая горсть монеток по 10 евроцентов.

Конечно, это свойство наглядно заметно и для торгуемых натуральных ресурсов — когда вы покупаете 1 баррель нефти, вас устроит любой 1 баррель нефти, или любой другой баррель вместо него (разумеется, подразумевая, что оба барреля — это нефть с одинаковыми стандартизированными химическими свойствами).

Вот почему золотые чеканные монеты стало возможно использовать в качестве удобного платёжного инструмента (если они отчеканены правильно — содержат одинаковое количество золота и стоят одинаково, вне зависимости от конкретной монетки), а вот почтовые марки подходят для этого не особо (по самой их природе и за счёт различных картинок на них, марки различны, некоторые из них имеют большую ценность, некоторые — меньшую). И вот почему вам — несмотря на некоторые другие свойства — было вполне удобно использовать листья деревьев в качестве «игрушечных денег» (потому что все берёзовые листики в общем-то похожи и почти неотличимы друг от друга) — и вот почему мехá в конце концов перестали активно использоваться в качестве валюты (некоторые меха более качественные, некоторые менее; некоторые меха больше размером, некоторые меньше). Жемчужины и тем более драгоценные камни могут быть очень даже дорогими, их можно использовать для долгосрочных инвестиций, и в то же время они весьма неудобны в роли платёжного инструмента или денег — каждый конкретный бриллиант может быть больше или меньше размером, у него может быть более или менее симпатичная огранка, более или менее яркая чистота, более или менее интересный цвет — так что их не получится использовать просто в формате «ну, дайте мне просто 15 каких-нибудь бриллиантов за этот двуручный меч».

И вот почему в современных блокчейновых системах обычно нет отслеживаемых конкретных «купюр» или «виртуальных банкнот»; вместо них там учитываются крупные кучки (произвольных и меняющихся размеров) «монет»/«токенов» и произвольные их количества, переводимые между пользователями. В настоящих банках, впрочем, всё точно так же: банки не следят за номерами конкретных купюр в их владении — им достаточно знать их общую сумму.

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

Взаимозаменяемость в dApp-ах Ethereum

В «децентрализованных приложениях» (dApp-ах) Ethereum, в частности, в типичных и наиболее популярных контрактах ERC20, свойство взаимозаменяемости по сути «врождённое». Если вы внимательно почитаете спецификацию ERC20, в ней просто нет никакой возможности указывать какую-то конкретную «купюру» или «банкноту»; единственное, что важно и что отслеживается — это значение, ценность. В методе “transfer” («перевод») есть просто аргумент “amount” («количество»), а не какой-нибудь способ «указать конкретные имеющиеся у тебя банкноты, которые будут использоваться для набора этого количества». В ERC20 нет никаких механизмов, чтобы указывать такие «банкноты» или какие-то ещё части транзакций; и единственный способ понять «степень богатства» какого-либо адресата — это вызвать метод balanceOf («баланс кого-то») , возвращающий только численное значение баланса на этом адресе, но не какие-то «конкретные банкноты».

А вот сделать и отслеживать уникальные, но не взаимозаменяемые (non-fungible) сущности (вроде тех же почтовых марок — а может быть, каких-нибудь уникальных документов с гибкой структурой) в архитектуре Ethereum — не так просто и очевидно. Для этого там существует стандарт ERC721; но, т.к. в Ethereum использующиеся там «смарт-контракты» по сути являются dApp-ами, децентрализованными приложениями, а не документами — такой стандарт не настолько обобщённый, чтобы позволять учитывать «вообще любые не-взаимозаменяемые документы»; но в целом он достаточно неплох для учёта типичных коллекционных ценностей, вроде почтовых марок… или Криптокотят.

Взаимозаменяемость в смарт-контрактах Universa

В Universa достаточно легко сделать «что-нибудь невзаимозаменяемое». По сути, ты просто создаёшь любой смарт-контракт. В абсолютно каждом смарт-контракте Universa есть некоторые стандартные поля, благодаря которым такие смарт-контракты и ведут себя как «невзаимозаменяемые токены» из мира Ethereum — например, любое поле state.owner содержит сведения о текущем владельце, секция definition.data содержит «замороженные» (неизменяемые) данные контракта, а секция state.data может содержать какие-нибудь данные, которые в рамках транзакций можно модифицировать. Впрочем, если вы читали статью «Внутри смарт-контракта Universa», вы уже это всё знаете.

А вот взаимозаменяемые (fungible) токены — это немного интереснее. Как добавить в какой-нибудь смарт-контракт свойство взаимозаменяемости? Вообще, это настолько важно и интересно, что у нас в KB есть отдельная статья про это: “Contracts fungibility: making tokens and currencies”. Но если вкратце — именно пресловутое разрешение SplitJoinPermission и отвечает за добавление смарт-контракту «взаимозаменяемости». По сути, внутри себя оно содержит

  • правило, кто именно может «разделять» и «складывать» какие-то «кучки» с количествами токенов (обычно такими правами наделяется именно текущий владелец токена; но в каких-то особых случаях логика может отличаться);
  • описание, как именно хранится числовое значение «количества токена» (так как для «взаимозаменяемого токена» важно только числовое значение, то в целом мы должны просто указать конкретное поле в контракте, которое и содержит это числовое значение «ценности»);
  • как именно такой смарт-контракт может разделяться/расщепляться (помните свойство «делимости» для денег? к примеру, именно тут мы можем указать, что «минимальное используемое значение ценности этого токена — это 0,0001»);
  • и, самое главное, как именно токены могут объединяться с аналогичными (а теперь вспомните такие свойства денег, как «идентифицируемость» и «узнаваемость»).

Например, смарт-контракт может содержать такое описание этого условия: «этот смарт-контракт может объединяться с другим смарт-контрактом — при этом значения их ценности будут просуммированы — если у обоих смарт-контрактов одинаково значение поля origin id (поля, содержащего хэш самой первой ревизии этого смарт-контракта)»; и если, например, это самое значение поля origin id является “NPo4dIkNdgYfGiNrdExoX003+lFT/d45OA6GifmcRoTzxSRSm5c5jDHBSTaAS+QleuN7ttX1rTvSQbHIIqkcK/zWjx/fCpP9ziwsgXbyyCtUhLqP9G4YZ+zEY/yL/GVE”, то, по сути, мы почти дословно процитировали внутреннее устройство смарт-контракта UTN. Но в общем, такая методика («делать смарт-контракты объединяемыми, если у них одинаковое значение origin id») — это наиболее очевидный способ сделать токен “non-mintable”, т.е. с зафиксированным общим предложением (полной и максимальной суммой, сколько всего может быть таких токенов).

Или, как вариант, в смарт-контракте может быть условие «этот контракт можно объединять с другим, если поле issuer — т.е. создатель первой ревизии контракта — содержит одинаковый адрес/публичный ключ; и ещё какое-то поле в определении смарт-контракта, например, definition.data.name, содержит одинаковое значение». Если вы немножко поразмыслите над этим определением, то догадаетесь, что так проще всего сделать «довыпускаемые», “mintable”-токены. Ведь если создан какой-то новый токен, и у него такое же точно поле “name” (название), как у исходного токена — нууу, может быть, это просто новый довыпуск того же самого токена; но может быть, это какой-то «фальшивый» токен (выпущенный мошенником); но если у обоих токенов одинаковое название и при этом они выпущены одним и тем же автором — раз их сделал один и тот же автор, то очевидно, это и правда новый довыпуск старого токена, а не фальшивка.

Токены и деньги/«криптовалюты», примеры

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

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

BTC

Первые криптовалюты

Начнём с главного: Bitcoin всегда и с самого начала воспринимался как «новая форма денег» — вот почему его почти с самого первого дня и называли «криптовалютой».

Является ли BTC в архитектуре Bitcoin-сетей «гражданином первого класса», встроенной готовой концепцией для передачи ценности? Определённо так; вообще, вся архитектура Bitcoin создана и ориентирована на то, чтобы хранить числовое значение ценности и передавать числовое значение ценности (в его случае — ценности валюты BTC), и, кроме этого, сеть Bitcoin не умеет почти ничего другого. Можно узнавать баланс любого адреса, можно передавать часть этого баланса.

Но, помимо того,

  • делимость — да, до 10⁻⁸ (сатоши);
  • долговечность — пока будет стоять Интернет, пока будут существовать компьютеры и работать Bitcoin-ноды;
  • редкость — алгоритмически ограничено до 21 миллиона BTC;
  • портативность — ну в какой-то степени; нужно каким-то способом хранить секретный ключ, а, чтобы воспользоваться им — нужен компьютер/смартфон и выход в интернет;
  • узнаваемость — вполне узнаваемо и понятно для технически подкованных и более-менее разбирающихся в основных возможностях использования Bitcoin;
  • взаимозаменяемость (fungibility) – галочка.

Выглядит как самая что ни на есть эталонная «(крипто)валюта». Ну, это было просто.

А что насчёт…

ETH

Любопытно, но, по сравнению с Bitcoin, «эфир» особо и не рекламировался/позиционировался как какая-то «уникально новая форма денег». И тем не менее, когда после Bitcoin-а появилась первая волна «крипто-валют-монет-всего-такого» — появилось и много механизмов приёма «платежей в альткойнах», и с их помощью стало возможно одинаково принимать платежи в Bitcoin, Ethereum, Monero, EOS, чём угодно ещё. Положим, Ethereum как «валюта» или «средство платежа общего назначения» особо и не рекламировался; дефакто же он им в конце концов оказался.

ETH — это «гражданин первого класса» в своей архитектуре? Любопытно, что да; как уже упоминалось в предыдущей статье о мифах, некоторые транзакции Ethereum могут содержать «перевод ценности» (количества ETH), а некоторые — содержат описание созданий или запусков dApp-ов. Уже вполне достаточно «первоклассно», чтобы считать ETH «криптовалютой».

Другие свойства?

  • делимость — да, до 10⁻¹⁸ (веи);
  • долговечность — вполне стандартно для всех блокчейнов — пока будут существовать Интернет, компьютеры и ноды;
  • редкость — а вот тут ещё интереснее: ether не настолько редок, как биткойн; нет никакой верхней границы для общего предложения ETH, так что количество ETH-ов может расти бесконечно;
  • портативность, узнаваемость, взаимозаменяемость — вполне типично для любых блокчейн-систем.

Ну, если BTC был «однозначно криптовалютой», сказать то же самое про ETH уже немного сложнее. Да, он дефакто используется как криптовалюта, для платежей; но изначально он создавался как «механизм оплаты за работу сети», т.н. «газ»; а кроме того, его общее предложение неограниченно (что для денег в целом достаточно нетипично).

Но давайте теперь поговорим на темы, более близкие к Universa…

UTN

Теперь, я надеюсь, вы уже понимаете, почему мы так часто напоминаем, что «UTN — не криптовалюта/„монета“». Потому что обратное вводило бы людей в заблуждение.

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

С другой стороны, если/когда какая-нибудь валюта уровня целой страны будет сделана на архитектуре и сети Universa, а затем будет принята в своей стране как «официальный CBDC» (Central Bank Digital Currency — цифровая валюта Центробанка), то такая CBDC будет «валютой» просто по определению.

Кроме того, UTN вовсе не «высокоуровнев» и не «гражданин первого класса» в самом блокчейне Universa: упоминания конкретно UTN в исходном коде можно найти разве что в исходном коде клиентских приложений (в частности, в контексте резервирования U); но вот сами ноды и сам блокчейн не имеет никакой специальной обработки для UTN, они обрабатывают транзакции с UTN ровно так же, как любые другие транзакции со split-join-токенами. Это как если бы ETH в архитектуре Ethereum сам был ERC20-токеном, и его нельзя бы было передать выделенными «транзакциями передачи ценности», а только стандартными вызовами методов ERC20.

А что насчёт других «свойств денег»?

  • делимость — да, взгляните на исходный код UTN-контракта в YAML-представлении и обратите внимание на строчку min_unit: ‘0.000000000000000001’.
  • долговечность и портативность — чуточку непривычно по сравнению с BTC и ETH; чтобы пользоваться и управлять вашими UTN, вам нужно не только хранить ваш секретный ключ, но, кроме того, нужно где-то ещё хранить и сами контракты — в файлах или, может быть, в криптооблаке Crypto Cloud. Не слишком ли это неудобно для случаев, когда на базе Universa будет запускаться CBDC? — но весь смысл нашего продукта UDC в том, чтобы решить эту проблему и сделать «центробанковые цифровые валюты на базе Universa» более «портативными» и удобными в использовании. Базовый же UTN ведёт себя скорее… не как «денежная купюра», даже не то что бы как «(умный) документ», а, скорее, как «заверяющая печать на документе», и подразумевается, что сам документ ты как-то хранишь и переносишь самостоятельно.
  • редкость — да, общее предложение было ограничено суммой в 4.9B, это было одним из условий (итогов) токен-сейла.
  • узнаваемость, взаимозаменяемость — аналогично другим блокчейнам.

В целом, уже достаточно много причин считать, что UTN — это именно токен (и причём не «просто какой-то токен», а «utility-токен», предназначенный исключительно для оплаты за использование сети Universa, как бы и в какой форме это ни выполнялось). Никогда не планировался как «средство платежа общего назначения»; создан исключительно из «строительных кубиков» системы и никак не обрабатывается по-особенному блокчейном и узлами сети; скорее соответствует «документу» (или даже «печати на документе»), чем «денежному переводу», да что там, на уровне самой сети вообще нет понятия «перевести актив с адреса на адрес» — единственное, что есть, это «зарегистрировать контракт».

Но всё ли это из элементов Universa, что можно было бы рассмотреть?

Нет. Некоторые люди, изучая использование UTN в нашей главной сети (“Mainnetwork”), замечают другой смарт-контракт, напрямую использующийся в Mainnetwork: U. И после этого они начинают задавать вопросы: «а разве не это как раз utility-токен»? (Иногда вопрос звучит даже как «а может, именно U — это и есть utility-токен, а не UTN»?) И ответ на это будет совершенно неожиданным…

U

U — вообще не токен.

Смарт-контракты U — это энергопотребление сети.

Если вы читали Universa whitepaper, то заметили объяснения, что токен UTN используется для оплаты за любое использование сети; а из маркетинговых материалов вы могли также запомнить, что одна из задач Universa — это чтобы стоимость транзакции в предельно простых случаях была бы чрезвычайно низкой, на уровне 1 (евро)цента для самых базовых транзакций. А когда вы начнёте искать в whitepaper-е описание предназначения U, то найдёте… а ничего не найдёте.

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

Обратите внимание, кстати, на фразу «один из способов» (вместо, например, «основной способ»):

  • В других сетях Universa, например, в «частных сетях», развёрнутых вне Mainnetwork, всё равно будет возникать требование «платить в UTN за транзакции». Я уже как-то упоминал это в другой статье, и достаточно скоро стоит ожидать более подробной статьи на эту тему. Механизмы реализации этого требования вовсе не обязательно будут выполнены с применением U; но требование использовать UTN никуда не денется.
  • Такой подход, “U is the usage” («U как оплата использования»), применяется и в других компонентах инфраструктуры Universa; Ubot-ы — пусть даже их сеть достаточно самостоятельна, они всё равно реализованы «как часть экосистемы Universa», поэтому механизмы учёта их использования также используют контракты U для измерения потраченных вычислительных ресурсов. А уже U могут быть зарезервированы за UTNы (и только за UTNы).
  • Parsec/UDNS. Вы уже наверняка слышали и размышляли про эти пока ещё разрабатывающиеся системы, предназначенные для замены централизованных DNS/SSL их децентрализованным – и объединённым воедино для простоты управления — современным аналогом; и, возможно, вы задумывались, а какое отношение они вообще имеют к Universa; но, помимо того, что Parsec и UDNS используются для повышения безопасности и надёжности самой сети Universa, они на самом деле ещё и сделаны поверх сети Universa, используют смарт-контракты Universa для управления,.. и да, всё это требует UTN для работы.

Так что о смарт-контрактах U можно думать как о «единице измерения» использования сети. Что-то вроде «джоуля», единицы измерения энергии в нашем обычном неблокчейновом мире, с аббревиатурой Дж. Вот и тут — почти как Дж, только U. U-nit, промежуточная единица измерения энергии. Причём вполне удобная, потому что (в отличие от «газа» в Ethereum) «стоимость» транзакции не зависит от курса на бирже или от нагрузки сети; ваша транзакция всегда будет требовать одинаковое количество единиц U для своего выполнения (опять же, в точности отражая физический смысл единицы измерения энергии).

Но почему U — даже не токен?

… — это не токен

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

Давайте опять-таки вспомним «типичные свойства денег», и фрагменты нашего паззла сложатся воедино.

  • Делимость — если вы посмотрите на пример исходного кода смарт-контракта U, представленный в форме YAML, то вы не увидите там привычного поля min_unit. Но если посмотрите на структуру смарт-контракта повнимательнее и задумаетесь над его логикой, то обратите внимание, что поля transaction_units (с полным путём state.data.transaction_units) и test_transaction_units (полный путь state.data.test_transaction_units) могут иметь какое-то начальное значение, оно может уменьшаться до нуля, и только с минимальным шагом в «–1». Так что минимальная единица делимости поля “amount”, количества, составляет 1. Если вы резервируете обычно что-то вроде «400 U» (в комплекте с которыми можно увидеть “400 000 тестовых U”), это число делится всего лишь до единиц. Не очень-то и делимо, не слишком удобно для использования хоть для каких-нибудь целей, кроме как для учёта использования сети, причём достаточно крупными единицами.
  • Долговечность — обычно смарт-контракты не слишком-то отличаются между собой, от других смарт-контрактов Universa, от того же UTN. Но в нашем случае внутри себя контракт U имеет «срок жизни», вынуждающий пользователя использовать его в течение 365 дней. Посмотрите на поле state.expires_at: каждый раз, когда новые смарт-контракты U резервируются за UTNы и создаются, это поле устанавливается, и таймер начинает тикать; через 365 дней смарт-контракт автоматически истечёт и перейдёт в статус “revoked/undefined” — а вам, наверное, понадобится зарезервировать ещё сколько-то U (а для этого — потратить ещё сколько-то UTN).
  • Редкость — в отличие от тех же UTN, нигде условиями контракта количество U не ограничено. Когда U резервируются, они появляются; когда U используются, они «сгорают». Они способны сгорать ещё и тогда, когда истекает их срок жизни в поле “expires_at”.
  • Портативность — это не менее интересно. Требование портативности для какого-то ресурса или ценности подразумевает, что ты можешь легко его переносить… для чего? по сути, чтобы легко кому-то его передавать. Вы носите с собой меха животных, чтобы отдать их другому торговцу, в обмен, например, на корову. Вы носите морские раковины и отдаёте их торговцу в обмен на свежую рыбу. А насчёт U… посмотрите ещё раз на YAML-представление их исходника и удивитесь: в них нигде нет даже разрешения ChangeOwnerPermission. В UTN разрешение (permission) ChangeOwnerPermission определяло и задавало правило, что именно текущий владелец некоторого количества токенов может передавать их (менять владельца) другому пользователю; а вот в контракте U изменить владельца контракта U после получения уже невозможно. Контракт U становится «твой навеки». Ну, по крайней мере на ближайшие 365 дней. Весьма непортативно, потому что весьма непередаваемо.
  • Узнаваемость — ну, это обычный смарт-контракт Universa. Ноды (узлы) Universa распознают смарт-контракт U по его имени и по ключу/адресу его создателя. Вам же как человеку даже и не требуется распознавать его (и не ожидается, что вы должны это уметь); пользоваться U и распознавать их — это внутреннее дело клиентских приложений. А для конечного пользователя в них — ничего интересного.
  • Взаимозаменяемость (fungibility) — наверное, это свойство будет «вишенкой на тортике» в рассказе про U, и в очередной раз удивит вас тем, насколько гибкими могут быть смарт-контракты Universa. Вы уже знаете, что смарт-контракты Universa делаются взаимозаменяемыми при использовании пермишна “SplitJoinPermission”, позволяющего указать, кто и как может разделять/сливать контракты, насколько мелко делимыми могут быть значения ценности в контракте и — самое главное — что делает два взаимозаменяемых смарт-контракта — «два значения ценности» — совместимыми друг с другом. И… как вы уже заметили в исходном коде смарт-контракта U, в нём совершенно нет этого пермишна.

По сути это означает, что вы вообще не имеете возможности делить какую-то «кучку U какой-то суммы» на мелкие подкучки. Объединять разные контракты U, чтобы собрать из них контракт U большего размера и передать его кому-то ещё, тоже нельзя — да и вообще передать его не получится. Единственные операции, допустимые с этим смарт-контрактом — это смена значения количества “transaction units” / “test transaction units” (причём только уменьшение, только до 0 – фактически, «трата» резерва энергии) и, вдобавок, возможность полностью «отозвать» (сделать недействительным) весь смарт-контракт. Вся мощь сети Universa защищает пользователя — и смарт-контракт U — от того, чтобы с ним можно было сделать что-то ещё, кроме как тратить «запас энергии», сохранённый в нём, или «израсходовать его полностью».

Если и могло быть что-то, настолько непохожее на токены — это U. Без взаимозаменяемости, предназначенное только для трат, не передаваемое от владельца владельцу, недолговечное (всего 365 дней жизни) и (потенциально) не ограниченное в количестве.

Да, U — это по-прежнему смарт-контракты. Но это уже не «токенизированная ценность какого-то ресурса». Вместо этого U, по сути, это токенизированная вычислительная энергия сети (а значение U — “u-nit”, единица измерения такой энергии). Мы сформулировали определение «вычислительной энергии использования сети» и оцифровали её в форме смарт-контракта, приобретаемого за UTN. Причём сделали этот «резерв энергии» только уменьшающимся, так что зарезервированная энергия способна исключительно расходоваться, напоминая нам всем о принципах второго закона термодинамики и о «демоне Максвелла».

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

Help translating this post to Английский Немецкий Французский Голландский Итальянский Испанский Хорватский. Contact @starnold to participate!

Related posts

Universa: разрушение мифов. Часть 1 — ICO, TGE, какая разница?

amyodov

Universa Mythbusting. Part 3 – token demand

amyodov

Leave a Comment