Контракты ethereum: Создание смарт-контрактов Ethereum с помощью Solidity — Learn

Содержание

Смарт-контракты на Ethereum — MCS — Учёба.ру

Я б в нефтяники пошел!

Пройди тест, узнай свою будущую профессию и как её получить.

Химия и биотехнологии в РТУ МИРЭА

120 лет опыта подготовки

Сервис онлайн-консультаций

Выбери профессию, о которой потом не пожалеешь

Международный колледж искусств и коммуникаций

МКИК — современный колледж

Английский язык

Совместно с экспертами Wall Street English мы решили рассказать об английском языке так, чтобы его захотелось выучить.

15 правил безопасного поведения в интернете

Простые, но важные правила безопасного поведения в Сети.

Олимпиады для школьников

Перечень, календарь, уровни, льготы.

Первый экономический

Рассказываем о том, чем живёт и как устроен РЭУ имени Г.В. Плеханова.

Билет в Голландию

Участвуй в конкурсе и выиграй поездку в Голландию на обучение в одной из летних школ Университета Радбауд.

Цифровые герои

Они создают интернет-сервисы, социальные сети, игры и приложения, которыми ежедневно пользуются миллионы людей во всём мире.

Работа будущего

Как новые технологии, научные открытия и инновации изменят ландшафт на рынке труда в ближайшие 20-30 лет

Профессии мечты

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

Экономическое образование

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

Гуманитарная сфера

Разговариваем с экспертами о важности гуманитарного образования и областях его применения на практике.

Молодые инженеры

Инженерные специальности становятся всё более востребованными и перспективными.

Табель о рангах

Что такое гражданская служба, кто такие госслужащие и какое образование является хорошим стартом для будущих чиновников.

Карьера в нефтехимии

Нефтехимия — это инновации, реальное производство продукции, которая есть в каждом доме.

Смарт-контракты или что такое криптокотики

Б значит Бюрократия

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

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

 

Прекрасный мир за горизонтом

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

Прекрасный мир, в котором решив срочно жениться, не придётся ехать в Вегас. А фраза «Я согласна» будет заменена галочкой ознакомления с условиями брака. Именно для реализации подобной мечты в 1994-м году и была предложена идея смарт-контракта.

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

Первой подобной системой стал биткоин. Реализация смарт-контрактов в биткоине довольно проста и не обладает полнотой по тьюрингу. Это привело к появлению Ethereum с полновесной реализацией смарт-контрактов. Ввиду появления циклов и потенциально сложных вычислений в смарт-контрактах Ethereum, была введена единица проделанной работы “газ”. При создании транзакции пользователь может сам выбрать лимит газа и установить цену на него. Узел сети, который обработает транзакцию и израсходует некий объём газа на вычисления, получит за это соответствующее вознаграждение.

Мы в соцсетях:

Любой смарт-контракт обладает следующими атрибутами:

  • Электронная подпись участников.
    Любой контракт должен быть подписан двумя или более участниками. Эта подпись идентифицирует каждого из подписантов и упраздняет такой странный социальный институт, как нотариусы.
  • Распределённая публичная среда сохранения и выполнения контракта.
    Такой средой могут служить Ethereum, узлы которого сохраняют информацию о контракте и выполняют его.
  • Предмет договора и наличие инструментов для его реализации
    Для продажи квартиры через смарт-контракты необходимо иметь как запись, подтверждающую владение этой квартирой, так и реализацию алгоритма контракта, позволяющего обмен этой записи владения взамен на что либо иное.

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

Беспощадная реальность

А мы же поговорим о практическом использовании смарт-контрактов прямо сейчас.

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

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

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

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

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

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

До 20% обрабатываемых транзакций приходилось на криптокотиков.

Сейчас, спустя 3 недели после релиза, шумиха спала. Общая нагрузка снизилась, доля криптокотиков в общей массе обрабатываемых транзакций составляет меньше 5%. Ethereum снова функционирует в штатном режиме, курсы криптовалют растут как на дрожжах и кажется, что этот инцидент не смог подорвать веру людей в системы блокчейн. Лишь разработчики сделали свои выводы и стараются решить проблему с масштабируемостью. От того, удастся ли им это, зависит всё будущее блокчейн и смарт-контрактов.

Вывод

Если подвести итог, то криптокотики показали следующее:

  1. Любой инструмент можно использовать для очень странных вещей.
  2. Нынешние публичные блокчейн среды не готовы к сколь-нибудь серьёзным нагрузкам.
  3. Криптовалюта для пользователей не является полным эквивалентом денег. Она схожа с премиальными валютами из игр в том, что пользователь не совсем представляет, сколько он тратит на своё развлечение.
  4. Продать картинку в браузере за 120 тысяч долларов — реально.

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

А до тех пор нам остаются лишь криптокотейки.

 

Автор статьи: Алексей Шафранов, Старший Java разработчик, Maxilect

Как я окунулся в смарт-контракты — Крипто на vc.ru

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

{«id»:27852,»url»:»https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty»,»title»:»\u041a\u0430\u043a \u044f \u043e\u043a\u0443\u043d\u0443\u043b\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b»,»services»:{«facebook»:{«url»:»https:\/\/www.facebook.com\/sharer\/sharer.php?u=https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty»,»short_name»:»FB»,»title»:»Facebook»,»width»:600,»height»:450},»vkontakte»:{«url»:»https:\/\/vk.com\/share.php?url=https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty&title=\u041a\u0430\u043a \u044f \u043e\u043a\u0443\u043d\u0443\u043b\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b»,»short_name»:»VK»,»title»:»\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435″,»width»:600,»height»:450},»twitter»:{«url»:»https:\/\/twitter. com\/intent\/tweet?url=https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty&text=\u041a\u0430\u043a \u044f \u043e\u043a\u0443\u043d\u0443\u043b\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b»,»short_name»:»TW»,»title»:»Twitter»,»width»:600,»height»:450},»telegram»:{«url»:»tg:\/\/msg_url?url=https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty&text=\u041a\u0430\u043a \u044f \u043e\u043a\u0443\u043d\u0443\u043b\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b»,»short_name»:»TG»,»title»:»Telegram»,»width»:600,»height»:450},»odnoklassniki»:{«url»:»http:\/\/connect.ok.ru\/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https:\/\/vc.ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty»,»short_name»:»OK»,»title»:»\u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0438″,»width»:600,»height»:450},»email»:{«url»:»mailto:?subject=\u041a\u0430\u043a \u044f \u043e\u043a\u0443\u043d\u0443\u043b\u0441\u044f \u0432 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b&body=https:\/\/vc. ru\/crypto\/27852-kak-ya-okunulsya-v-smart-kontrakty»,»short_name»:»Email»,»title»:»\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u043e\u0447\u0442\u0443″,»width»:600,»height»:450}},»isFavorited»:false}

14 643 просмотров

В спринт добавляется задача разработки собственной криптовалюты на базе Ethereum. Тщетно роюсь в сети в поисках толковых гайдов, открываю и через мгновение закрываю один за другим. Теряя терпение, открываю почту, начинаю искать письма, содержащие слово «блокчейн» и нахожу ссылку на хакатон в Казани с крупными призами и Виталиком в роли хедлайнера. Регистрируюсь, бронирую хостел и блаблакар. Перечитываю кучу бесполезных ссылок, пытающихся втюхать мне что такое криптовалюта и блокчейн, пишу шпаргалку и деплою в сеть первые контракты.

Hello, <name>coin! или Постигая Solidity

Путей для создания своего токена у вас много. Самые простые:

  • Перейти на Waves/CryptonoteStarter(или аналоги) и прямо в интерфейсе за 10 минут выпустить свою монету;
  • Разобраться в Solidity, дебаге и деплое. Используя знания и/или стандарт написания смарт-монет ERC20(по факту исходник монеты с многими вариантами блекджеков) задеплоить контракт.

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

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

Solidity — тьюринг-полный язык программирования смарт-контрактов в Ethereum. Внутри Bitcoin тоже есть свой язык, но он не тьюринг-полный, поэтому написать на нем серьёзный контракт сложно.

Remix — IDE для разработки и дебага смарт-контрактов.

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

Что стоит понять, что может быть не так очевидно с Solidity?

0) Смарт-контракт после деплоя имеет свой адрес. Любой юзер может что-то запросить у контракта по этому адресу или переслать средства на этот адрес.

1) Заданные переменные в «корне» вашего смарт-контракта будут храниться всегда там. При вызове функции вы можете к этим данным обратиться — прочитать или изменить.

2) Внутри смарт-контракта монет обычно хранится структура в виде адрес кошелька в сети = количество монет. Это и есть все данные, необходимые монете. В ERC20 уже описана эта и некоторые другие функциональности, например, отправка токенов от одного адреса другому. Не изобретайте велосипеды!

3) Для хранения таблиц данных существует структуры. Доступ к элементам таблиц в некоторых случаях приходится делать костылями. Связано это в первую очередь с оптимизацией работы контракта.

4) Вся прелесть блокчейна в том, что всё уже придумано за вас. В сети есть миллионы исходников смарт-контрактов. Более того, на etherscan.io вы можете посмотреть исходные коды публичных смарт-контрактов. Анализ, дебаг и копипейст делают блокчейн слишком простым для входа, что сказывается на качестве продуктов в том числе множестве ICO.

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

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

Деплой смарт-контракта

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

Деплой сделан максимально просто. Я заливал код прямо из Remix через расширение для браузера MetaMask, хотя десктопный клиент Ethereum деплоить умеет не хуже. Открываем Remix, в списке «Select execution environment» выбираем пункт «Injected Web3», нажимаем Create и подтверждаем загрузку в MetaMask.

Слишком легко для того, чтобы быть правдой. Но это работало именно так.

Первые впечатления

Осознав всю сущность смарт-бытия, я был шокирован порогом входа. Его по факту не было! Я сразу же реализовал несколько простейших контрактов — своя монета, голосование, лотерея, ICO, записная книжка. Любое решение не выходило за 500 строк. В ходе разработки приходилось регулярно размышлять над «ценой действия» и порой писать костыли, чтобы получить определнные данные из структур-реестров.

Голова начала пытаться придумать что-то более сложное, но либо для новоявленных идей не был нужен блокчейн(а нужен был, скажем, IPFS), либо всё решалось слишком просто(и неинтересно).

И тут я понял — мне нужен обмен опытом.

Хакатон «Блокчейн — новая нефть России» в Казани

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

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

Описание самого контракта заняло у большинства команд не более 3 часов с учетом дебага. Даже у новичков. Я не увидел ни у кого по-настоящему сложных контрактов(более 1000 строк).

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

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

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

Тут(в смарт-контрактах на базе Ethereum) нет никакой магии. Куда там уходят бюджеты государств, компаний, команд — для меня загадка. В сети(в 99,999999% случаев) уже есть необходимый вам шаблон смарт-контракта для ICO/вашей именной монеты и прочего, который допилит любой «тыжпрограммист», у которого черепашка Logo двигаться.

Прикладной Ethereum

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

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

Немного позже я пообщался с администраторами некоторых сервисов, связанных с эфиром, все плевались на сырые решения geth, обозначая parity как меньшее из зол, но далеко не предел мечтаний.

Короче, если прикладываете какую-то сервер-сайд логику своему контракту, лучше используйте NodeJS, там всё работает почти из коробки. Во всяком случае танцев с бубном будет на один меньше.

Битва за вузы

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

Если кратко: никто мне даже не ответил.

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

После хакатона

Я успел пообщаться со всеми участниками, обменяться контактами, во мне были заинтересованы как в блокчейн-разработчике, кидали White Paper’ы различных проектов, просили провести аудит контрактов, сделать review на проект, выходящий на ICO и многое другое. С одной стороны — ура, я в тусовке! С другой — все эти запросы можно разделить на несколько(часто пересекающихся между собой) категорий:

  • в большинстве случаев проект имел плохую на мой взгляд идею(например: утопия; что-то новое, не актуальное ни для кого; etc.) или был слишком прост в реализации;
  • заказчик не понимал зачем ему блокчейн или не понимал как он работает;
  • ребята просто хотят быстро заработать, а что там и как будет — не суть.

Выводы касательно смарт-контрактов на базе Ethereum

  • Смарт-контракты — это слишком просто и в какой-то степени скучно.
  • Скорее всего ваш проект entry-уровня, то есть реализовать его можно на коленке за несколько вечеров после работы
  • Блокчейн применим в очень малом количестве ситуаций. Чаще более актуальны централизованные хранилища/IPFS/etc.
  • Нужный вам смарт-контракт уже на 95% реализован, осталось его найти и допилить.
  • Большинство ICO — профанация чистой воды.
  • Сложность в проведении ICO только одна — маркетинг вашего продукта.
  • Скорее всего крутейшая идея вашего продукта — просто уныла, недееспособна и имеет место быть лишь у вас в голове. Без обид.

В любом случае буду рад ответить на ваши вопросы в комментариях или в чате t.me/chainchain.

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

Девять причин быть осторожными с блокчейн

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

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

В статье, авторами которой является Сяоци Ли (Xiaoqi Li), Пен Дзян (Peng Jiang) и Сяопи Ло (Xiapu Luo) из Гонконгского политехнического университета, Тинь Чен (Ting Chen) из Университета электронной науки и технологии Китая и Цяоен Вэн (Qiaoyan Wen) из Пекинского университета, утверждается, что в блокчейн присутствует группа факторов уязвимости, про которые необходимо знать пользователям.

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

Исследователи описывают основные известные им факторы риска, связанные с блокчейн.

Производительность. Начнем с того, что на саму производительность технологии блокчейн может накладываться бремя сложных механизмов консенсуса и некорректных данных. Как отмечают соавторы статьи, механизмы консенсуса, работающие через Интернет, являются поглотителями вычислительных ресурсов. Примером является самый популярный из этих механизмов Proof of Work (PoW), который исследователи называют «расточительством ресурсов». И неудивительно, что предпринимаются усилия по разработке более эффективных гибридных механизмов консенсуса, соединяющих PoW и Proof of Stake (PoS). Помимо этого, блокчейны генерируют массы данных (информацию о блоках, данные транзакций, байт-код контрактов), зачастую являющихся устаревшими и бесполезными. Встречается много смарт-контрактов, не содержащих никакого кода или с полным дублированием кода в Ethereum. Многие смарт-контракты после записи в блокчейн никогда не исполняются. Чтобы улучшить производительность блокчейн-систем, желателен эффективный механизм детектирования и очистки данных.

Уязвимость 51%. Чтобы установить взаимное доверие, блокчейн использует распределенный механизм консенсуса. Однако в самом механизме консенсуса содержится так называемая уязвимость 51%, которая может использоваться злоумышленниками для контроля над всей блокчейн. Точнее говоря, если в блокчейнах на базе PoW один майнер получит Hash Power, составляющую больше 50% суммарной Hash Power всей блокчейн, он может инициировать атаку 51%. Следовательно, концентрация мощности майнинга в нескольких майнинговых пулах может угрожать неожиданной ситуацией, когда один пул получает контроль над более чем половиной всей вычислительной мощности.

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

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

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

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

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

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

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

Источник: https://www.itweek.ru/security/article/detail.php?ID=200133


Обзор языков для безопасного программирования смарт-контрактов | Тюрин

1. Bitcoin contract. URL: https://en.bitcoin.it/wiki/Contract (Date: 2019-01-30).

2. Solidity-example-crowdfunding. URL: https://github.com/zupzup/solidity-example-crowdfunding (Date: 2019-01-30).

3. D. Macrinici, C. Cartofeanu, and S. Gao. Smart contract applications within blockchain technology: A systematic mapping study. Telematics and Informatics, vol. 35, no. 8, 2018, pp. 2337–2354.

4. C. D. Clack, V. A. Bakshi, and L. Braine. Smart contract templates: foundations, design landscape and research directions. CoRR, vol. abs/1608.00771, 2016.

5. A 50 million hack just showed that the dao was all too human. URL: https://www.wired.com/2016/06/50-million-hack-just-showed-dao-human/ (Date: 2019-01-30).

6. D. McAdams. An ontology for smart contracts. URL: https://cryptochainuni.com/wp-content/uploads/Darryl-McAdams-An-Ontology-for-Smart-Contracts.pdf (Date: 2019-02-07).

7. N. Atzei, M. Bartoletti, and T. Cimoli. A survey of attacks on ethereum smart contracts sok. In Proc. of the 6th International Conference on Principles of Security and Trust, 2017, pp. 164–186.

8. G. Destefanis, A. Bracciali, R. Hierons, M. Marchesi, M. Ortu, and R. Tonelli. Smart contracts vulnerabilities: A call for blockchain software engineering. ResearchGate, 2018.

9. Safer smart contracts through type-driven development. URL: https://publications.lib.chalmers.se/records/fulltext/234939/234939.pdf (Date: 2019-01-30).

10. Bitcoin script. URL: https://en.bitcoin.it/wiki/Script (Date: 2019-01-30)

11. R. O’Connor. Simplicity: A new language for blockchains. CoRR, vol. abs/1711.03028, 2017.

12. Flint. URL: https://github.com/flintlang/flint (Date: 2019-01-30).

13. Vyper. URL: https://github.com/ethereum/vyper (Date: 2019-01-29).

14. T. Kasampalis, D. Guth, B. Moore, T. Serbanuta, V. Serbanuta, D. Filaretti, G. Rosu, and R. Johnson. Iele: An intermediate-level blockchain language designed and implemented using formal semantics. University of Illinois, Tech. Rep., http://hdl.handle.net/2142/100320, July 2018.

15. I. Sergey, A. Kumar, and A. Hobor. Scilla: a smart contract intermediate-level language. CoRR, vol. abs/1801.00687, 2018.

16. Plutus core specification. URL: https://github.com/input-output-hk/plutus/tree/master/plutus-core-spec (Date: 2019-01-30).

17. D. Harz and W. J. Knottenbelt. Towards safer smart contracts: A survey of languages and verification methods. CoRR, vol. abs/1809.09805, 2018.

18. P. L. Seijas, S. Thompson, and D. McAdams. Scripting smart contracts for distributed ledger technology. Cryptology ePrint Archive, Report 2016/1156, 2016, https://eprint.iacr.org/2016/1156.

19. Contract. URL: https://en.bitcoin.it/wiki/Contract (Date: 2019-01-30).

20. Ethereum contract security techniques and tips. URL: https://github.com/ethereum/wiki/wiki/Safety (Date: 2019-01-29).

21. E. Androulaki, A. Barger, V. Bortnikov, C. Cachin, K. Christidis, A. De Caro, D. Enyeart, C. Ferris, G. Laventman, Y. Manevich, S. Muralidharan, C. Murthy, B. Nguyen, M. Sethi, G. Singh, K. Smith, A. Sorniotti, C. Stathakopoulou, M. Vukolic, S. W. Cocco, and J. Yellick. Hyperledger fabric: A distributed operating system for permissioned blockchains. In Proc. of the Thirteenth EuroSys Conference, 2018, pp. 30:1–30:15.

22. K. Yamashita, Y. Nomura, E. Zhou, B. Pi, and S. Jun. Potential risks of hyperledger fabric smart contracts. In Proc. of the 2019 IEEE International Workshop on Blockchain Oriented Software Engineering (IWBOSE), 2019, pp. 1–10.

23. 300m in cryptocurrency accidentally lost forever due to bug. URL: https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether (Date: 2019-01-30).

24. Smart contract weakness classification and test cases. URL: https://smartcontractsecurity.github.io/SWC-registry/ (Date: 2019-01-29).

25. Decentralized application security project. URL: https://dasp.co (Date: 2019-01-29).

26. Security considerations. URL: https://solidity.readthedocs.io/en/latest/security-considerations.html (Date: 2019-01-29).

27. Vulnerabilities description. URL: https://github.com/trailofbits/slither/wiki/Vulnerabilities-Description (Date: 2019-01-30).

28. Smart contract weakness classification and test cases. URL: https://smartcontractsecurity.github.io/SWC-registry/ (Date: 2019-01-22).

29. N. Atzei, M. Bartoletti, and T. Cimoli. A survey of attacks on ethereum smart contracts sok. In Proc. of the 6th International Conference on Principles of Security and Trust, 2017, pp. 164–186.

30. Ether — the crypto-fuel for the ethereum network. URL: https://www.ethereum.org/ether (Date: 2019 01 30).

31. L. Luu, D.-H. Chu, H. Olickel, P. Saxena, and A. Hobor. Making smart contracts smarter. In Proc. of the 2016 ACM SIGSAC Conference on Computer and Communications Security, 2016, pp. 254–269.

32. D. G. Wood. Ethereum: A secure decentralised generalised transaction ledger. URL: https://ethereum.github.io/yellowpaper/paper.pdf (Date: 2019-01-31).

33. Michelson language. URL: https://www.michelson-lang.com/ (Date: 2019-01-31).

34. B. C. Pierce. Types and Programming Languages, 1st ed. The MIT Press, 2002.

35. Solidity. URL: https://github.com/ethereum/solidity (Date: 2019-01-29).

36. Liquidity. URL: https://github.com/OCamlPro/liquidity (Date: 2019-01-29).

37. Grigore Roșu and T. F. Șerbănută. An overview of the k semantic framework. The Journal of Logic and Algebraic Programming, vol. 79, no. 6, 2010, pp. 397–434.

38. S. Tikhomirov, E. Voskresenskaya, I. Ivanitskiy, R. Takhaviev, E. Marchenko, and Y. Alexandrov. Smartcheck: Static analysis of ethereum smart contracts. In Proc. of the 1st International Workshop on Emerging Trends in Software Engineering for Blockchain, 2018, pp. 9–16.

39. S. Kalra, S. Goel, M. Dhawan, and S. Sharma. Zeus: Analyzing safety of smart contracts. In Proc. of the Network and Distributed Systems Security (NDSS) Symposium, 2018.

40. K. Bhargavan, A. Delignat-Lavaud, C. Fournet, A. Gollamudi, G. Gonthier, N. Kobeissi, N. Kulatova, A. Rastogi, T. Sibut-Pinote, N. Swamy, and S. Zanella-Béguelin. Formal verification of smart contracts: Short paper. In Proc. of the 2016 ACM Workshop on Programming Languages and Analysis for Security, 2016, pp. 91–96.

41. P. Tsankov, A. Dan, D. Drachsler-Cohen, A. Gervais, F. Bünzli, and M. Vechev. Securify: Practical security analysis of smart contracts. In Proc. of the 2018 ACM SIGSAC Conference on Computer and Communications Security, 2018, pp. 67–82.

42. E. Hildenbrandt, M. Saxena, X. Zhu, N. Rodrigues, P. Daian, D. Guth, B. Moore, Y. Zhang, D. Park, A. Stefanescu, and G. Rosu. Kevm: A complete semantics of the ethereum virtual machine. In Proc. of the 2018 IEEE 31st Computer Security Foundations Symposium, 2018, pp. 204–217.

43. Mythril. URL: https://github.com/ConsenSys/mythril-classic (Date: 2019-01-29).

44. L. Brent, A. Jurisevic, M. Kong, E. Liu, F. Gauthier, V. Gramoli, R. Holz, and B. Scholz. Vandal: A scalable security analysis framework for smart contracts. CoRR, vol. abs/1809.03981, 2018.

45. Rattle. URL: https://github.com/trailofbits/rattle (Date: 2019-01-30).

46. Manticore. URL: https://github.com/trailofbits/manticore (Date: 2019-01-30).

47. L. G. Meredith and M. Radestock. A reflective higher-order calculus. Electronic Notes in Theoretical Computer Science, vol. 141, 2005, pp. 49–67.

48. Bitcoin weaknesses. URL: https://en.bitcoin.it/wiki/Weaknesses (Date: 2019-01-30).

49. A. Back, M. Corallo, L. Dashjr, M. Friedenbach, G. Maxwell, A. Miller, A. Poelstra, J. Timón, and P. Wuille, Enabling blockchain innovations with pegged sidechains. 2014. https://blockstream.com/sidechains.pdf (Date: 2019-01-30).

50. Mediawiki. URL: https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki (Date: 2019-02-5).

51. Simplicity. URL: https://github.com/ElementsProject/simplicity (Date: 2019-02-5).

52. Grishchenko I., Maffei M., Schneidewind C. A semantic framework for the security analysis of ethereum smart contracts – technical report (2018). URL: https://secpriv.tuwien.ac.at/tools/ethsemantics. (Date: 2019-01-30).

53. Formalization of ethereum virtual machine in lem. URL: https://github.com/pirapira/eth-isabelle (Date: 2019-01-30).

54. Ewasm: design overview and specification. URL: https://github.com/ewasm/design (Date: 2019-01-30).

55. Michelson: the language of smart contracts in tezos. URL: http://www.liquidity-lang.org/doc/reference/michelson.html (Date: 2019-01-30).

56. Why michelson? URL: https://www.michelson-lang.com/why-michelson.html (Date: 2019-02-5).

57. Plutus core semantics. URL: https://github.com/kframework/plutus-core-semantics (Date: 2019-01-30).

58. Plutus implementation and tools. URL: https://github.com/input-output-hk/plutus (Date: 2019-01-30).

59. The extended utxo model. URL: https://github.com/input-output-hk/plutus/tree/master/docs/extended-utxo (Date: 2019-02-5).

60. Is it smart to use smart contracts? URL: https://plutusfest.io/presentations/Philip-Wadler/Wadler30.pdf (Date: 2019-02-5).

61. Solidityx. URL: https://solidityx.org/ (Date: 2019-01-30).

62. Bamboo. URL: https://github.com/pirapira/bamboo (Date: 2019-01-30).

63. Logikon. URL: https://github.com/logikon-lang/logikon (Date: 2019-01-31).

64. Ivy: Bitcoin smart contracts. URL: https://github.com/ivy-lang/ivy-bitcoin (Date: 2019-01-30).

65. Çagdas Bozman, M. Iguernlala, M. Laporte, F. L. Fessant, and A. Mebsout. Liquidity: Ocaml pour la blockchain. Journées Francophones des Langages Applicatifs 2018, 2018.

66. Yul. URL: https://solidity.readthedocs.io/en/latest/yul.html (Date: 2019-01-30).

67. Rchain and rholang. URL: https://www.rchain.coop/platform (Date: 2019-01-30).

68. D. Ancona, V. Bono, and M. Bravetti. Behavioral Types in Programming Languages. Hanover, MA, USA: Now Publishers Inc., 2016.

69. G. Wood. LLL. URL: https://lll-docs.readthedocs.io/en/latest/index.html (Date: 2019-01-30).

70. Upgradable contract with solidity. URL: https://gist.github.com/Arachnid/4ca9da48d51e23e5cfe0f0e14dd6318f (Date: 2019-01-30).

71. Proxy libraries in solidity. URL: https://blog.zeppelin.solutions/proxy-libraries-in-solidity-79fbe4b970fd (Date: 2019-01-30).

72. The pact smart-contract language. URL: http://kadena.io/docs/Kadena-PactWhitepaper.pdf (Date: 2019-01-30).

73. T. Chen, X. Li, Y. Wang, J. Chen, Z. Li, X. Luo, M. H. Au, and X. Zhang. An adaptive gas cost mechanism for ethereum to defend against under-priced dos attacks. CoRR, vol. abs/1712.06438, 2017.

74. E. Albert, P. Gordillo, A. Rubio, and I. Sergey. GASTAP: A gas analyzer for smart contracts. CoRR, vol. abs/1811.10403, 2018.

75. M. Marescotti, M. Blicha, A. E. J. Hyvärinen, S. Asadi, and N. Sharygina. Computing exact worst-case gas consumption for smart contracts. In Proc. of the International Symposium on Leveraging Applications of Formal Methods, 2018.

76. J. Hoffmann, A. Das, and S. Weng. Towards automatic resource bound analysis for ocaml. CoRR, vol. abs/1611.00692, 2016.

77. J. Baeten. A brief history of process algebra. Theoretical Computer Science, vol. 335, no. 2, 2005, pp. 131–146.

78. H. Deyoung and F. Pfenning. Reasoning about the consequences of authorization policies in a linear epistemic logic. In Proc. of the Workshop on Foundations of Computer Security, 2009.

79. S. Thompson and P. L. Seijas. Marlowe: Financial contracts on blockchain. Lecture Notes in Computer Science, vol. 11247, 2018, pp. 356–375.

80. G. Bigi, A. Bracciali, G. Meacci, and E. Tuosto. Validation of decentralized smart contracts through game theory and formal methods. Lecture Notes in Computer Science, vol. 9465, 2015, pp. 142–161.

81. M. Bartoletti and R. Zunino. Bitml: A calculus for bitcoin smart contracts. In Proc. of the 2018 ACM SIGSAC Conference on Computer and Communications Security, 2018, pp. 83–100.

82. Y. Hirai. Defining the ethereum virtual machine for interactive theorem provers. Lecture Notes in Computer Science, vol. 10323, 2017, pp. 520–535.

Ethereum смарт контракты. Разработка под блокчейн Эфириум

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

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

На основе блокчейна Ethereum в России при содействии крупных компаний и банков запущена закрытая блокчейн платформа Мастерчейн, которая предназначена для работы банков и финансовых организаций и обмену информацией между ними. Криптография в блокчейне Мастерчейн сертифицирована, а все транзакции соответствуют принятому в РФ регулированию. В консорциуме по созданию блокчейна Мастерчейн стоят такие организации как: Банк России, Сбербанк, Альфа банк, Qiwi, Тинькофф банк, Газпромбанк и другие финансовые компании.

Основателями Ethereum являются Виталик Бутерин и Гевин Вуд. Запуск сети Эфириум состоялся в 2015 году. Число пользователей Эфириума неуклонно растёт, монета ETH торгуется на большинстве известных бирж и занимает 2-3 место среди всех криптовалют по капитализации. Инфраструктура вокруг Ethereum значительно развита относительно других монет и насчитывает сотни сайтов, приложений, кошельков и бирж.

Компания Наумов Лаб оказывает услуги по разработке смарт-контрактов для Ethereum. Используйте страницу контакты для связи с нами.

Миллионы долларов в опасности, исследователи обнаружили 34 000 проблемных смарт-контрактов Ethereum

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

Обнаруженная уязвимость позволяла превратить проблемную библиотеку/контракт в обычный кошелек с мультиподписью, а затем стать его владельцем, задействовав функцию initWallet. Именно это случайно проделал пользователь, известный под псевдонимом Devops199. Получив полный контроль, он отдал команду на самоуничтожение контракта, что вывело из строя множество кошельков с мультиподписью, а все средства на них оказались блокированы. Представители Parity писали, что в результате действий Devops199 пострадали 587 кошельков, на которых оказались заблокированы 513 774 ETH (порядка 160 млн долларов по курсу на момент возникновения проблемы).

Этот инцидент с Parity привлек внимание группы специалистов из Национального университета Сингапура, Университетского колледжа Лондона, а также гуманитарного колледжа Yale-NUS, который Йельский университет и Национальный университет Сингапура учредили совместно. Эксперты решили разобраться в вопросе и выяснить, много ли еще проблем таят в себе смарт-контракты.

Для проведения исследования (PDF) специалисты создали собственный приватный форк блокчейна Ethereum и разработали специальное решение MAIAN, с помощью которого проанализировали более миллиона смарт-контрактов на предмет потенциальных уязвимостей. Эксперты искали любые проблемы, которые могли бы повлечь за собой «заморозку» криптовалюты, как это произошло с Parity, утечки или полное уничтожение контрактов.

Согласно отчету команды исследователей, потенциальные проблемы были обнаружены в 34 200 смарт-контрактах. Эксперты проверили 3759 из этих контрактов более детально и в лабораторных условиях попробовали эксплуатировать обнаруженные уязвимости. В 89% случаев тесты прошли успешно, и компрометация удалась. Исследователи пишут, что если бы на их месте были злоумышленники, те могли бы похитить примерно 6 000 000 долларов США в Ethereum эквиваленте.

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

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

Руководств и ресурсов сообщества | ethereum.org

Последнее обновление страницы: 10 марта 2021 г.

Добро пожаловать на ethereum.org/learn, набор ресурсов, которые помогут вам узнать больше об Ethereum. Эта страница содержит и нетехнических статей, руководств и ресурсов. Если вы новичок в Ethereum, мы предлагаем вам начать здесь.

Вот несколько отличных отправных точек:

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

Высокоуровневые объяснения Ethereum и технологии блокчейн в целом.

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

Proof of Work and Mining

Ethereum в настоящее время использует систему под названием «Proof of Work». Это позволяет сети Ethereum согласовывать состояние всей информации, записанной в блокчейне Ethereum, и предотвращает определенные виды экономических атак.

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

В ETH 2.0 Ethereum перейдет на другую систему под названием «Proof of Stake». Узнайте больше о ETH 2.0 ниже.

Клиенты и узлы

Сеть Ethereum состоит из множества узлов, на каждом из которых работает совместимое клиентское программное обеспечение.

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

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

Подробнее о Enterprise Ethereum.

В настоящее время прилагается много усилий, чтобы сделать Ethereum более «масштабируемым» за счет повышения его скорости и общей пропускной способности транзакций. Обычно они делятся на решения «Уровня 1» и «Уровня 2».

«Уровень 1» относится к усовершенствованию основного протокола Ethereum. Основным проектом по улучшению основного протокола Ethereum является ETH 2.0.

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

Eth3 (также известный как «Безмятежность») относится к следующему крупному обновлению основного протокола Ethereum. Он сочетает в себе несколько улучшений основного протокола Ethereum, или «Уровня 1».

Узнайте все, что вам нужно знать об Eth3.

ETH 1.x — это название набора обновлений существующего протокола Ethereum. Цель состоит в том, чтобы продолжать улучшать и поддерживать Ethereum, пока ETH 2.0 разрабатывается и внедряется.

Для получения дополнительной информации см. Пояснительную страницу EthHub о ETH 1.x

«Криптоэкономика» — это практическая наука о построении распределенных систем, где свойства этих систем обеспечиваются финансовыми стимулами, а экономические механизмы гарантируются криптографией.Это общий термин для разработки и масштабирования блокчейнов, таких как Ethereum и Bitcoin.

Критика и скептицизм

Критические взгляды на Ethereum и криптовалюты.

Проверенные контракты Ethereum | Etherscan

монолитность Отсутствует6.10 Твердость XMath Миграция 1
0xfec868e10c859383a714ca71ff2016e5d4e22664 CourtFarming_RoomLPStake 0.5.17 0 Эфир 1 3/13/2021 —
0x46ea1fc2a4bebbe9c66639f91dbec19ed02d3a4e CourtFarming_RoomStake Твердость 0.5,17 0 Эфир 1 13.03.2021 Нет
0x000000000000d0151e748d25b766e77efe2a6c83 XDEX Твердость 0,50,17 Эфир 0,5,17 13.03.2021 Нет
0x0538a9b4f4dcb0cb01a7fa34e17c0ac947c22553 CourtToken Solidity 0.5.17 0 Эфир 1 13.03.2021 Нет
0x1e350fe734f368de20db997f0b1713d9a29e64c2 ERC20 0,6 13.03.2021 Нет
0x52d9db35a7b91d4da8be736a34dbf87142892a85 L3P Solidity 0.6.12 0 Эфир 2 13.03.2021 Нет
0x39F024d621367C044BacE2bf0Fb15Fb3612eCB92 DebtIssuance60 900.10 Дебитисон 1 13.03.2021
0x8d5174eD1dd217e240fDEAa52Eb7f4540b04F419 Модуль заправки соединения61 Твердость 0 Эфир 1 13.03.2021 Apache-2.0
0x51aed3a48959f475c0224cd077711b93d6e3a7cd CAPS 2 13.03.2021 Без лицензии
0xeDc0a72f63aeFE6ED7517E63618E0Bc4Ac808Be8 XHalfLife Solidity 0.5.17 0 Эфир 1 13.03.2021 Нет
0x09a5F6f9474337DDd091A5DeF9944AA5283EB259 Соединение 1 13.03.2021
0x82484b7e77E4b80De6d78Bdf9014E44CC715f66A XSwapProxyV1 Solidity 0.5.17 0 Эфир 1 13.03.2021 Нет
0x23C088198347edb873946FCff77E42401a1A93d2 XFactory Ether 1 Твердость 13.03.2021 Нет
0x3FdFdCE92E272B4B930C3825074984dC5b193b7E XPoolCreator Solidity 0.5.17 0 Эфир 1 13.03.2021 Нет
0x4F8d1C6daBbb3772cb1273638Cc98212A44 13.03.2021 Нет
0xcb2978a5DC9f6B68295E93D53a74EA2CF66265dC XConfig Solidity 0.5.17 0 Эфир 3 13.03.2021 Нет
0xd7dcb670d682dffe9a36e0f33f1d3c59b98d3e56 ROAD Твердость 13.03.2021 MIT
0x1e37f3477998c353770e43ca0eb7ac69083b5ec7 PKF Solidity 0.6,12 0 Эфир 4 13.03.2021 Нет
0x2caae301bb207f0880efd4eaa0ef6b6a666ef397 Водород Энергия 61 Солидность 13.03.2021 Нет
0x1414e0d4f15e66bdac7a1dd267e94628abd5a1f8 WMCR Твердость 0.6,12 0 Эфир 4 13.03.2021 Нет
0x2446b411A95630F719Ef8c78f195ecDaf3fd5e94 RulerCore 60 1 13.03.2021
0xc8c28efd522843a2114ba8adbb8212d4a137eb20 WhitelistSale Solidity 0.5.17 0 Эфир 4 13.03.2021 MIT
0x74059b8948673748AB323a128648546C36ebEb51 ReflectiveTreasury Ether 13.03.2021 GNU GPLv3
0x6f244f3a2cfe3f90e00b9d98d6ec7da64d71ddfb Стратегия Solidity 0.6.12 0 Эфир 1 13.03.2021 GNU AGPLv3
0x59cd8c458d3009d16396f5f9fd98add6fb778a87 13.03.2021 MPL-2.0

Как создать смарт-контракт на Ethereum [Учебное пособие]

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

Мы решили пролить свет на эту тему и показать вам, как создать смарт-контракт на платформе блокчейна Ethereum.

Ethereum как платформа для создания децентрализованных приложений

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

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

  • Создавайте свои собственные криптовалюты

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

  • Сбор средств

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

  • Создание виртуальных организаций

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

  • Разработка децентрализованных приложений

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

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

Как платформа Ethereum выполняет смарт-контракты

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

  • Виртуальная машина Ethereum (EVM)

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

  • Solidity

    Solidity — это язык смарт-контрактов в Ethereum. Это язык программирования общего назначения, разработанный на основе EVM.Как и другие объектно-ориентированные языки, Solidity использует класс (, контракт ) и методы, которые его определяют. Теоретически Solidity позволяет выполнять произвольные вычисления, но его основная цель — отправлять и получать цифровые токены, а также сохранять состояния. Что касается синтаксиса, на Solidity повлияли JavaScript, C ++ и Python, поэтому опытные программисты могут легко понять его синтаксис.

    Чтобы правильно написать смарт-контракт Ethereum, вам следует внимательно прочитать документацию, чтобы узнать больше о Solidity и о том, как с ним программировать.

  • Gas

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

Начало работы со смарт-контрактом Ethereum

Пора приступить к работе и заключить смарт-контракт!

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

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

Для реализации смарт-контракта Ethereum для торговой площадки блокчейн вам понадобится следующий набор инструментов:

  • Node.js — среда выполнения JavaScript для программирования на стороне сервера. Вам нужен Node.js для тестирования функциональности вашего смарт-контракта Ethereum и обеспечения его правильной и безопасной работы. Вместе с Node.js вам следует установить менеджер пакетов, например Yarn .
  • Truffle — популярный фреймворк для разработки Ethereum, который позволяет писать и тестировать смарт-контракты.Truffle написан на JavaScript и содержит компилятор для языка программирования Solidity. Truffle Сontract — это библиотека JavaScript, которая упрощает импорт скомпилированных смарт-контрактов.
  • Ganache CLI — клиент удаленного вызова процедур (RPC) Ethereum в рамках Truffle; ранее известный как TestRPC.
  • Web3.js — API-интерфейс Ethereum JavaScript, который взаимодействует с сетью Ethereum через вызовы RPC.
  • Parity — быстрый и безопасный клиент Ethereum для управления учетными записями, токенами и т. Д.
  • Visual Studio Code — редактор функционального кода; фактически, вы можете использовать любой другой редактор.

Пошаговое руководство по созданию смарт-контракта на Ethereum

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

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

Приступим.

Шаг №1: Представление двух сторон смарт-контракта Ethereum

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

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

Учиться как мы создали двусторонний рынок для творческого цифрового контента.

Клиент платит таскеру за выполнение задачи, поэтому вы также должны добавить сумму платежа в смарт-контракт; мы назвали его payAmount .

Прежде чем кодировать эти две роли и сумму платежа в смарт-контракте, давайте напишем автоматизированный модульный тест с помощью JavaScript:

Теперь пришло время реализовать точно такую ​​же логику для написания реального смарт-контракта с Solidity:

Чтобы узнать, верен ли ваш код Solidity, запустите тест в Truffle, используя этот код (он одинаков для всех трех шагов):

Смарт-контракт должен пройти тесты, иначе в вашем коде есть ошибка.

Шаг № 2: Разрешение клиенту переводить деньги на смарт-контракт

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

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

.

Теперь обновите смарт-контракт, добавив код, который позволяет клиенту переводить на него деньги:

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

Шаг № 3: Разрешение смарт-контракту переводить деньги исполнителю

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

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

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

Наконец, чтобы убедиться, что смарт-контракт не содержит ошибок, протестируйте его в Truffle.

Шаг №4: Развертывание смарт-контракта

Смарт-контракт в Solidity готов, поэтому остается последний шаг — его скомпилировать и развернуть. Поскольку это учебное пособие, развертывание контракта в самой сети Ethereum не имеет смысла, поэтому мы собираемся сделать это в Ropsten, популярной тестовой сети для Ethereum.

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

Создание кошельков Ethereum

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

Получите эфир в тестовой сети Ropsten

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

Есть несколько способов получить бесплатный тестовый эфир.Воспользуемся плагином Metamask (мы использовали версию для Google Chrome). Metamask — это расширение Ethereum, которое позволяет вам работать с децентрализованными приложениями прямо в вашем браузере. Импортируйте учетную запись Metamask и добавьте к ней три кошелька. Затем посетите https://faucet.metamask.io/ и запросите бесплатный эфир; однако будьте осторожны, поскольку вы можете получить только ограниченное количество бесплатного эфира на одну учетную запись.

Логика нашего смарт-контракта работает так: деньги переводятся от клиента на смарт-контракт, а затем автоматически отправляются таскеру.Следовательно, нам нужна наша eth в кошельке клиента.

Составьте смарт-контракт с Truffle

Мы уже создали смарт-контракт, написанный на Solidity, но его нужно превратить в файл .json для развертывания. Используйте Truffle для составления смарт-контракта; он создаст файл .json, который вы можете называть как хотите (мы назвали его OddjobPayContract.json).

Запустить сценарий развертывания

Чтобы развернуть ваш смарт-контракт в тестовой сети Ropsten, мы создали следующий скрипт на JavaScript:

Выполните свой смарт-контракт

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

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

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

Заключительные мысли

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

Нужна помощь во внедрении технологии блокчейн и смарт-контрактов в ваше приложение? Напишите нам, и наша команда поможет вам все наладить и запустить.

: Распределенная машина Тьюринга с защитой блокчейна :: vas3k.com

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

Оригинальная статья написана в моем блоге. Большое спасибо bytescout.com за этот перевод.

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

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

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

В повседневной жизни мы всегда заключаем договоренности по принципу «если… то» по всему, а не только по финансам.«Если я помогу тебе написать статью, тогда ты позволишь мне поиграть на твоей Play Station», «Если я поправлюсь к лету, я получу отпуск на Гавайях» и т. Д.

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

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

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

Именно об этом подумали авторы Ethereum, и так появились смарт-контракты.

Начнем с очень распространенной ситуации: наш старый друг Алекс собирается съездить в другой город и снять там квартиру.Просматривая веб-страницы, он находит следующее объявление — девушка по имени Кейт предлагает квартиру в самом центре за 300 долларов. Кейт и Алекс незнакомы, поэтому не могли доверять друг другу. Кейт боится, что Алекс может передумать в самый последний момент. Алекс хорошо знает ситуацию, когда кличку Кейт использует мошенник, у которого вообще нет квартиры, но который умеет сбегать с чужими деньгами.

Есть два традиционных способа разобрать вещи:

1 Алекс и Кейт подписывают долгий договор, в котором указываются данные, удостоверяющие личность, TOS, сборы, штрафы и другие страшные вещи.Наконец, Алекс соглашается заплатить 100 долларов вперед и надеется, что Кейт настоящая девушка.

2 Они находят агента, который соглашается взять на себя всю ответственность, но хочет получить комиссию в размере 50%. Алекс и Кейт чувствуют себя в безопасности, но их карманы намного легче.

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

В нашей схеме предоплата является дополнительной осторожностью исключительно для спокойствия Кейт.Алгоритмическое соглашение гарантирует выполнение всех изложенных в нем условий.

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

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

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

С такой системой Кейт просто не нужно генерировать новый контракт на каждого Алекса. И никто не знает, как можно описать логику типичного договора аренды для всех — положить деньги в кошелек, генерируется комбинация дверей и, если квартира свободна на выбранные даты — вуаля! Этот контракт будет храниться в системе навсегда, и вы можете применять некоторые скидки, изменять ставки в зависимости от сезона и изменения условий по прямому запросу Кейт.

Можно даже загрузить код на GitHub и создать универсальный договор на безопасную аренду любой квартиры любой Кейт. Когда Алекс переводит деньги на такой контракт, он может быть уверен, что логика контракта не изменится.

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

У них есть переменные, функции, условия, циклы и даже некоторая имитация классов и наследования.

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

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

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

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

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

Я прочитал несколько статей, авторы которых ненавидели термин «простой код». Как говорится, это некий «умный код, который дает гарантии и бла-бла-бла». Не слушай их. Это вам в уши вливают маркетологи, которые хотят выглядеть умно и подписать вас на свой ICO-сервис. Для технарей это простой код, выполняемый внутри виртуальной машины. Никакой магии.

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

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

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

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

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

Для этого Ethereum использует так называемый Gas — это небольшой кусок эфира (ETH) — внутренней валюты. Газ оплачивается за использование CPU майнеров, но реальную копейку получает только тот, кто найдет блок — он включает их в свою комиссию.

Каждая операция внутри виртуальной машины имеет свою «цену», которая очень проста: выполнение 1 строки стоит 1 цент. Чтобы выполнить 15 строк, вам нужно положить в вызов транзакции 15 центов. При создании смарт-контракта не обязательно запоминать цены.Автор все автоматически считает.

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

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

Каждая строка кода тратит привязанный к транзакции газ. Если он внезапно заканчивается — выполнение прекращается и транзакция отменяется. Если код был успешно выполнен, но Gas все еще остается. Он возвращается отправителю как неиспользованный. Все честно.

Смарт-контракты в биткойнах


— Информацию для самых любопытных читателей можно пропустить

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

Таким образом, это вычисление хэшей в биткойне осуществляется путем вызова набора инструкций, которые возвращают 0 или 1 в зависимости от результата.Теоретически в этот набор можно добавить свою логику — есть операторы ветвления, переменные и тому подобное. Неудивительно, что он называется Script и похож на древний язык Forth.

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

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

Если обычный кошелек управляется парой открытого и закрытого ключей к нему — смарт-контракт является хешем из его собственного кода. Изменение хотя бы одного символа в смарт-контракте (даже комментария в коде) создает еще один смарт-контракт. Так что они гарантированно уникальны.

Смарт-контракты создаются раз и навсегда. Блокчейн все запоминает и ничего нельзя изменить.

Традиционный кошелек пользователя здесь называется «внешней учетной записью» и создается «контрактная учетная запись» в сети смарт-контрактов.В нижеследующем тексте для краткости они называются «кошелек» и «контракт».

Связь с обоими типами счетов возможна только через транзакции

Транзакция в кошелек пользователя — это перевод средств. Полный аналог с биткойном. Перевод включает количество отправленных ETH и адрес получателя.

Транзакция для контракта — это вызов его метода. Поэтому его обычно называют «сообщением». Помимо количества и адреса контракта, он включает дополнительные параметры вызова и Gas для выполнения кода.

Транзакция без получателя — это создание смарт-контракта.> В такой транзакции необходимо передать скомпилированный байт-код контракта и Gas для выполнения кода для создания контракта (конструктор в терминах ООП).

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

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

В предыдущем посте я простыми словами сказал, что блокчейн состоит из длинной цепочки всех изменений — его истории. Чтобы рассчитать текущий баланс кошелька, нужно его пройти и все положить. Я получил 5 BTC, заплатил 3 BTC, затем получил еще 4 BTC, общий баланс 5 — 3 + 4 = 6 BTC — это было текущее состояние кошелька.

Ethereum в своем техническом документе много посвящает объяснению, почему цепочка изменений и цепочка состояний, по сути, одно и то же.

Состояние — это слепок всех изменений на определенный момент.

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

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

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

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

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

Каждая транзакция записывает изменения в этот репозиторий (очень похоже на коммит git). Когда Алекс вызывает контракт Кейт, транзакция «Алекс позвонил в контракт Кейт» добавляется в блокчейн. «На балансе контракта теперь 100 от Алекса / на балансе Алекса N-100 ″ — это « закрепленных » на хранилище.Это новое состояние после изменений.

Внутри хранилища реализовано дерево Меркла, о котором мы говорили ранее. Здесь он немного изменен для оптимизации размера и называется Patricia Tree. Но идея все та же — хешировать соседей, пока не получим один основной хеш. Этот основной хеш — это хеш корня дерева, всегда включаемый в каждый новый блок.

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

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

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

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

Технически это все те же объекты.

Для обычного человека транзакция в биткойнах состоит из пяти основных элементов:

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

Вот список основных компонентов транзакции в Ethereum:

Это комбинация этих двух значений, которая теперь отвечает за комиссию, в отличие от явного количества BTC, как в биткойнах.Прилагаемый к транзакции Gas оплачивает расчет майнеров, как если бы вы им заплатили.

Gas Limit — это количество единиц, которые оплачиваются за выполнение каждой строки кода в смарт-контрактах. Цена каждой операции в этих единицах фиксирована и одинакова для всех машин. Проще говоря: сравнение двух переменных стоит 10 Gas, а создание новой транзакции — 100. Кроме того, запись новых данных в хранилище системы также оплачивается Gas. Сам вызов смарт-контракта также стоит некоторого фиксированного количества газа, потому что загрузка его байт-кода в виртуальную машину также является операцией.Но есть операции, которые намеренно делают бесплатными. Он включает, например, очистку временных данных, грубо говоря, деструктор, который делается, чтобы мотивировать создателей контрактов очищать глобальное хранилище от мусора.

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

Цена газа — цена одной единицы газа. Он регулирует более высокую или более низкую цену для каждой операции. Повышая цену на газ относительно ее рыночной стоимости, вы можете мотивировать майнеров обрабатывать вашу транзакцию быстрее. Кажется, вы говорите: «Я плачу за каждую строчку кода на 10% больше, чем есть на рынке».

Иногда действительно нужно повышение цены на газ. Помните ICO от Brave, который собрал 36 миллионов долларов за 24 секунды? Это меньше двух кварталов, поэтому покупатели с рыночной ценой на газ просто не успевают успеть на поезд за два квартала.Майнеры оставили бы свои транзакции «на потом» по дешевке, пока контракт уже был закрыт. Если лимит газа измеряется просто в «штуках», цена на газ указывается в реальной валюте. Цена на газ всегда незначительна по сравнению с основной валютой. Поэтому для таких ничтожных «копеек» есть свои названия:

  • 1 Wei — минимальная единица расчета в системе
  • 10 12 Wei = 1 Szabo
  • 10 15 Wei = 1 Finney
  • 10 18 Wei = 1 эфир (знаменитый эфир или ETH)

Как и любая финансовая система, Ethereum работает только с целыми числами (проблемы с float и double известны всем нормальным студентам в области информационных технологий).Другими словами, Ethereum обрабатывает ETH с точностью до 18 знаков после запятой. Гораздо точнее, чем 8-значный BTC.

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

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

В Ethereum блоки немного отличаются от классического Биткойна.

В блок всегда добавляется хеш всего хранилища.Как будто вы сделали хэш всех данных на жестком диске. Такое приведение всегда отражает точное состояние системы на данный момент: все данные контрактов и остатки на счетах. В Ethereum это просто корень дерева Меркла, упомянутого выше.

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

Представьте, что вы отправили запрос на выполнение кода смарт-контракта, и он вернул ошибку (например, ICO завершено). Или вы не прикрепили к нему достаточно газа, и выполнение было прервано.

В обоих этих случаях транзакция будет считаться успешной с точки зрения блока — потому что код был выполнен, газ был передан, а состояние было изменено. Однако для отправителя эта транзакция должна быть помечена как неудачная.Но где? Для этого Ethereum вводит еще одну сущность:

.

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

Теперь, если я прикрепил 1000 газа, но выполнение кода заняло только 800 — в квитанции указано, что я фактически потратил 800. 200 будет возвращено обратно, а транзакция будет иметь 1000 в момент отправки.

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

Время кричать «Нееет!»

Проще представить это своими настоящими дядями и тетями — этот блок мог бы быть моим родителем, если бы я майнил соседнюю цепочку (родился в соседней семье).

Его назначение будет рассмотрено позже в разделе о майнинге и алгоритме GHOST.

В итоге блок в Ethereum выглядит так:

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

Если майнеры одновременно начинают анонсировать свои блоки в сети, получается гонка с непредсказуемым результатом, когда невозможно определить победителя. Следовательно, каждый майнер должен решить сложную задачу с легко проверяемым ответом, который записывается в найденный блок. Первый, кто нашел ответ и объявил блок, получает вознаграждение в размере 3 ETH.

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

Помните, я говорил, что в биткойне нужно решать задачу поиска такого хеша, который начинается с N нулей, например 000000000000000000523 … Даже был интерактивный поиск таких хешей.

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

Хэш блока, который представляет собой просто число, должен быть меньше определенного предустановленного числа. Таким образом, гарантированы те 10 минут, в течение которых вся сеть находит новый блок. 15 секунд в Ethereum — это ничто, поэтому в Ethereum сложность устроена таким образом, что вы не найдете нулей в начале блоков.

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

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

Когда вы пытаетесь заплатить ETH и ждете подтверждения в течение получаса, это не только неудобно, но и несет в себе серьезную опасность. Если майнеры проводят большую часть своего времени, пытаясь запустить блоки в «ненужных» цепочках, у них есть мотивация присоединиться к пулу, где они могут объединить одну конкретную цепочку, тем самым увеличивая шансы на успех и вознаграждение.

Мотивация к объединению приводит к возможности «атаки 51%» — когда более 50% мощности сосредоточено в руках одного менеджера пула. С помощью этой способности он может изменить историю блокчейна и откатить транзакции, о которых обычные майнеры узнают только из сообщений Reddit.

Поэтому в 2013 году был предложен модифицированный алгоритм GHOST — Greedy Heaviest Observed Subtree. В дополнение к концепции предыдущего блока («родительский») он вводит понятие «дядя» (или оммер) блока.

У

GHOST простое сообщение: дать небольшое вознаграждение, включая тех майнеров, которые нашли «дядю» — логически правильный блок, которому просто не повезло попасть в цепочку соседей. Дядя получает 12,5% от стоимости полноценного блока. Это мотивирует майнеров продолжать добычу самостоятельно, потому что вы также можете хорошо зарабатывать, ища дядей.

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

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

Многие считают ASIC обманом, но это реальность.

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

А накануне перехода на Proof-of-Stake идея построить ASIC под Ethereum вообще не имеет финансового смысла.

В прошлый раз я рассказывал, что классический майнинг с поиском ответа на сложную проблему называется Proof-of-Work. Его главный недостаток в том, что человечество тратит огромные ресурсы на его функционирование. Точнее, на самом деле это не обязательно, но каждый хочет получить свою награду.Это приводит к постоянной гонке вооружений и майнинговым фермам размером с половину Индии.

Теперь Ethereum также использует Proof-of-Work-Mining. Алгоритм называется Ethash, но он считает свои последние дни. Ethereum давно собирается перейти на новый алгоритм майнинга, где никому не нужно будет скупать видеокарты и строить фермы — Proof-of-Stake.

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

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

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

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

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

Различия начинаются, когда транзакция запускает смарт-контракт. Затем компьютер-майнер находит этот смарт-контакт в загруженной копии хранилища и запускает свой код с переданными параметрами, используя свою виртуальную машину (EVM — Ethereum Virtual Machine). Каждый майнер делает то же самое, но результат в сети появится только один раз. Следовательно, все операции в контракте должны быть детерминированными, и при необходимости о них можно легко забыть.

При каждом обращении к контракту регистрируется Gas Limit — количество вычислений, необходимых для его выполнения.Если в биткойнах майнеры собирают транзакции до тех пор, пока они не достигнут желаемого размера блока, они решают, сколько их включить в блок в зависимости от их общей сложности. Вы можете быстро выполнить сотни базовых смарт-контрактов или взять вместо них один «толстый».

В результате вычислений майнеры помимо создания дерева транзакций перестраивают дерево состояний. Они генерируют квитанции для каждой завершенной транзакции и включают все в новый блок. Только после этого они пытаются найти хеш необходимой сложности для включения своего блока в основной блокчейн.Кстати, вместо стандартного SHA-256 в Ethereum используется хеш KECCAK-256.

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

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

Новая технология в руках программиста похожа на новую бензопилу для калифорнийского маньяка. Вам просто не терпится попробовать все это сразу.

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

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

ICO — прекрасный пример использования смарт-контрактов, и теперь вы, скорее всего, догадались, что это такое.

Теперь Алекс — мастер по изготовлению милых плюшевых акул вроде этой (оригинал: KATYUSHKA ART DOLLS):

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

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

Алекс загружает его в блокчейн через кошелек Ethereum и уже может заходить на форумы «ребята, покупайте мои токены». Из-за шумихи кто-то даже купит пару, как это случилось с Useless ICO, когда чувак решил собрать деньги на новый компьютер, но собрал десятки тысяч долларов. Это похоже на выпуск акций, но это еще не полноценное ICO, больше похоже на пожертвования для виртуального вознаграждения.

Так называемые «ICO-профессионалы» сейчас возмущены, гадая, где же Whitepaper, где модный лендинг со списком советников, контракт с биржей и ветка от Bitcoin Talk на украденный аккаунт. Да, все это полезно, но не имеет ничего общего с технической стороной.

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

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

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

После этого акулы-монеты ICO существуют в основном как записи в контракте. Технически, как и основной словарь {Джон: 20 монет, Питер: 100 монет}, который теперь постоянно записывается в глобальном хранилище. Цифры в словаре не имеют плавающей цены, потому что их нельзя купить или продать. Их можно только кому-то передать или подарить.

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

Вот так в двух словах устроено ICO. Когда-то в 2016 году это можно было сделать даже таким образом, но очень скоро Big Shots (TM) пришли на этот рынок, и правила игры стали намного сложнее. В любом случае, как пример использования смарт-контракта, ICO — это круто.

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

Это было в 2016 году, ICO еще не было массовым явлением, но сообщество Ethereum уже было вдохновлено идеей тотального краудфандинга с использованием смарт-контрактов. Тогда родился проект Децентрализованной Автономной Организации. DAO, по сути, был большим смарт-контрактом, в котором были заложены механизмы классического инвестиционного фонда: участники вносят свои деньги, получают свою долю, голосуют своими голосами, в какие проекты вложить собранные средства, чтобы сократить прибыль. в конце.

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

Запуск DAO ожидался почти всеми, поэтому сразу после запуска в фонд было отправлено около 165 миллионов долларов (а по текущему курсу ETH это более 4 долларов.3 миллиарда). Это было большое событие в обществе.

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

Так хакеры принесли на свои аккаунты более 65 миллионов долларов. Началась паника. Несмотря на то, что ошибка была не в Ethereum, а в коде смарт-контракта, истерия поразила самих создателей Ethereum. Толпа требовала «закрыть и все откатить», что в блокчейне просто невозможно. Безвыходная ситуация — кажется, ты хорошо поработал, но все равно виноват.

Это краткий пересказ истории из DAO.

Было два решения: сдаться и отдать украденные деньги хакерам или «остановить» обновление цепочки блоков для всех клиентов, откатиться к ранним блокам и перезапустить все — по сути, разделить блок и сделать хард-форк. Был выбран второй вариант. Так появилось два блокчейна — Ethereum и Ethereum Classic.

Это был сильный удар по сообществу. Многие люди до сих пор не могут принять это внешнее вмешательство в свой независимый децентрализованный мир. «Если создатели могут сделать это в любое время с нашими деньгами — как мы можем доверять такой цепочке блоков», — кричали они на форумах и Reddit, и были в значительной степени правы. Представьте, каково было обычным пользователям, которые в это время купили ETH где-нибудь в киоске обмена валюты.

Существует популярная аналогия: «Биткойны — это золото, Ethereum — это нефть».

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

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

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

Как заключить смарт-контракт с Ethereum (Учебное пособие)

Введение

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

Ремиксирование Solidity

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

Solidity — это формальный язык программирования высокого уровня, который используется для создания смарт-контрактов Ethereum. EVM органически не понимает код Solidity; скорее, Solidity поставляется со своим собственным компилятором, который переводит читаемый человеком исходный код Solidity в низкоуровневый байт-код, совместимый с EVM. Solidity — это полный по Тьюрингу язык, синтаксис и семантика которого был вдохновлен подобными C ++, Python и JavaScript.Он объектно-ориентированный и предоставляет выразительную систему статической типизации, и он соответствует основополагающим объектно-ориентированным концепциям, таким как инкапсуляция, наследование и полиморфизм. Тот факт, что Solidity поддерживает наследование, привел к появлению обширной экосистемы служебных библиотек контрактов, базовых контрактов, предназначенных для расширения, и других модульных функций, помогающих создавать контракты.

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

  1. Посетите remix.ethereum.org.
  2. Выберите среду Solidity.
  3. Создайте новый файл с именем CellSubscription.sol .

Учебное пособие: договор сотового телефона

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

1. Создайте класс договора

Первым шагом в кодификации нашего теоретического контракта на сотовый телефон является определение самого контракта.

  pragma solidity> = 0,4,22 <0,7,0;

контракт CellSubscription {

}  

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

2. Настроить внутреннее состояние

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

  pragma solidity> = 0.4,22 <0,7,0;

контракт CellSubscription {
uint256 monthCost;

    constructor (uint256 cost) public {
        ежемесячная стоимость = стоимость;
    }
}  

Много нового синтаксиса было введено очень быстро, поэтому давайте разберем приведенный выше код по операторам. Сначала мы объявляем переменную-член monthCost в самом контракте с типом uint256 , что означает, что это целое число без знака размером до 256 бит. Мы будем использовать эту переменную ежемесячной стоимости позже, когда определим, полностью ли оплатил абонент сотовой связи свой контракт.Затем мы определяем функцию-конструктор и устанавливаем ее видимость public , используя модификатор видимости функции. Функции и переменные-члены могут иметь четыре разных видимости в Solidity: общедоступный , частный , внутренний и внешний . И публичные, и частные члены ведут себя так, как следует из их названия; внутренние члены аналогичны защищенным членам в TypeScript и могут быть вызваны только из текущего дерева наследования, а внешних является его обратным.Наконец, мы инициализируем переменную-член monthCost с аргументом cost , переданным в конструктор.

3. Добавить абонентскую функциональность

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

  pragma solidity> = 0,4,22 <0,7,0;

контракт CellSubscription {
uint256 monthCost;

    constructor (uint256 cost) public {
        ежемесячная стоимость = стоимость;
    }

    function makePayment () payable public {

    }
}  
Смарт-контракты

Ethereum по умолчанию действуют как кошельки, то есть они могут отправлять, получать и хранить эфир так же, как обычный адрес кошелька.Это встроенное понятие удерживаемой стоимости контрактов делает их особенно полезными для такого денежного соглашения, как это. В приведенном выше коде мы определяем новую общедоступную функцию makePayment , которая позволяет подписчику вносить платеж на свой счет. Модификатор функции payable указывает контракту автоматически хранить любой ETH внутри, который отправляется при вызове функции makePayment , которую мы будем использовать позже, чтобы определить, достаточно ли подписчик заплатил эфира на заданную дату.Обратите внимание на то, что у функции вообще нет тела; сохранение отправленного эфира происходит автоматически при наличии модификатора payable . При желании в тело функции можно добавить сложную логику проверки, например отклонить частичную оплату.

4. Добавить функциональность компании

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

  pragma solidity> = 0,4,22 <0,7,0;

контракт CellSubscription {
uint256 monthCost;

    constructor (uint256 cost) public {
        ежемесячная стоимость = стоимость;
    }

    function makePayment () payable public {
    
    }

    function isBalanceCurrent (uint256 monthsElapsed) общественное представление возвращает (bool) {
        return monthCost * monthsElapsed> = адрес (this) .balance;
    }
}  

Мы определяем другую общедоступную функцию с именем isBalanceCurrent , которая принимает параметр monthsElapsed , введенный как целое число без знака.Компания сотовой связи может вызвать эту упрощенную функцию и передать определенное количество прошедших месяцев, чтобы определить состояние счета абонента в определенный момент времени. Модификатор функции view используется, чтобы указать, что эта функция не изменяет внутреннее состояние и доступна только для чтения. возвращает (bool) Предложение делает то, что подразумевает, и указывает, что будет возвращено истинное или ложное значение. Внутри самого тела функции мы выполняем простую арифметическую логику для определения общей суммы, которая должна быть выплачена, и сравниваем ее с внутренним эфирным балансом контракта с использованием адреса (this).баланс . Как и в других языках, это относится к текущему экземпляру контракта, который выполняется. Адрес (...) Оператор - это глобальная функция, которая принимает экземпляр контракта и возвращает экземпляр адреса, поэтому адрес (этот) является сокращением для доступа к экземпляру текущего адреса. Наконец, все экземпляры адресов контрактов в Solidity также предоставляют переменную экземпляра balance , которая относится к количеству эфира, хранящемуся в настоящее время внутри.Это означает, что в теле функции выше, если в аккаунте достаточно эфира в зависимости от количества прошедших месяцев, он вернет true , в противном случае он вернет false .

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

  pragma solidity> = 0,4,22 <0,7,0;

контракт CellSubscription {
uint256 monthCost;

    constructor (uint256 cost) public {
        ежемесячная стоимость = стоимость;
    }

    function makePayment () payable public {
    
    }

    function removewBalance () public {
        msg.sender.transfer (адрес (этот) .balance);
    }

    function isBalanceCurrent (uint256 monthsElapsed) общественное представление возвращает (bool) {
        return monthCost * monthsElapsed == address (this) .balance;
    }
}  

Мы добавляем последнюю общедоступную функцию под названием removewBalance , которая позволяет очистить счет.В теле функции используется глобальный объект msg , который ссылается на полезную нагрузку последней входящей транзакции. В этом небезопасном и базовом примере весь баланс счета передается вызывающей стороне removewBalance с использованием функции msg.sender.transfer , которая отправляет эфир на счет отправителя. Мы снова используем адрес (this) .balance для доступа к внутреннему сохраненному эфиру, используя его как сумму, которую мы хотим снять.

5. Скомпилируйте и запустите

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

  1. Сохраните договор, используя + S или Ctrl + S , в зависимости от вашей операционной системы.
  2. Перейдите на вкладку развертывания.
  3. Определите ежемесячную стоимость, которую нужно передать конструктору, и щелкните, чтобы развернуть.
  4. Настройте моделируемое значение ETH, равное 1000 wei, и вызовите функцию makePayment . Это имитирует оплату абонента за определенный месяц.

  5. Наконец, вызовите функцию isBalanceCurrent с 1 в качестве параметра monthsElapsed , что означает, что мы проверяем актуальность баланса по прошествии одного месяца.Вы должны увидеть 0: bool: true , что указывает на то, что баланс счета действительно актуален.

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

Реальные аспекты

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

Базовый контракт на подписку на сотовый телефон, который мы кодифицировали, по своей сути небезопасен и может быть значительно улучшен. Например, снятие средств должно быть ограничено набором предварительно утвержденных адресов отправителя , чтобы не дать произвольным пользователям опустошить счет.В настоящее время любой может позвонить в службу removewBalance и получить все ETH, хранящиеся в контракте. Кроме того, функция makePayment может быть расширена для проверки полученного платежа, чтобы предотвратить переплату или недоплату, и при желании можно проверить, что отправитель использует известный счет.

Хотя среда разработки Remix отлично подходит для создания прототипов смарт-контрактов и тестирования корректности Solidity, большинство реальных смарт-контрактов будет разрабатываться локально с использованием более сложных инструментов сборки, таких как Truffle.Возможно, наиболее важно то, что требует реальных денег в виде эфира для взаимодействия со смарт-контрактами, развернутыми в основной сети Ethereum . Это сделано намеренно и составляет краеугольный камень экономической самодостаточности Ethereum: делать что-либо в действующей сети Ethereum стоит денег. К счастью, Remix обходит эту начальную сложность, создавая в браузере EVM на основе JavaScript, который имитирует поведение реального сетевого EVM. На практике смарт-контракты будут развертываться с использованием Node.js-интерфейс с помощью фреймворка, такого как Truffle, и для развертывания контрактов и вызова функций потребуется учетная запись Ethereum, финансируемая за счет реального эфира.

Заключение

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

GitHub - ethereum-optimism / контракты: [Оптимизм] Smart Contracts

@ eth-optimism / contract содержит различные смарт-контракты Solidity, используемые в системе Optimistic Ethereum. Некоторые из этих контрактов развернуты в Ethereum («Уровень 1»), в то время как другие предназначены для развертывания в Optimistic Ethereum («Уровень 2»).

В каждом файле контракта вы найдете комментарий, в котором перечислены:

  1. Компилятор, с которым должен быть составлен контракт, solc или optimistic-solc .
  2. Сеть, в которой будет развернут контракт, OVM или EVM .

Более подробный обзор этих контрактов можно найти на сайте сообщества.

Использование (npm)

Если ваш стек разработки основан на Node / npm:

 npm install @ eth-optimism / контракты 

В рамках ваших договоров:

 импортировать {SomeContract} из "@ eth-optimism / contract / SomeContract.соль "; 

Руководство для разработчиков

Настройка

Установите следующее:

Клонировать репо:

 git clone https://github.com/ethereum-optimism/contracts.git
cd контракты 

Установить npm пакетов:

Запуск тестов

Испытания проводятся по пряжи :

Запустите определенные тесты, указав путь к файлу, который вы хотите запустить:

 пряжа тест ./test/path/to/my/test.spec.ts 

Компиляция и сборка

Самый простой способ - запустить основной скрипт сборки:

Выполнение команды полной сборки приведет к следующим действиям:

  1. build: контракты - Компилировать все контракты Solidity с компиляторами EVM и OVM.
  2. build: typescript - Создает файлы машинописных текстов, которые используются для экспорта утилит в js.
  3. build: copy - Копирует различные другие файлы в папку сборки.
  4. build: dump - Генерирует состояние генезиса из контрактов, которые будут использовать L2 geth.
  5. build: typechain - Создает артефакты TypeChain.

Вы также можете построить определенные компоненты следующим образом:

Безопасность

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

рейтинговых смарт-контрактов Ethereum. Обзор фактических… | by Alex Vikati

Рейтинг смарт-контрактов

Анализируя блокчейн Ethereum, мы теперь ранжируем каждый контракт по транзакциям, уникальным посетителям и полученным ETH.

Лучшие контракты по транзакциям, уникальным посетителям и стоимости

Приложение First Killer: ERC20

Неудивительно, что контракты с токенами ERC20 доминируют на диаграммах. За последний месяц (май 2018 г.) более половины из 100 крупнейших контрактов по транзакциям - это токены ERC20, достигающие сотен тысяч уникальных посетителей через миллионы транзакций.

Независимо от конечной стоимости базовых активов очевидно, что в качестве механизма токенизации контракты ERC20 на Ethereum нашли свое соответствие продукту / рынку.

Одним из самых популярных токенов ERC20 является EOS, широко разрекламированная платформа, основная сеть которой недавно была запущена, заняв 3-е место по транзакциям и 2-е место по уникальным посетителям. С июля 2017 года он неизменно входит в топ-10 списков транзакций и уникальных посетителей. Этот токен продается EOSSale, контрактом, который получил более 1,4 млн эфиров и занимает первое место по выручке.

EOS - один из самых популярных смарт-контрактов ERC20. EOS входит в топ-10 списков с июля 2017 года.

Другие популярные токены в мае 2018 года включают NEP (№1 по уникальным и №2 по транзакциям), Stoj (который подскочил на 147). занимает 5 место по транзакциям) и Tron (6 место по транзакциям и 12 место по уникальным посетителям).

Поскольку токены ERC20 имеют разные характеристики, мы добавили фильтрацию ERC20 в наш рейтинг, чтобы контракты токенов могли быть включены или исключены.

Non-ERC20

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

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

Четвертый по популярности контракт по транзакциям используется как EtherDelta, так и ForkDelta.

Этот пример иллюстрирует разрушительную силу смарт-контрактов (и блокчейнов в целом). В общих чертах, децентрализованное приложение Ethereum можно представить как веб-сайт или приложение, работающее на одном или нескольких «API» в форме смарт-контрактов. Разработчики разделили EtherDelta, создав новый веб-сайт на основе смарт-контракта EtherDelta, не требуя разрешения от кого-либо еще. Этот форк настолько успешен, что веб-сайт ForkDelta собирается обогнать EtherDelta по трафику.

От Alexa: ForkDelta собирается обогнать EtherDelta в рейтинге веб-трафика.

В централизованной системе такого сценария никогда не будет. Если пользователь недоволен веб-сайтом Wells Fargo, он застрял на нем. Даже если бы ей пришлось использовать API-интерфейсы Wells Fargo для создания нового сайта, Wells Fargo сможет в любой момент отключить доступ к API.

Сила децентрализации также проявляется в Cryptokitties, широко обсуждаемом децентрализованном приложении для коллекционирования. Cryptokitties - это централизованный веб-сайт, который работает на нескольких смарт-контрактах с различными функциями API: (1) владение (занимает # 16 место в транзакциях), (2) аукцион продаж (занимает 82 место в транзакциях), (3) аукцион производителей (занимает # место). 750 транзакций) и (4) генная наука.

В децентрализованном приложении Cryptokitties есть как минимум 4 смарт-контракта.

Поскольку эти смарт-контракты децентрализованы, разработчики могут создавать другие децентрализованные приложения, которые используют преимущества «API» Cryptokitties без разрешения.

Обновлено: 13.03.2021 — 13:59

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

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