смарт контракт токена что это
Автономность и безопасность. Как работают смарт-контракты
Смарт-контракт — компьютерная программа, которая выполняет соглашения, заключенные между двумя и более сторонами, в результате которых, при выполнении тех или иных условий происходят определенные действия. То есть, когда задействуется ранее запрограммированное условие, смарт-контракт автоматический выполняет соответствующее соглашение. Если рассматривать обычный контракт и смарт-контракт, то можно точно сказать, что они оба являются соглашениями, в которых две или более стороны соглашаются соблюдать ряд условий. Их фундаментальные элементы одинаковы: добровольное согласие всех сторон, объект договора (товара или услуги) и единая цель. Тем не менее, оба отличаются по трем факторам: способ написания, его юридические последствия и концепт соблюдения.
История смарт-контрактов
Термин «умные контракты» был придуман ученым-программистом Ником Сабо, вероятно, в 1993 году, чтобы объяснить цель внедрения в разработку протоколов того, что он назвал «высокоразвитой» ступенью договорного права и связанных с ними бизнес-практик в электронной коммерции. Сабо, вдохновленный такими исследователями, как Дэвид Чаум, также полагал, что разработка умных-контрактов с помощью выполнения криптографических протоколов и других механизмов цифровой безопасности могут стать значительным улучшением по сравнению с традиционными юридическими контрактами.
Сабо использовал слово «умный» в кавычках и заявил о том, что искусственный интеллект задействован не будет. Он приводил классический пример смарт-контракта: это вендинговый автомат. Если условия «контракта» устраивают покупателя (т. е. он опускает деньги в автомат), то машина автоматически соблюдает условия неписаного соглашения и предоставляет покупку.
В настоящее время было разработано несколько формальных языков, которые были предложены для определения условий договора. На данный момент есть много рабочих групп, специализирующиеся на смарт-контрактах, которые содействуют продолжению этого исследования в будущем. До появления блокчейна не было платформы, которая могла бы сделать смарт-контракты реальностью, поэтому она была определена только концептуально.
Как работают смарт-контракты?
Умные контракты полностью цифровые и написаны на языке программирования. В дополнение к установлению обязательств и последствий таким же образом, как и в обычном физическом документе, код может выполняться автоматически. Следовательно, он может получать и обрабатывать информацию, касающуюся переговоров, уже принимая меры в соответствии с правилами договора. BTC ограничен в использовании токенов для финансовых переводов.
Платформа Ethereum заменяет более ограниченный язык BTC (язык сценариев, насчитывающий около ста) языком, который позволяет разработчикам задавать собственные сценарии. Ethereum позволяет разработчикам программировать свои собственные смарт-контракты. Язык является «полным по Тьюрингу», что означает, что он поддерживает более широкий инструментарий вычислительных инструкций.
Платформа Ethereum использовалась для распространения децентрализованных приложений (DApps). Вместо множества приложений, управляемых многими протоколами, Ethereum позволяет управлять всеми приложениями по одному протоколу.
Ethereum — это платформа, которая позволяет разработчикам создавать любую программу, и запускать ее на основных функциях блокчейна, используя смарт-контракты для автоматического выполнения своих действий, задействуя предопределенные условия, встроенные в алгоритм. В случае, если условия будут выполнены, заданная функция автоматически завершается без необходимости предпринятия каких-либо действий.
Преимущества смарт-контрактов
Используя смарт-контракты, больше нет необходимости прибегать к помощи третьей стороны, например, адвоката или нотариуса, который, помимо возможных ошибок, влечет за собой значительные расходы. Блокчейн способен защитить информацию в зашифрованной сети, к которой можно обращаться из любой точки мира, поэтому скорость и безопасность очевидны. Самыми главными преимуществами контрактов являются:
Автономность
Эти контракты всегда заключаются между одним или несколькими физическими или юридическими лицами, но без посредников. Для подтверждения договора не требуется юрист. Поэтому стороны сокращают и могут даже устранить любого лишнего человека, который не участвует в договоре.
Снижение затрат
Поскольку контракты не зависят от третьей стороны, затраты снижаются. Меньшее вмешательство человека приводит к снижению затрат.
Скорость
Умные контракты используют программный код для автоматизации задач, которые в противном случае выполнялись бы вручную. Поэтому они увеличивают скорость бизнес-процессов и менее подвержены ошибкам вручную.
Безопасность
Основывая контракты на блокчейне Ethereum, они не могут быть потеряны. Все является неизменным. Ничто и никто не может заставить его исчезнуть, и у вас всегда есть к ним доступ.
Процесс децентрализованного управления исключает риск манипуляций, поскольку выполнение управляется автоматически всей сетью, а не отдельной частью.
Недостатки смарт-контрактов
С другой стороны, программы такого типа также имеют определенные недостатки. Главный состоит преимущественно в использовании технологий, которые он задействует: интернет-вещей и блокчейн.
IoT может обеспечить связь с активами, но ему еще предстоит пройти долгий путь в области безопасности. IoT-устройства легко взломать. Блокчейн более чем безопасен, но он неизменен. После того, как условия согласованы, их нельзя будет впоследствии изменить, что невыгодно для одной из сторон.
Как создать смарт-контракт?
Контракт разработан на определенном языке (Solidity, Serpent или Mutan), скомпилирован в EVM и, за некоторыми исключениями, соответствует стандартному интерфейсу ERC-20. Solidity является языком, который основан на JS, Python и C++.
Чтобы подойти к созданию смарт-контракта, нужно знать Solidity. Как бумажные контракты создаются людьми, которые знают всю правовую среду вокруг них, в умных контрактах необходимо знать компьютерный код, называемый Solidity.
В документе «Введение юриста в смарт-контракты» для смарт-контрактов описываются два «уровня»: платформа смарт-контрактов (SCP), которая представляет собой инфраструктуру, позволяющую создавать их и управлять ими на блокчейне, и система управления смарт-контрактами (SCMS). Этот протокол добавляется к этой инфраструктуре, чтобы пользователю было проще взаимодействовать с контрактами. То есть, он является графическим интерфейсом.
Контракт выполняется в сети, внутри виртуальной машины Ethereum (EVM). Это исполнение не является бесплатным, но оплачивается в форме «газа», небольшого количества эфирной валюты, внесенного одним или несколькими участниками контракта. Важной деталью является то, что исполнение децентрализовано и производится во всех узлах сети. Это одна из причин, по которой EVM работает так медленно и может обрабатывать только около 15 транзакций в секунду.
Как происходит процесс оформления смарт-контрактов
Инфраструктура интеллектуальных контрактов может быть реализована с помощью реплицированных записей, а выполнение контрактов может осуществляться с использованием древа Меркле, который работает через криптографические хеш-функции и репликацию задачи византийских генералов (BFT), которая является обобщенной задачей двух генералов. Каждый узел в одноранговой сети действует как реестр доверия или гарантии, выполняя изменения держателей контракта и автоматически проверяя правила, наложенные транзакцией, а также проверяя ту же работу других узлов. Криптовалюты типа BTC реализовали особые случаи для тех записей или узлов, где собственностью и ядром транзакции являются деньги. BTC и многие его производные содержат более обобщенные механизмы для прав собственности и исполнения контрактов. Ведение кода — очень важная и часть протокола BTC, основанная на репликации конечного автомата.
Как можно использовать смарт-контракты?
В двадцать первом веке существует возможность перевода всевозможных бумажных договоров в цифровые смарт-контракты, а следственно, появляется и широкий спектр потенциального применения.
Автоматизация платежей: контракт может быть запрограммирован, чтобы гарантировать, что требуемая сумма поступит в указанное время указанным лицам или организациям.
Регистрация и смена владельца: необходимые документы могут быть зарегистрированы в блокчейне, чтобы установить собственность с самого начала и сменить владельца посредством интеллектуальных договоров.
Энергетические транзакции: считается, что это создает цифровую экосистему для обмена энергией. Таким образом, источники электричества или топлива будут связаны с смарт-контрактами, заключенными только между физическими лицами или с вовлеченными организациями, которые, в свою очередь, могут персонализировать потребление каждого клиента.
Интеллектуальная собственность: можно встроить смарт-контракт в любой объект, который контролируется цифровыми средствами. Именно здесь рождается «умная собственность», которая может быть ассимилирована с объектами IoT, подключенными к сети. Они могут варьироваться от дома до автомобилей. Таким образом, например, аренда этих свойств может быть автоматизирована.
Также, криптовалюты, такие как Биткоин, можно рассматривать как набор смарт-контрактов, которые обеспечивают соблюдение закона о собственности. Криптографические методы используются, чтобы гарантировать, что их может потратить только владелец цифрового токена. Уже существует несколько децентрализованных рынков активов, так что многие различные цифровые активы могут быть проданы в одной цепочке блоков. Тот же принцип можно распространить и на физические продукты с электронным управлением или встроенными микрочипами.
Финансовые услуги: Криптовалюты, очевидно, открывают широкий спектр различных вариантов использования для умных контрактов, которые иначе были бы невозможны. Например, системы, подобные используемой BurstCoin, могут проводить аукционы, которые автоматически проверяют самую высокую цену в заданный срок и автоматически переводят неактивные средства.
Больше новостей о криптовалютах вы найдете в нашем телеграм-канале РБК-Крипто.
Ethereum, смарт-контракты
Перед чтением статьи рекомендую (если еще не знакомы) ознакомиться с whitepaper’ом биткоина
История появления и мотивация
С появлением концепции PoW в блокчейне биткоина, стал возможен безопасный нецентрализованный обмен токенами. Каждая транзакция проходит следующие этапы проверки, выполняемые некоторым скриптом:
сумма UTXO неизменна (UTXO — Unspent transaction output другими словами токены)
цифровая подпись отправителя валидна
Для выполнения более сложной логики проверки транзакции нужно менять скрипт, однако платформа биткоина предоставляет неудобный, не тьюринг полный язык для написания таких скриптов
Цель ethereum’a — объединить и усовершенствовать концепции криптовалют, альткоинов и создать on-blockchain протокол, который позволит разработчикам создавать распределенные приложения на основе инфраструктуры, которая предоставляет масштабируемость, тьюринг полноту, простоту разработки и совместимость
Аккаунты
Роль состояний в эфире выполняют аккаунты. Каждый аккаунт имеет 20-ти байтный адрес. Изменение состояний аккаунтов происходит за счет передачи сообщений
nonce — счетчик, который служит для того чтобы каждая транзакция была обработана лишь 1 раз
ether balance — внутренняя валюта, используется для оплаты транзакций
contract code (if present)
storage — массив данных, изначально пустой
Externally owned accounts — externally owned accounts не содержат исполняемого кода. Пользователь может отправить сообщение с externally owned account, подписав транзакцию
Contract accounts — при получении сообщения, contract account активируется и исполняет код скрипта контракта. Исполняемому процессу доступны чтение и запись из внутреннего хранилища, отправка сообщений, создание других контрактов
Сообщения
Сообщения ethereum’a аналог транзакций bitcoin’a с тремя главными отличиями:
Сообщение в эфире может быть создано как externally owned акканутом, так и contract аккаунтом, тогда как транзакция в биткоине может быть создана только externally owned аккаунтом (пользователем)
Сообщения в эфире поддерживают янвым образом передачу данных
У получателя сообщения (если это contract account) есть возможность вернуть ответ
Структура сообщения
подпись отправителя: r,s,v (ECDSA)
Nonce:
GASPRICE and GASLIMIT:
Для того чтобы предотвратить зацикливание нод при обработки сообщения, каждое сообщение должно указывать за какое максимальное число «шагов» GASLIMIT выполнения кода отправитель готов платить. GASPRICE — сколько отправитель платит за выполнение одного шага
(Однако после форка EIP-1559 теперь майнеры получают фиксированное вознаграждение за каждый сформированный блок)
Recipient:
В поле recipient хранится 20-ти битный адрес получателя. Получателем может быть как externally owned аккаунт, так и contract аккаунт
Ether value:
В поле ether value хранится число, которое показывает сколько эфира отправитель передает получателю с учетом комисси за транзакцию ( GAS и комиссия за пересылку данных)
Это поле используется для передачи данных смарт контракту, также возможны вызовы функций внутри смарт контракта, если сообщение содержит одну из инструкций CALL, DELEGATECALL
Если поле data пустое, это означает что сообщение предназначено только для передачи ehter’a, а не для исполнения кода
ECDSA (Elliptic Curve Digital Signature Algorithm):
Ознакомиться с тем как работает ECDSA можно тут
Комбинация
Валидация сообщений
Этапы проверки сообщений на нодах:
Проверить корректность кол-ва и содержания полей сообщения (Nonce транзакции совпадает с Nonce аккаунта, сообщение имеет корректную подпись)
STARTGAS*GASPRICE — комиссия которую платит отправитель. Если у отправителя достаточно ether’a → снять сумму комиссии с его аккаунта и увеличить Nonce аккаунта на 1, иначе вернуть ошибку
GAS=STARTGAS*GASPRICE — счетчик того сколько осталось газа для выполнения транзакции, при каждом выполнении команды или передачи байт данных счетчик уменьшается
Передать Ether value получателю, если аккаунта получателя не существует, то создать его. Если получатель — contract account, то исполнить его код до конца или до окончания GAS ‘a
Если передача данных упала из-за недостаточного кол-ва ether ‘a на аккаунте или из-за окончания GAS ‘a, то вернуть состояния получателя и отправителя в исходное состояние и добавить комиссию к кошельку аккаунта майнера (актуально до форка EIP-1559)
Вернуть весь оставшийся GAS отправителю, и перечислить комиссию майнеру
Contract account code execution environment
Код на смарт контракта исполняется на стековой витруальной машине У операторов байткода Ethereum Virtual Machine (скоращенно EVM) есть доступ к трем типам структур данных:
memory — динамический массив, который можно расширять бесконечно
long-term contract storage — key/value «холодное» хранилище. Холодное потому что доступно даже после выполнения кода контракта
Высокоуровневые языки программирования смарт-контрактов: Solidity и Vyper
Solidity — объектно-ориентированный c++ like язык:
Пример смарт-контракта вендинг машины на solidity:
msg — объект сообщения которое вызвало исполнение/создание контракта
На примере видно, что в конструкторе VendingMachine в поле owner записывается адрес отправителя сообщения. То есть в будущем увеличивать cupcakeBalances сможет только аккаунт, который задеплоил смарт-контракт
Внешние источники данных
Для адекватной работы алгоритма консенсуса нужно чтобы каждая нода получала одинаковый результат при исполнении сообщения, при обращении внутри смарт-контракта к внешнему API ноды априори не будут получать одинаковый результат, если данные меняются во времени
Как тогда работать с внешними данными? Решение — oracle. Oracle реализует некий middle end между off-chain данными и on-chain смарт-контрактами. Он оформляет доступ к данным в отдельную транзакцию и записывает его на блокчейн. Для этого oracle обычно состоит из смарт-контракта и некоторых off-chain скриптов, которые состоят из двух основных действий:
вытащить данные из какого-то API
отправить сообщение с данными нодам
Затем смарт-контракт обращается к данным, которые лежат в сообщении и таким образом являются частью блокчейна
Важно чтобы oracle был тоже децентрализованным, иначе теряется смысл всего блокчейна
Система токенов
fungible токены
on-blockchain токены имеют много приложений, например они могут имитировать фиатные деньги или другие активы, могут служить «документом» на владение каким-либо объектом. Система токенов — это база данных с одной операцией: вычесть X единиц с аккаунта А и прибавить X единиц аккаунту B, при условии что:
Есть подпись подтверждающая согласие аккаунта А
Наиболее распространенный стандарт реализации системы fungible токенов — ERC20, который определяется двумя сегментами:
TotalSupply — общее количество токенов
BalanceOf — возвращает баланс кошелька по заданному адресу
Transfer — позволяет владельцу контракта отправить токены заданному адресу
TransferFrom — отправляет токены с одного адреса на другой, главное отличие от Transfer : контракт может отправлять токены владельца автоматически
Approve — проверяет возможность передачи токенов с аккаунта владельца контракта заданному адресу
Allowance — возвращет остаток на кошельке по заданному адресу
Transfer — это событие вызывается во время любого перевода токенов с одного кошелька на другой и дает подробную информацию о них
Approve — это событие вызывается каждый раз в функции approve
Non-fungible token
Невзаимозаменяемые токены — вид криптографических токенов, каждый экземпляр которых уникален и не может быть заменен другим токеном. Cтандарт для реализации NFT ERC-721 является аналогом ERC-20 для fungible токенов
Простыми словами: смарт-контракты, Ethereum, ICO
Автор статьи — Алексей Маланов, эксперт отдела развития антивирусных технологий «Лаборатории Касперского»
Про Биткойн слышали многие, что и не удивительно — эта криптовалюта была первой и до сих пор остается самой популярной и самой крупной. Успех Биткойна вдохновил на подвиги кучу людей, поэтому за последние пару лет разных криптовалют — так называемых альткойнов — насоздавали ужас сколько, больше 1000.
Так вот, Биткойн — на данный момент однозначно номер один. А знаете, какая криптовалюта на втором месте? Ethereum. Когда мы говорим про места, мы имеем в виду капитализацию, то есть суммарную стоимость всех монет валюты.
Капитализация и цены TOP-5 криптовалют. Источник
Как видите, Ethereum с большим отрывом опережает другие «альткойны», а в июне 2017 чуть было даже не обогнал Биткойн, «великий и ужасный». Давайте разберемся, что же в Ethereum такого особенного и почему подавляющее большинство проводимых в этом году ICO используют именно его.
Идея Ethereum
Ethereum запустился совсем недавно, 30 июля 2015 года. Одним из его создателей был нынче известный в блокчейн-тусовке и, не побоюсь этого слова, влиятельный Виталик Бутерин. Он родился в России, но с шести лет жил в Канаде. На тот момент, когда он изложил свои идеи, которые в итоге легли в основу сети Ethereum, ему было 19 лет.
Так вот, в чем же идея? В сети Биткойн с точки зрения пользователя все устроено довольно просто. Есть кошельки, можно передавать деньги с одного кошелька на другой или на несколько сразу. Сеть построена на весьма остроумных принципах, позволяющих обходиться без единого центра, но задачи решаются вполне классические. Обычная платежная система, по большому счету: люди, деньги, переводы — все, больше ничего нет.
Но можно пойти дальше и создать такую платежную сеть, которая позволяет писать программы, которые бы работали с кошельками, сами бы принимали с кошельков деньги, решали, кому сколько отправить и так далее. С важным условием: для всех пользователей каждая такая программа будет работать по известным принципам, предсказуемо, одинаково, прозрачно, и чтобы никто не мог ее изменить.
Собственно, создатели Ethereum как раз и добавили к базовой функциональности криптовалют возможность создавать подобные программы. Все кошельки в Ethereum делятся на два типа: те, что управляются людьми, и те, что управляются автономно программами.
Программы — их называют смарт-контрактами — записываются в блокчейн. Таким образом, эта программа запоминается навсегда, у всех участников сети есть ее копия (блокчейн ведь у всех одинаковый), соответственно и выполняется смарт-контракт у всех тоже идентично.
И вот это нововведение существенно расширило сферу применения блокчейн-валют.
Примеры смарт-контрактов
Какие программы можно написать? Да какие угодно. Например, финансовую пирамиду. Для этого в сети Ethereum достаточно создать смарт-контракт со следующими правилами:
Напомним преимущество: это блокчейн — все уверены, что никто не жульничает, все видят текст программы и понимают, что она работает именно так, как в ней написано. Программа — не человек. Она не скроется с деньгами, не обанкротится, и так далее. Если, конечно, в ней нет багов или «неожиданного поведения».
Ограничения смарт-контрактов
Но есть и существенные ограничения, вот некоторые из них:
Главное использование смарт-контрактов
Простой смарт-контракт Ethereum. Имеющаяся ошибка позволяет украсть все деньги, кто нашел — молодец
Пирамиды, голосования, казино, лотереи — это все здорово. Но что оказалось действительно удобно делать при помощи смарт-контрактов — это надувать пузыри собирать деньги на свой стартап.
Ведь при помощи смарт-контракта можно автоматизировать всю «бухгалтерию»: контракт сам запомнит, от кого и сколько пришло денег, сам начислит «акции», а также даст возможность каждому участнику передавать и продавать эти акции. Не нужно никакой возни с адресами почты, кредитными картами, проверкой карт, авторизацией инвесторов и тому подобного. Вдобавок все видят, сколько всего было выпущено акций и как они распределились по участникам. От скрытого допечатывания акций и продажи одной акции несколько раз защищает блокчейн.
Смарт-контракты дали миллиону «криптоинвесторов» возможность «швырять деньги в монитор».
ICO — Initial Coin Offering
График стоимости Ethereum. Источник
Обсудим ICO поподробнее. Типичная схема криптостартапа такова:
Окупаемость криптоинвестиций
Что будет дальше с выданными инвесторам токенами, зависит от проекта. Кто-то обещает выплачивать дивиденды с будущей прибыли, кто-то планирует принимать эти токены к оплате услуг, реализуемых проектом, кто-то ничего не обещает.
Как правило, сами токены выводятся на криптобиржу, и открываются торги. Те, кто не успел поучаствовать в ICO, могут купить их уже на бирже — скорее всего, подороже. Те, кто участвовал в ICO, чтобы потом перепродать подороже, могут их на бирже продать.
Иногда первых настолько больше, что цена растет стремительно, и капитализация проекта раздувается до миллиарда долларов. При том, что у него нет прибыли нет продукта, есть только идея, план и, в лучшем случае, команда.
Так как автор проекта собрал много денег, он этими же деньгами имеет возможность на бирже выкупать свои же токены, подогревая цену токена еще больше. На обычных биржах с обычными акциями такое поведение запрещено, но в криптоиндустрии регуляторов нет.
В 2017 году (к сентябрю) на ICO разные проекты уже собрали порядка 1,7 миллиарда долларов. Об успешных проектах слышно мало, но инвесторы не теряют оптимизма.