что такое мастер контракт
master contract
Смотреть что такое «master contract» в других словарях:
Master contract — A master contract (or master agreement) is a contract reached between parties, in which the parties agree to most of the terms that will govern future transactions or future agreements. A master agreement permits the parties to quickly negotiate… … Wikipedia
Contract bridge — Bridge declarer play Alternative name(s) Bridge Type trick taking Players 4 Skill(s) require … Wikipedia
Master and Servant Act — Master and Servant Acts or Masters and Servants Acts were laws designed to regulate relations between employers and employees during the 18th and 19th centuries. An 1823 United Kingdom Act described its purpose as the better regulations of… … Wikipedia
contract bridge — [kän′trakt΄] n. a form of bridge, developed from auction bridge, in which only the number of tricks named in the contract may be counted toward a game, additional tricks being counted as a bonus score * * * ▪ 2003 For a sample contract bridge… … Universalium
Master P — Background information Birth name Percy Robert Miller Also known as P. Miller … Wikipedia
master — mas·ter 1 n 1: an individual or entity (as a corporation) having control or authority over another: as a: the owner of a slave b: employer compare servant c … Law dictionary
Master-slave (technology) — Master/slave is a model of communication where one device or process has unidirectional control over one or more other devices. Once a master/slave relationship between devices or processes is established, the direction of control is always from… … Wikipedia
Master Lock — Company Type Subsidiary Founded 1921 Headquarters Milwaukee, Wisconsin, U.S … Wikipedia
Master Point Press — is a Canadian book publishing company located in Toronto, Canada. It grew out of Canadian Master Point magazine (1992–1997), which was published by Ray and Linda Lee. The company began publishing books in 1994.[1] While primarily interested in… … Wikipedia
Master limited partnership — (MLP) is a limited partnership that is publicly traded on a securities exchange. It combines the tax benefits of a limited partnership with the liquidity of publicly traded securities. Master Limited Partnerships are limited by US Code to only… … Wikipedia
Contract — law … Wikipedia
master contract
Смотреть что такое «master contract» в других словарях:
Master contract — A master contract (or master agreement) is a contract reached between parties, in which the parties agree to most of the terms that will govern future transactions or future agreements. A master agreement permits the parties to quickly negotiate… … Wikipedia
Contract bridge — Bridge declarer play Alternative name(s) Bridge Type trick taking Players 4 Skill(s) require … Wikipedia
Master and Servant Act — Master and Servant Acts or Masters and Servants Acts were laws designed to regulate relations between employers and employees during the 18th and 19th centuries. An 1823 United Kingdom Act described its purpose as the better regulations of… … Wikipedia
contract bridge — [kän′trakt΄] n. a form of bridge, developed from auction bridge, in which only the number of tricks named in the contract may be counted toward a game, additional tricks being counted as a bonus score * * * ▪ 2003 For a sample contract bridge… … Universalium
Master P — Background information Birth name Percy Robert Miller Also known as P. Miller … Wikipedia
master — mas·ter 1 n 1: an individual or entity (as a corporation) having control or authority over another: as a: the owner of a slave b: employer compare servant c … Law dictionary
Master-slave (technology) — Master/slave is a model of communication where one device or process has unidirectional control over one or more other devices. Once a master/slave relationship between devices or processes is established, the direction of control is always from… … Wikipedia
Master Lock — Company Type Subsidiary Founded 1921 Headquarters Milwaukee, Wisconsin, U.S … Wikipedia
Master Point Press — is a Canadian book publishing company located in Toronto, Canada. It grew out of Canadian Master Point magazine (1992–1997), which was published by Ray and Linda Lee. The company began publishing books in 1994.[1] While primarily interested in… … Wikipedia
Master limited partnership — (MLP) is a limited partnership that is publicly traded on a securities exchange. It combines the tax benefits of a limited partnership with the liquidity of publicly traded securities. Master Limited Partnerships are limited by US Code to only… … Wikipedia
Contract — law … Wikipedia
Что такое социальный контракт для малоимущих
Как получить 250 000 ₽ на свой бизнес
Региональные власти с подачи федерального центра не только помогают нуждающимся льготами и пособиями, но и готовы дать возможность зарабатывать.
Малоимущие россияне могут получить субсидию в 250 000 Р на запуск своего бизнеса — это называется социальный контракт. В статье я расскажу, кто и как может получить эти деньги.
Курс о больших делах
Что такое социальный контракт
Чем социальный контракт отличается от пособий. Социальный контракт — это договор между местным органом соцзащиты и человеком, у которого низкий доход. Регион обязуется оказать нуждающемуся определенную помощь — деньгами или товарами, а тот должен трудоустроиться, пройти обучение или начать свое дело. Контракт отличается от классических пособий для малоимущих тем, что в итоге у человека должен появиться стабильный источник дохода.
Понятие «социальный контракт» появилось в 2013 году. Но власти стали активно продвигать эту программу поддержки в 2020 году, после обращения Владимира Путина к Федеральному Собранию. Соцконтракт должен был стать одним из способов помощи тем, кто потерял доход из-за пандемии.
В разных регионах есть свои нюансы и требования к тем, кто хочет заключить договор, но принцип везде одинаковый: государство помогает человеку выйти на регулярный доход.
максимально можно получить по соцконтракту
Срок действия контракта. Напомним: контракт — это договор между государством и гражданином и, как у любого договора, у него есть срок. Последний зависит от вида соцконтракта. Например, в рамках соцконтракта по поиску работы человек должен трудоустроиться максимум в течение девяти месяцев. Если же речь об открытии своего дела, то договор заключают не более чем на 12 месяцев.
Виды социального контракта
Существует пять видов социального контракта.
По поиску работы. По сути, человек получает двойное пособие по безработице: от центра занятости и по соцконтракту. Но при этом он обязуется найти работу в течение определенного срока. Все зависит от того, как скоро безработный заключит новый трудовой договор. Если человек просто стоит на учете, без контракта, то обязательства трудоустроиться у него нет.
На улучшение материального положения. В апреле 2021 года в программу внесли изменения. Деньги, полученные по соцконтракту, теперь разрешено тратить на покупку одежды, обуви и школьных товаров для детей. Действуют ли эти нововведения на практике в вашем регионе, лучше уточнить в местной соцзащите.
Кому положен социальный контракт
Заключить социальный контракт может только гражданин России. Необходимо иметь постоянную регистрацию в том регионе, в котором человек обращается в органы соцзащиты. Если у человека временная регистрация, а сам он прописан в другом регионе, то надо взять справку по месту прописки, что там соцконтракт не заключали. Также есть еще несколько важных условий.
Главный критерий — надо быть нуждающимся. Такой статус может получить как одинокий малоимущий человек, так и семья.
Кроме этого, учитывают и имущество, которое есть в собственности. Например, если доход не дотягивает до прожиточного минимума, но семья владеет двумя автомобилями, то ее могут не признать нуждающейся.
Для многодетных семей. Такой вариант тоже возможен, если соблюдать главное условие — быть малоимущим. Все равно будут учитывать совокупный доход семьи, суммируя все детские пособия и выплаты.
Для самозанятых. Можно уже быть самозанятым, можно зарегистрироваться после получения субсидии, но должен быть низкий доход за три предыдущих месяца.
Для ИП. Человек уже может быть ИП, а может встать на учет после получения субсидии, но его доход за три месяца должен быть меньше среднедушевого прожиточного минимума в регионе.
Для безработных. Здесь можно выбрать один из пяти видов соцконтрактов и заключить тот, что вам подходит.
Суть в том, что заключить соцконтракт могут абсолютно все, условие здесь одно: вы должны в этом нуждаться. Именно это и подтверждают ваши доходы ниже прожиточного минимума в вашем регионе.
Кому могут отказать в социальном контракте
Самая частая причина отказа — человек на самом деле не нуждающийся: доход на каждого члена семьи выше прожиточного минимума либо у заявителя есть дорогое жилье, автомобиль или земельный участок.
Еще одно важное условие — бизнес, который человек открыл на выделенные государством деньги, должен просуществовать минимум год.
Куда жаловаться в случае отказа. Вышестоящая инстанция для программы соцконтракта — региональное министерство социальной защиты. Можно написать обращение на официальном сайте ведомства или прийти на личный прием. Например, в Санкт-Петербурге есть Адмиралтейский отдел социальной защиты, для него вышестоящим органом будет Комитет по социальной политике Санкт-Петербурга.
Как получить социальный контракт
Какие документы нужны. В каждом регионе свои требования к документам, которые надо приложить к заявлению. Например, в Калмыкии нужно просто заполнить анкету, которую дадут в соцзащите. В Астраханской области требуют документы об обязательных расходах семьи: ЖКУ, налогах и так далее.
В Московской области не требуют бизнес-план, свидетельства для детей младше 14 лет и копии паспортов подростков младше 18 лет. Так что перечень необходимых документов стоит уточнить в местном органе соцзащиты по месту регистрации. Если не знаете, куда обращаться, информацию можно найти на справочных сайтах или на портале администрации своего города, как например, в Санкт-Петербурге.
Вот примерный перечень документов, которые требуют чаще всего:
Образец заявления в соцзащиту Челябинского городского округаPDF, 692 КБ
Сколько дней рассматривается заявление на социальный контракт. Обычно заявление рассматривают 10 дней, если не нужно запрашивать информацию от других ведомств, например из налоговой. А если такая необходимость есть, например для ИП, то в течение 30 дней.
Как написать бизнес-план
Бизнес-план — это документ с расчетами, которые доказывают, что свое дело поможет действительно выйти на стабильный доход и что для запуска нужны те самые 250 000 Р от государства. Хотя, естественно, никто не мешает попросить и меньшую сумму. Все должно быть расписано подробно, я рекомендую включить в бизнес-план несколько обязательных разделов.
Титульный лист. Достаточно написать вид деятельности, ФИО, номер телефона, адрес электронной почты, можно вставить красивую картинку с фотостока по теме будущего бизнеса. Это просто обложка, но она должна быть красивой.
Содержание. Просто перечислите все разделы бизнес-плана.
Введение. Здесь рекомендую дать общую характеристику будущего бизнеса. Например, если вы будете делать массаж, то напишите, что люди сейчас много работают, поэтому им нужно расслабиться и отдохнуть. Массаж отлично удовлетворит эту потребность. Массажный салон не требует больших вложений: всего лишь аренда и расходные материалы.
Можно написать, что у вас есть нужные навыки и образование, вам не хватает только оборудования и мебели. На отдельные виды массажа нужна лицензия, например на лечебный. Если вы планируете делать расслабляющий массаж для укрепления здоровья или моделирования фигуры, то такой массаж относится к спа-услугам и лицензия не нужна.
Резюме проекта. Это своеобразная анкета о вас с основной информацией о проекте. Надо указать личные данные: фамилию, имя и отчество, адрес регистрации, а также вид бизнеса и адрес, по которому расположится бизнес. Последний можно написать в свободной форме: «Планирую арендовать офис по адресу…». Здесь же нужно указать срок реализации проекта — обычно пишут месяц, следующий за тем, в котором человек подает документы, и эту же дату в следующем году, так как соцконтракт действует год.
В резюме можно указать общую сумму, которая потребуется на запуск бизнеса, а также возможные риски и пути решения этих проблем. Например, если человек хочет начать делать массаж, то одним из рисков может быть высокий уровень конкуренции. Выход — сделать цены чуть ниже, чем у конкурентов, ввести систему скидок для постоянных клиентов и так далее.
Анализ рынка и конкурентов. В этом разделе надо проанализировать, много ли предпринимателей занимается аналогичным бизнесом в вашем городе или районе. Проще всего оформить таблицу, расписать плюсы и минусы конкурентов, а также за счет чего новый бизнес будет выделяться на их фоне. Например, если другие предприниматели не ведут соцсети, можно написать, что у вас будет своя страничка.
Можно воспользоваться бесплатным сервисом на сайте Корпорации МСП, который помогает начинающим предпринимателям выбрать вид будущего бизнеса.
Маркетинговый план. В этом разделе необходимо расписать стратегию продвижения. Например, можно написать, что бизнес будет продвигаться в соцсетях. Рекомендую сразу завести странички и приложить ссылки.
Тут же стоит рассказать о будущих рекламных активностях. Например, мастер по массажу может делать скидки для постоянных клиентов, проводить конкурсы среди подписчиков.
Обучение. Государство заинтересовано в том, чтобы бизнес не прогорел. Поэтому лучше заниматься той сферой, в которой уже есть опыт и образование.
Если планируете делать медицинский массаж, то учтите, что нужны документы об образовании. Надо приложить копии и написать, чему удалось научиться. Также для медицинского массажа понадобится лицензия на осуществление медицинской деятельности, поскольку массаж есть в номенклатуре медуслуг.
Смета. Это список расходов, которые покроет субсидия. Обычно смету оформляют как приложение к бизнес-плану в виде таблицы.
В смете нужно рассмотреть три варианта покупок: «эконом», «стандарт» и «премиум». «Стандарт» — это те товары, которые вы хотите приобрести. «Эконом» — аналоги дешевле, а «максимум» — товары подороже. Так вы покажете, что из всего ценового диапазона вы выбираете оптимальный.
Бывает, что в бизнес-плане указан один товар, но после того как перечислили деньги, его уже нет в наличии или он подорожал. Это не страшно, можно купить другой, но надо согласовать все с соцзащитой. Как правило, там без проблем идут на уступки.
После составления сметы можно приступать к финансовому плану. В нем необходимо прописать все основные показатели будущего бизнеса: выручку, расходы, налоги, прибыль.
Никто не может знать, сколько человек заработает на своем деле, поэтому сотрудники соцзащиты не требуют точных цифр, пишите все примерно. Единственное правило здесь — лучше написать меньше и заработать больше, чем завысить, например, выручку и остаться в минусе.
Как написать финансовый план
Финансовый план — пожалуй, самая сложная часть бизнес-плана. Но она и самая важная. Здесь надо показать движение денег: выручку, расходы, налог, чистую прибыль и рентабельность. Лучше все просчитать на три года вперед. Бизнес должен развиваться, поэтому важно показать, что с каждым годом обороты и прибыль будут расти.
Отдельно надо указать, какие налоги будет платить будущий предприниматель. Если человек регистрируется как самозанятый, то будет платить 4% от выручки при работе с физлицами и 6% при работе с юрлицами и ИП. Но для финансового плана можно остановиться и на 4% от выручки. Если регистрируется как ИП — нужно выбрать режим налогообложения.
УСН «Доходы» — 6% от выручки.
УСН «Доходы минус расходы» — 15% от прибыли.
Патент — его можно применять, если предприниматель занимается розничной торговлей, сельхозработами, разработкой компьютерных программ. На патенте также могут работать парикмахеры, няни, ветеринары и разработчики. Полный список видов деятельности и формула расчета стоимости патента есть на сайте ФНС.
Если человек только открывает свое дело и не имеет сотрудников, обычно выгоднее регистрироваться самозанятость.
Куда подавать документы
В некоторых регионах необходимо подавать заявку электронно через платформу «Мой бизнес», ее региональные онлайн-сервисы, например «Мой бизнес» в Нижегородской области, или через сайт госуслуг. А в некоторых — лично, но в МФЦ. Дальше я буду рассказывать о самом частом случае — когда заявителю надо прийти с документами в соцзащиту.
Заявление и бизнес-план рассматривает специальная комиссия. Там могут задать несколько вопросов. Например, могут спросить, почему нужна именно эта модель ноутбука, обязательно ли арендовать помещение, как будущий предприниматель планирует искать клиентов и так далее.
У работников соцзащиты могут появиться вопросы по каким-то позициям, заявленным в смете, могут попросить что-то исключить или заменить. Например, по моему опыту, часто не согласовывают покупку айфонов, айпадов и макбуков. Они дорогие и всегда можно найти аналоги дешевле. Еще в моей практике был случай, когда девушка занималась пошивом одежды и хотела купить фотоаппарат, чтобы делать контент для соцсетей. Покупку также не одобрили. Посчитали, что для основной деятельности фотоаппарат не нужен.
После собеседования обычно сразу говорят, приняты заявление и бизнес-план или нет. Решение о том, готов ли регион заключить социальный контракт, вынесут в течение месяца — этот срок нужен, чтобы проверить все документы.
Основание для отказа может быть только одно: человек соврал о своих доходах и на самом деле не малоимущий. Комиссия обращает внимание и на образ жизни заявителя. Например, если человек снимает жилье, то могут предположить, что у него есть лишние деньги и он не такой уж и нуждающийся. Как показывает мой опыт, даже качество бизнес-плана не так важно: если с ним что-то не так, попросят переделать.
Отказ обязательно должны выдать в письменной форме. Уведомление об отказе направляет орган соцзащиты в письменной форме заявителю по месту жительства или по месту пребывания не позднее чем через 10 дней после обращения заявителя для подписания социального контракта.
п. 16 Постановления правительства Нижегородской области «О социальной поддержке малоимущих»PDF, 283 КБ
Если документы в порядке, то заявителя пригласят в соцзащиту, чтобы подписать контракт. После этого можно ждать деньги. Их перечисляют только на карту «Мир», как и все социальные выплаты с 1 октября. Если у вас такой нет, придется завести. Эти 250 000 Р от государства не облагаются налогом на доход, как и большинство социальных выплат и пособий.
На что можно потратить субсидию
Деньги по соцконтракту предназначены на покупку оборудования, инвентаря, инструментов, которые можно использовать многократно. Например, если человек занимается наращиванием ресниц, то приобрести можно кушетку, стол, стул, лампу. Сами ресницы и клей — это уже расходные материалы.
В качестве основного средства можно приобрести даже автомобиль, если он нужен для предпринимательской деятельности и получится обосновать эту необходимость. Например, если суть бизнеса — курьерские услуги.
На что можно тратить деньги, лучше уточнить в отделе соцзащиты, так как ситуация в разных регионах различается. Например, я сталкивалась с тем, что в одном субъекте разрешали включать в бизнес-план расходы на рекламу и расходные материалы, а в других — нет.
Если говорить об основных средствах, то лучше приобретать новые товары, так как понадобятся документы, подтверждающие факт оплаты. Их надо обязательно принести в соцзащиту, отчитываясь о расходах.
Еще я советую делать фотографии купленных товаров и прикреплять их к копиям чеков. Все это вместе будет хорошим подтверждением, что деньги потрачены по назначению.
Чеки и фото надо предоставлять сразу после того, как нужный товар куплен. Строгой формы отчета нет. В каждом регионе свои условия: где-то достаточно отправить чеки на электронную почту, где-то потребуют прийти лично. Например, в Нижегородской области ввели специальную форму отчетности за расход субсидии.
Как работает соцконтракт в реальности
Но я не растерялся: быстро переписал бизнес-план под оказание рекламных услуг для артистов и музыкантов. Рекламой я занимался раньше, проходил курсы, от которых у меня остались сертификаты и дипломы. Их я и приложил к заявлению.
Вторая попытка оказалась удачной: бизнес-план приняли. С момента повторной подачи заявления до зачисления денег на счет прошло четыре месяца. На субсидию я купил всю необходимую технику: фотоаппарат, видеокамеру и другое оборудование, которое нужно для создания фото- и видеоконтента для артистов.
От себя скажу, что социальный контракт на развитие своего дела — вещь реально стоящая. Деньги дают хоть и не очень большие, но они все равно нужны.
Отчитываться нетрудно. Когда я купил все товары по смете, работники соцзащиты пришли ко мне, проверили все ли на месте, сфотографировали оборудование. Сейчас я отчитываюсь только по доходам: ежемесячно делаю скрины приложения «Мой налог» и отправляю их на почту в соцзащиту.
Что будет, если гражданин не выполнит условия соцконтракта
Государство может расторгнуть социальный контракт и потребовать вернуть деньги. В течение года действия соцконтракта работники органов соцзащиты могут приехать с проверкой. Надо будет показать, что бизнес действительно работает, а все, что куплено, используют по назначению.
Социальный контракт заключается на год. Поэтому надо быть готовым, что в течение этого периода может приехать комиссия с проверкой — в офис или домой, если бизнес ведется на дому. Перед проверкой обычно звонят и предупреждают. Все купленное должно использоваться только для работы. Работники соцзащиты смотрят, действительно ли человек оказывает заявленные услуги и на самом ли деле он купил те товары, которые заявил в смете и за которые отчитался.
Кроме этого, в течение года каждый месяц придется отчитываться о ежемесячных доходах. Например, самозанятые должны зарегистрироваться в приложении «Мой налог» и каждый месяц отправлять в соцзащиту данные о своих доходах. Можно просто прислать скриншоты из приложения по электронной почте.
Индивидуального предпринимателя попросят завести кассовую книгу. Форму можно скачать в интернете. Здесь нужно показать, сколько ИП пришло денег и сколько было израсходовано. Каждый месяц в соцзащиту придется либо идти лично с кассовой книгой, либо отправлять сканы по почте.
Нужно ли возвращать деньги государству. Если после получения субсидии и запуска бизнеса доход человека не превысил прожиточный минимум, соцконтракт могут разорвать, а деньги попросят вернуть. Таких прецедентов я не знаю, но в теории это выглядит так: с человеком свяжутся работники соцзащиты, он подпишет заявление о невыполнении условий договора и переведет деньги обратно на счет.
Сколько раз можно заключать социальный контракт
Заключить соцконтракт получится только один раз. Это долговременная поддержка государства — ожидается, что приобретенные основные средства будут служить человеку несколько лет, чтобы его доход был стабилен. Для государства в приоритете те, кто никогда не получал субсидий.
Как расторгнуть социальный контракт
Причины расторжения социального контракта. Все зависит от того, по чьей инициативе расторгается социальный контракт. Например, если выяснилось, что деньги использованы не по назначению, сумму субсидии нужно будет вернуть.
Так, государство может расторгнуть контракт, если в течение года после заключения соцконтракта малоимущий гражданин или его семья:
Сам гражданин также вправе расторгнуть договор в любой момент, при этом сумму субсидии придется вернуть. Деньги нужно перечислить в региональный и федеральный бюджет, так как деньги выделяют из обоих.
Введение в смарт-контракты
Обычный контракт vs. смарт-контракт
Перед тем как мы углубимся в детали, давайте разберем на примере различия между обычным контрактом, который задается на бумаге, и смарт-контрактом, который представлен в цифровом виде.
Как это работало до появления смарт-контрактов? Представьте группу лиц, которая желает установить некоторые правила и условия распределения ценностей, а также определенным механизмом гарантировать выполнение этого распределения по заданным правилам и условиям. Тогда они собирались вместе, составляли бумагу, на которой записывали свои идентификационные данные, условия, вовлеченные ценности, ставили дату и подписывались. Этот контракт также заверяла доверенная сторона, например нотариус. Далее, эти люди расходились в разные стороны со своей бумажной копией такого контракта и начинали выполнять какие-то действия, которые могли не соответствовать самому контракту, то есть они делали одно, а на бумаге заверено, что должны делать совершенно другое. И как выходить из этой ситуации? Фактически нужно кому-то из участников группы брать эту бумагу, брать какие-то доказательства, нести в суд и добиваться соответствия между контрактом и фактическими действиями. Довольно часто добиться справедливого выполнения этого контракта бывает сложно, что приводит к неприятным последствиям.
Что же можно сказать про смарт-контракты? Они объединяют в себе и возможность написания условий контракта, и механизм строгого их выполнения. Если условия были заданы и была подписана соответствующая транзакция или запрос, то после принятия этого запроса или транзакции уже невозможно изменить условия или повлиять на их выполнение.
Присутствует один валидатор или целая сеть, а также база данных, которая хранит все смарт-контракты, которые поступали на выполнение в строгой хронологической последовательности. Еще важно, что эта база данных должна содержать все условия-триггеры для выполнения смарт-контракта. Кроме того, она должна учитывать ту самую ценность, распределение которой описано в контракте. Если это касается некоторой цифровой валюты, значит эта база данных должна учитывать ее.
Иначе говоря, валидаторы смарт-контрактов должны иметь доступ ко всем данным, которыми оперирует смарт-контракт. Например, одна база данных должна использоваться для учета одновременно цифровых валют, балансов пользователей, транзакций пользователей и временных меток. Тогда в смарт-контракте условием может быть баланс пользователя в определенной валюте, наступление некоторого времени или факт осуществления некоторой транзакции, но не более того.
Определение смарт-контракта
Вообще, сама терминология была придумана исследователем Nick Szabo и впервые применена в 1994 году, а задокументирована была в 1997 году в статье, которая описывает саму идею смарт-контрактов.
Смарт-контракты подразумевают, что выполняется некоторая автоматизация распределения ценности, которая может зависеть только от тех условий, которые заранее предустановлены. В самом простом варианте это выглядит, как контракт со строго заданными условиями, который подписан определенными сторонами.
Смарт-контракты призваны минимизировать доверие третьим сторонам. Иногда полностью исключается центр принятия решений, от которого все зависит. Кроме того, для таких контрактов проще проводить аудит. Это является следствием некоторых особенностей проектирования такой системы, но чаще всего мы понимаем под смарт-контрактом децентрализованную среду и наличие функций, позволяющих любому желающему проанализировать базу данных и провести полный аудит выполнения контрактов. Таким образом гарантируется защита от изменений данных задним числом, которые повлекут за собой изменения в выполнении самого контракта. Оцифровка большинства процессов при создании и запуске смарт-контракта часто упрощает технологию и стоимость их реализации.
Простой пример — Escrow сервис
Давайте рассмотрим очень простой пример. Он поможет приблизиться к пониманию функциональных возможностей смарт-контрактов, а также лучше ориентироваться, в каких случаях их стоит применять.
Его можно реализовать также с использованием Биткоина, хотя сейчас Биткоин еще сложно назвать полноценной платформой для смарт-контрактов. Итак, у нас есть некоторый покупатель и есть интернет-магазин. Покупатель хочет купить монитор в этом магазине. В самом простом случае покупатель оформляет и отправляет платеж, а интернет-магазин принимает его, подтверждает, после чего отправляет товар. Однако в этой ситуации присутствует необходимость большого доверия — покупатель должен на всю стоимость монитора доверять интернет-магазину. Поскольку интернет-магазин может иметь низкую репутацию в глазах покупателя, то существует риск, что по каким-то причинам после приема платежа магазин откажет в обслуживании и не отправит товар покупателю. Поэтому покупатель задается вопросом (соответственно, и интернет-магазин задается этим вопросом), что можно в этом случае применить, для того чтобы минимизировать такие риски и сделать более надежными подобные сделки.
В случае с Биткоином можно предоставить возможность покупателю и продавцу независимо друг от друга выбрать медиатора. Есть множество людей, которые занимаются решением спорных вопросов. И наши участники могут выбрать из общего списка медиаторов того, которому одновременно будут доверять. Вместе они создают multisignature адрес 2 из 3, где есть три ключа и необходимы две подписи любыми двумя ключами, чтобы потратить монеты с этого адреса. Один ключ будет принадлежать покупателю, второй — интернет-магазину, а третий — медиатору. И на такой multisignature адрес покупатель отправит сумму, необходимую для оплаты монитора. Теперь, когда продавец видит, что деньги на некоторое время заблокированы на multisignature адресе, который зависит от него, он смело может отправлять монитор почтой.
Далее, покупатель получает посылку, осматривает товар и принимает решение об окончательной покупке. Он может быть полностью согласен с предоставленным обслуживанием и подписать транзакцию своим ключом, где он передает монеты с multisignature адреса продавцу, а может быть чем-то недоволен. Во втором случае он связывается с медиатором для составления альтернативной транзакции, которая по-другому будет распределять эти монеты.
Допустим, монитор приехал немного поцарапанный и в комплекте не лежал кабель для подключения к компьютеру, хотя на сайте интернет-магазина было написано, что кабель должен входить в комплект. Тогда покупатель собирает доказательства, необходимые для того, чтобы доказать медиатору, что его обманули в этой ситуации: он делает скриншоты сайта, делает фотографию чека с почты, делает фотографию царапин на мониторе и показывает, что пломба была сорвана и кабель вытащили. Интернет-магазин в свою очередь собирает свои доказательства и передает их медиатору.
Медиатор заинтересован в том, чтобы удовлетворить одновременно и возмущение покупателя, и интересы интернет-магазина (дальше будет понятно, почему). Он составляет такую транзакцию, в которой монеты с multisignature адреса будут тратиться в некоторой пропорции между покупателем, интернет-магазином и медиатором, так как он берет себе часть в качестве вознаграждения за свою работу. Допустим, 90% всей суммы пойдет продавцу, 5% медиатору и 5% компенсации покупателю. Эту транзакцию медиатор подписывает своим ключом, но она еще не может быть применена, потому что для этого нужно две подписи, а стоит только одна. Такую транзакцию он отправляет и покупателю, и продавцу. Если хотя бы один из них будет удовлетворен таким вариантом перераспределения монет, то транзакция будет до-подписана и распространена в сеть. Для ее валидации достаточно, чтобы один из участников сделки согласился с вариантом медиатора.
При этом важно изначально выбрать медиатора так, чтобы оба участника доверяли ему. В таком случае он будет действовать независимо от интересов одного либо другого и объективно оценит ситуацию. Если же медиатор не предоставляет такой вариант распределения монет, который удовлетворит хотя бы одного участника, тогда, договорившись вместе, и покупатель, и интернет-магазин могут переправить монеты на новый multisignature адрес, поставив свои две подписи. Новый multisignature адрес будет составлен уже с другим медиатором, который, возможно, будет более компетентен в вопросе и предоставит лучший вариант.
Пример с общежитием и холодильником
Давайте рассмотрим более сложный пример, который отображает возможности смарт-контракта более явно.
Допустим, есть трое ребят, которые недавно заселились в одну комнату в общежитии. Они втроем заинтересованы в том, чтобы купить в свою комнату холодильник, которым они будут совместно пользоваться. Один из них вызвался собрать необходимую сумму для покупки холодильника и вести переговоры с продавцом. Однако они относительно недавно познакомились друг с другом и достаточного доверия между ними нет. Очевидно, что двое из них рискуют, отдавая деньги третьему. Кроме того, им нужно достичь согласия в выборе продавца.
Они могут воспользоваться escrow сервисом, то есть выбрать медиатора, который проконтролирует выполнение сделки и уладит спорные вопросы, если такие возникнут. Тогда, договорившись, они составляют смарт-контракт и прописывают в нем определенные условия.
Первое условие заключается в том, что до наступления определенного времени, допустим в течение одной недели, на соответствующий аккаунт смарт-контракта должны поступить три платежа с определенных адресов на определенную сумму. Если этого не происходит, смарт-контракт прекращает свое выполнение и возвращает монеты всем участникам. Если же условие выполняется, тогда задаются значения идентификаторов продавца и медиатора, а также проверяется условие, что все участники согласны с выбором продавца и медиатора. Когда все условия будут выполнены, то дальше средства будут переведены на указанные адреса. Подобный подход может обезопасить участников от мошенничества с любой стороны и вообще исключает необходимость доверять.
Мы видим на этом примере сам принцип, что такая возможность пошагово задавать параметры для выполнения каждого условия позволяет создавать системы любой сложности и глубины вложенных уровней. Кроме того, сначала в смарт-контракте можно определить первое условие, а только после его выполнения уже задавать параметры для следующего условия. Иначе говоря, формально условие прописывается, а параметры для него могут задаваться уже во время его работы.
Классификация смарт-контрактов
Для классификации можно задавать разные группы критериев. Однако на данный момент развития технологий актуальными являются четыре из них.
Смарт-контракты можно отличать по среде выполнения, которая может быть либо централизованной, либо децентрализованной. В случае децентрализации мы имеем намного большую независимость и отказоустойчивость при выполнении смарт-контрактов.
Их также можно отличать по процессу задания и выполнения условий: они могут быть произвольно программируемые, ограниченные или предустановленные, т. е. строго типизированные. Когда на платформе смарт-контрактов существует только 4 определенных смарт-контракта, параметры к ним можно задавать произвольным образом. Соответственно, задавать их намного проще: мы выбираем контракт из списка и передаем параметры.
По способу инициирования существуют автоматизированные смарт-контракты, то есть при наступлении определенных условий они самоисполняются, а бывают такие контракты, в которых условия заданы, но платформа не проверяет автоматически их выполнение, для этого их нужно отдельно инициировать.
Кроме того, смарт-контракты различаются по уровню приватности. Они могут быть либо полностью открытые, либо частично, либо полностью конфиденциальные. Последнее значит, что сторонние наблюдатели не видят условия смарт-контрактов. Однако тема приватности очень обширная и ее лучше рассмотреть отдельно от текущей статьи.
Ниже мы подробнее остановимся на первых трех критериях, чтобы внести больше ясности в понимание текущей темы.
Смарт-контракты по среде выполнения
По среде выполнения различают централизованные и децентрализованные платформы смарт-контрактов. В случае централизованных цифровых контрактов используется один сервис, где существует только один валидатор и может быть служба резервного копирования и восстановления, которая так же централизованно управляется. Есть одна база данных, которая хранит всю необходимую информацию для задания условий смарт-контракта и распределения той ценности, которая учитывается в этой самой базе данных сервиса. У такого централизованного сервиса есть клиент, который определенными запросами задает условия и пользуется такими контрактами. Из-за того, что платформа централизованная, механизмы аутентификации могут быть менее надежными, чем в криптовалютах.
В качестве примера можно взять провайдеров мобильной связи (разных мобильных операторов). Допустим, определенный оператор ведет на своих серверах централизованным образом учет трафика, который может передаваться в разных форматах, например: в виде голосовых звонков, передачи SMS, трафика мобильного интернета, и по разным стандартам, а также ведет учет средств на балансах пользователей. Соответственно, провайдер мобильной связи может составлять контракты по учету предоставляемых услуг и их оплате с разными условиями. В таком случае легко задаются условия по типу “отправь SMS с таким-то кодом на такой-то номер и получишь такие-то условия распределения трафика”.
Можно еще один пример привести: традиционные банки с расширенной функциональностью интернет-банкинга и такие очень простые контракты, как регулярные платежи, автоматическая конвертация входящих платежей, автоматическое отчисление процента на указанный счет и т. п.
Если речь идет о смарт-контрактах с децентрализованной средой выполнения, тогда мы имеем группу валидаторов. В идеальном случае валидатором может стать вообще кто угодно. За счет протокола синхронизации базы данных и достижения консенсуса мы имеем некоторую общую базу данных, которая будет хранить теперь уже все транзакции со строго описанными контрактами, а не какие-то условные запросы, форматы которых часто меняются, а открытой спецификации нет. Здесь транзакции будут содержать инструкции по выполнению контракта в соответствии со строгой спецификацией. Эта спецификация открыта и, следовательно, сами пользователи платформы могут проводить аудит и валидировать смарт-контракты. Здесь мы видим, что децентрализованные платформы превосходят централизованные по независимости и отказоустойчивости, но их проектирование и обслуживание при этом гораздо сложнее.
Смарт-контракты по способу задания и выполнения условий
Теперь разберем подробнее, как смарт-контракты могут отличаться по способу задания и выполнения условий. Здесь обратим внимание на смарт-контракты, которые программируются произвольно и полные по Тьюрингу. Полный по Тьюрингу смарт-контракт позволяет задавать практически любые алгоритмы в качестве условий выполнения контракта: прописывать циклы, какие-то функции расчета вероятностей и тому подобное — вплоть до своих собственных алгоритмов электронной подписи. В данном случае имеется в виду действительно произвольное написание логики.
Выделяют также произвольные смарт-контракты, но не полные по Тьюрингу. Сюда можно отнести Биткоин и Лайткоин со своим скриптом. Имеется в виду, что можно в произвольном порядке использовать только определенные операции, но уже нельзя написать циклы и собственные алгоритмы.
Кроме того, есть такие платформы смарт-контракта, которые реализуют заранее предустановленные смарт-контракты. К ним можно отнести Bitshares и Steemit. Bitshares имеет целый ряд смарт-контрактов для торговли, управления аккаунтами, управления самой платформой и ее параметрами. Steemit — похожая платформа, но она ориентирована уже не на выпуск токенов и торговлю, как Bitshares, а на ведение блогов, т. е. она хранит и обрабатывает контент децентрализованным образом.
К произвольным полным по Тьюрингу контрактам можно отнести платформу Ethereum и RootStock, которая еще находится на стадии разработки. Поэтому далее мы чуть детальнее остановимся на платформе смарт-контрактов Ethereum.
Смарт-контракты по способу инициации
По способу инициации смарт-контракты тоже можно разделить минимум на две группы: автоматизированные и ручные (не автоматизированные). Для автоматизированных характерно, что при всех известных параметрах и наступивших условиях, смарт-контракт полностью выполняется автоматически, то есть не требует отправки каких-то дополнительных транзакций и траты дополнительной комиссии при каждом следующем выполнении. Сама платформа имеет все данные, для того чтобы рассчитать, каким образом смарт-контракт завершится. Логика там не произвольная, а заранее заданная и все это предсказуемо. То есть заранее можно оценить сложность выполнения смарт-контракта, использовать какую-то константную комиссию для него и все процессы по его выполнению проходят более эффективным образом.
Для смарт-контрактов, которые программируются произвольным образом, выполнение не автоматизировано. Для инициирования такого смарт-контракта фактически на каждом шаге нужно создавать новую транзакцию, которая будет вызывать уже следующий этап выполнения или следующий метод смарт-контракта, оплачивать соответствующую комиссию и дожидаться подтверждения транзакции. Выполнение может завершиться успешно или нет, потому что код смарт-контракта произвольный и могут появляться какие-то непредсказуемые моменты, такие как вечный цикл, нехватка каких-то параметров и аргументов, необработанные исключительные моменты и т. п.
Аккаунты в Ethereum
Типы аккаунтов Ethereum
Рассмотрим, какие могут быть аккаунты на платформе Ethereum. Здесь существует только два типа аккаунтов и больше никаких вариантов нет. Первый тип называется аккаунт пользователя, второй — аккаунт контракта. Разберемся, чем же они отличаются.
Аккаунт пользователя управляется только личным ключом электронной подписи. Владелец аккаунта генерирует свою пару ключей для электронной подписи по алгоритму ECDSA (Elliptic Curve Digital Signature Algorithm). Изменять состояние этого аккаунта могут только подписанные этим ключом транзакции.
Для аккаунта смарт-контракта предусмотрена отдельная логика. Он может управляться только с помощью заранее заданного программного кода, который полностью определяет поведение смарт-контракта: как он будет распоряжаться своими монетами при определенных обстоятельствах, по инициативе какого пользователя и при каких дополнительных условиях эти монеты будут распространяться. Если некоторые моменты не предусмотрены разработчиками в программном коде, могут возникнуть проблемы. Например, смарт-контракт может получить какое-то определенное состояние, при котором он не принимает инициирование дальнейшего выполнения ни от одного из пользователей. В таком случае монеты фактически окажутся замороженными, потому что смарт-контракт не предусматривает выхода из этого состояния.
Как создаются аккаунты в Ethereum
В случае с аккаунтом пользователя, владелец самостоятельно генерирует пару ключей по ECDSA. Важно отметить, что Ethereum использует для электронной подписи точно такой же алгоритм и точно такую же эллиптическую кривую, как и Bitcoin, но адрес вычисляется несколько другим образом. Здесь уже не применяется результат двойного хеширования, как в Биткоине, а предусмотрено однократное хеширование функцией Keccak на длине 256 бит. От полученного значения отсекаются младшие биты, а именно 160 младших бит выходного значения хэш-функции. В итоге мы получаем адрес в Ethereum. Фактически он занимает 20 байт.
Обратим внимание, что идентификатор аккаунта в Ethereum кодируется в hex без применения контрольной суммы, в отличие от Bitcoin и многих других систем, где адрес кодируется в систему счисления по основанию 58 с добавлением контрольной суммы. Это значит, что работать с идентификаторами аккаунтов в Ethereum нужно осторожно: даже одна ошибка в идентификаторе гарантированно приведет к потере монет.
Есть важная особенность и она заключается в том, что аккаунт пользователя на уровне общей базы данных создается в тот момент, когда он принимает первый входящий платеж.
В отношении создания аккаунта смарт-контракта применяется совершенно другой подход. Изначально кто-то из пользователей пишет исходный код смарт-контракта, после чего код пропускается через специальный для платформы Ethereum компилятор, получая байт-код для собственной виртуальной машины Ethereum. Полученный байт-код помещается в специальное поле транзакции. Она заверяется от имени аккаунта инициатора. Далее, эта транзакция распространяется по сети и размещает код смарт-контракта. Комиссия за проведение транзакции и, соответственно, за выполнение контракта снимается с баланса аккаунта инициатора.
Каждый смарт-контракт обязательно содержит свой конструктор (этого контракта). Он может быть пустым, а может иметь содержимое. После того, как конструктор выполняется, создается идентификатор аккаунта смарт-контракта, используя который, можно отправлять монеты, вызывать определенные методы смарт-контракта и т. д.
Структура транзакции Ethereum
Чтобы было понятнее, мы приступим к рассмотрению структуры транзакции Ethereum и примера кода смарт-контракта.
Транзакция Ethereum состоит из нескольких полей. Первое из них nonce — это некоторый порядковый номер транзакции относительно самого аккаунта, который ее распространяет и является ее автором. Это нужно для того, чтобы отличать двойники транзакций, то есть исключить случай, когда одна и та же транзакция принимается дважды. Благодаря применению идентификатора каждая транзакция имеет уникальное хеш-значение.
Далее следует такое поле, как gas price. Здесь указывается цена, по которой базовая валюта Ethereum конвертируется в gas, которым оплачивается выполнение смарт-контракта и выделение ресурса виртуальной машины. Что это значит?
В Биткоине комиссии оплачиваются непосредственно базовой валютой — самим биткоином. Это возможно благодаря простому механизм их расчета: мы оплачиваем строго объем данных, который содержится в транзакции. В Ethereum ситуация сложнее, потому что от объема данных транзакции отталкиваться очень сложно. Здесь транзакция еще может содержать программный код, который будет запускаться на виртуальной машине, а каждая операция виртуальной машины может иметь разную сложность. Существуют также операции, которые выделяют память для переменных. Они будут иметь свою сложность, от которой будет зависеть оплата за каждую операцию.
Стоимость каждой операции в эквиваленте gas будет константной. Он и вводится специально для того, чтобы определить константную стоимость каждой операции. В зависимости от нагрузки на сеть будет изменятся gas price, то есть коэффициент, согласно которому базовая валюта будет конвертироваться в эту вспомогательную единицу для оплаты комиссии.
Есть еще одна особенность транзакции в Ethereum: байт-код, который она содержит для выполнения в виртуальной машине, будет выполняться до тех пор, пока он не завершится с каким-то результатом (успех-неуспех) либо пока не закончится некоторое количество монет, выделенное на оплату комиссии. Именно во избежание ситуации, когда с аккаунта отправителя в случае какой-то ошибки потратились все монеты на комиссию (например, какой-то вечный цикл запустился в виртуальной машине), существует следующее поле — start gas (его часто называют gas limit) — оно определяет максимальный объем монет, которые отправитель готов потратить на выполнение определенной транзакции.
Следующее поле называется destination address. Сюда вписывается адрес получателя монет либо адрес конкретного смарт-контракта, методы которого будут вызываться. После него следует поле value, куда вписывается сумма монет, которые отправляются на destination address.
Далее располагается интересное поле под названием data, куда вписывается целая структура. Это не отдельное поле, а целая структура, в которой определяется код для виртуальной машины. Сюда можно помещать произвольные данные — для этого существуют отдельные правила.
И последнее поле называется signature. Оно одновременно содержит в себе и электронную подпись автора этой транзакции, и публичный ключ, которым будет проверяться эта подпись. Из публичного ключа можно получить идентификатор аккаунта отправителя этой транзакции, то есть уникально идентифицировать аккаунт отправителя в самой системе. По структуре транзакции основное мы выяснили.
Пример кода смарт-контракта на Solidity
Давайте сейчас рассмотрим детальнее самый простой смарт-контракт на примере.
Выше приведен упрощенный исходный код, который может удерживать монеты пользователей и возвращать их по требованию.
Итак, есть смарт-контракт Bank, который выполняет следующие функции: он накапливает на своем балансе монеты, то есть при подтверждении транзакции и размещении такого смарт-контракта создается новый аккаунт, который может содержать на своем балансе монеты; он запоминает пользователей и распределение монет между ними; имеет несколько методов управления балансами, то есть имеется возможность пополнения, вывода и проверки баланса пользователя.
Давайте пройдемся по каждой строке исходного кода. В этом контракте есть константные поля. Одно из них, с типом address, называется owner. Здесь контракт запоминает адрес пользователя, создавшего этот смарт-контракт. Далее, есть динамическая структура, которая сохраняет в себе соответствия между адресами пользователей и балансами.
После этого следует метод Bank — он называется так же, как и контракт. Соответственно, это его конструктор. Здесь происходит присвоение переменной owner адреса того, кто разместил этот смарт-контракт в сети. Это единственное, что происходит в этом конструкторе. То есть msg в данном случае — это именно те данные, которые были переданы виртуальной машине вместе с транзакцией, содержащей весь код этого контракта. Соответственно, msg.sender — это автор данной транзакции, которая размещает этот код. Он и будет владельцем смарт-контракта.
Метод deposit позволяет передать транзакцией определенное количество монет на аккаунт контракта. В данном случае смарт-контракт, получая эти монеты, оставляет их у себя на балансе, но в структуру balances записывает, кто именно был отправителем этих монет, чтобы знать, кому они принадлежат.
Следующий метод называется withdraw и он принимает один параметр — ту сумму монет, которую кто-то хочет вывести из этого банка. Здесь идет проверка, достаточно ли монет на балансе пользователя, который вызывает этот метод, чтобы их отправить. Если их достаточно, тогда сам смарт-контракт возвращает вызывающему это количество монет.
Далее идет метод проверки текущего баланса пользователя. Тот, кто вызывает этот метод, будет использоваться для получения этого баланса в смарт-контракте. Стоит отметить, что модификатор этого метода — view. Это означает, что сам метод никак не меняет переменные своего класса и он фактически является только методом чтения. Отдельная транзакция не создается для вызова этого метода, комиссия не платится, а все вычисления выполняются локально, после чего пользователь получает результат.
Метод kill нужен для того, чтобы уничтожить состояние смарт-контракта. И тут прописана дополнительная проверка, является ли вызывающий этого метода владельцем этого контракта. Если является, тогда контракт самоуничтожается, а функция уничтожения принимает один параметр — идентификатор аккаунта, на который контракт отправит все монеты, оставшиеся на его балансе. В данном случае оставшиеся монеты автоматически уйдут на адрес владельца контракта.
Как работает полный узел сети Ethereum?
Рассмотрим схематично, как происходит выполнение таких смарт-контрактов на платформе Ethereum и как работает полный узел сети.
Полный узел сети Ethereum как минимум должен иметь четыре модуля.
Первым, как и для любого децентрализованного протокола, является P2P networking module — модуль сетевого соединения и работы с другими узлами, где идет обмен блоками, транзакциями, информацией о других узлах. Это традиционный компонент для всех децентрализованных криптовалют.
Далее, у нас есть модуль хранения данных блокчейна, обработки, выбора приоритетной ветки, дополнения блоков, отцепления блоков, проверки этих блоков и т. д.
Третий модуль называется EVM (Ethereum virtual machine) — это и есть виртуальная машина, которая принимает байт-код из Ethereum транзакции. Этот модуль принимает текущее состояние определенного аккаунта и выполняет изменения его состояния на базе полученного байт-кода. Версия виртуальной машины на каждом из узлов сети должна быть одинаковой. Вычисления происходят на каждом из узлов Ethereum абсолютно одинаковые, но они происходят в асинхронном порядке: кто-то раньше проверяет и принимает эту транзакцию, то есть выполняет весь содержащийся в ней код, а кто-то позже. Соответственно, при создании транзакции, она распространяется в сеть, узлы ее принимают и в момент верификации точно так же, как в Биткоине выполняется Bitcoin Script, здесь выполняется байт-код виртуальной машины.
Транзакция считается проверенной, если весь содержащийся в ней код был выполнен, было сгенерировано новое состояние определенного аккаунта и сохранено до тех пор, пока не будет понятно, применена эта транзакция либо нет. Если транзакция применена, тогда это состояние считается не только выполненным, но уже и актуальным. Есть база данных, которая хранит состояние каждого аккаунта для каждого узла сети. За счет того, что все вычисления происходят одинаково и состояние блокчейна одинаковое, то и база данных, содержащая состояния всех аккаунтов, тоже будет одинаковой для каждого узла.
Мифы и ограничения смарт-контрактов
Что касается ограничений, которые существуют для похожих на Ethereum платформ смарт-контрактов, то можно привести следующие:
Далее, виртуальная машина может читать данные из базы данных блокчейна, для того чтобы использовать эти данные в качестве триггера для выполнения той или иной логики смарт-контрактов. Виртуальная машина может создавать и отправлять транзакции, она может создавать новые контракты и вызывать методы других смарт-контрактов, которые уже опубликованы в сети: существуют, доступные и т. д.
Наиболее распространенный миф заключается в том, что смарт-контракты Ethereum могут использовать информацию из любых интернет-ресурсов в своих условиях. Правда состоит в том, что виртуальная машина не может отправить сетевой запрос какому-то внешнему информационному ресурсу в интернете, то есть нельзя написать такой смарт-контракт, который будет распределять ценность между пользователями в зависимости от того, допустим, какая погода на улице, либо кто выиграл в каком-то чемпионате, либо на основании того, какое еще происшествие случилось во внешнем мире, потому что информации об этих происшествиях просто нет в базе данных самой платформы. То есть в блокчейне ничего по этому поводу нет. Если оно там не появится, то и виртуальная машина не может использовать эти данные в качестве триггеров.
Недостатки Ethereum
Давайте перечислим основные из них. Первый недостаток состоит в том, что существуют некоторые сложности при проектировании, разработке и тестировании смарт-контрактов в Ethereum (в Ethereum для написания смарт-контрактов используется язык Solidity). Действительно, практика показывает, что очень большой процент среди всех ошибок принадлежит человеческому фактору. Это фактически актуально и для уже написанных смарт-контрактов Ethereum, которые имеют сложность среднюю либо выше. Если для простых смарт-контрактов вероятность ошибки мала, то в сложных смарт-контрактах очень часто встречаются ошибки, которые приводят к хищению средств, к их заморозке, к уничтожению смарт-контрактов непредвиденным образом и т. п. Уже много таких случаев известно.
Второй недостаток заключается в том, что сама виртуальная машина не идеальна, так как она тоже написана людьми. Она может выполнять произвольные команды и в этом кроется уязвимость: можно определенным образом сконфигурировать ряд команд, которые приведут к непредвиденным заранее последствиям. Это очень сложная сфера, но существует уже несколько исследований, которые показывают, что эти уязвимости есть в текущей версии сети Ethereum и они могут привести к отказу работы многих смарт-контрактов.
Еще одна большая сложность, ее можно считать недостатком. Она заключается в том, что можно практическим либо техническим образом прийти к тому, что если скомпилировать байт-код контракта, который будет выполняться на виртуальной машине, можно определить некоторый специфический порядок операций. При выполнении в совокупности эти операции очень сильно нагрузят виртуальную машину и замедлят ее непропорционально той комиссии, которая была оплачена за выполнение этих операций.
В прошлом был уже такой период развития Ethereum, когда много ребят, которые разбирались детально в работе виртуальной машины, находили такие уязвимости. Фактически транзакции платили очень маленькую комиссию, но практически очень замедляли работу всей сети. Эти проблемы решаются очень сложно, так как нужно их, во-первых, детерминировать, во-вторых, скорректировать цену за выполнение этих операций и, в-третьих, провести хардфорк, что означает обновление всех узлов сети на новую версию программного обеспечения, а затем одновременную активировацию этих изменений.
Что касается Ethereum, то было проведено очень много исследований, получен очень большой практический опыт: как положительный, так и отрицательный, но тем не менее остаются сложности и уязвимости, с которыми предстоит еще как-то бороться.
Итак, тематическая часть статьи завершена, перейдем к вопросам, которые возникают достаточно часто.
Часто задаваемые вопросы
— Если все стороны действующего смарт-контракта хотят изменить условия, могут ли они отменить этот смарт-контракт с помощью мультиподписи, а потом создать новый смарт-контракт с обновленными условиями его выполнения?
Тут ответ будет двоякий. Почему? Потому что с одной стороны смарт-контракт единожды задается и он уже не подразумевает никаких изменений, а с другой стороны он может иметь заранее прописанную логику, которая предусматривает полное или частичное изменение каких-то условий. То есть если вы хотите что-то поменять в своем смарт-контракте, то вы заранее должны прописать условия, по которым вы можете обновить эти условия. Соответственно, только таким предусмотрительным образом можно организовать обновление контракта. Но и здесь тоже можно напороться на неприятности: допустить какую-то ошибку и получить соответствующую уязвимость. Поэтому такие вещи нужно очень детально и тщательно проектировать и тестировать.
— А если медиатор войдет в сговор с одной из сторон-участников: escrow или смарт-контракта? Обязателен ли медиатор в смарт-контракте?
Медиатор не обязателен в смарт-контракте. Его может не быть. Если в случае escrow медиатор войдет в сговор с одной из сторон, то да, эта схема тогда резко теряет всю свою ценность. Поэтому медиаторы и выбираются таким образом, что им доверяют одновременно все стороны, вовлеченные в этот процесс. Соответственно, вы просто не будете переводить монеты на multisignature адрес с тем медиатором, которому не доверяете.
— Можно ли одной транзакцией Ethereum перевести много разных токенов со своего адреса на разные целевые адреса, например биржевые адреса, где торгуются эти токены?
Это хороший вопрос и он касается модели транзакций Ethereum и ее отличия от модели Bitcoin. И отличие это кардинально. Если в модели транзакции Ethereum вы просто переводите монеты, то они переводятся только с одного адреса на другой, без сдачи, просто конкретная сумма, которую вы указали. Иначе говоря, это не модель непотраченных выходов (UTXO), а модель именно аккаунтов и соответствующих балансов. Одной транзакцией отправить сразу несколько разных токенов теоретически можно, если написать хитрый смарт-контракт, но все равно придется сделать много транзакций, создать контракт, потом передать ему токены и монеты, а потом вызвать соответствующий метод. Это требует усилий и времени, соответственно, на практике это так не работает и все платежи в Ethereum совершаются отдельными транзакциями.
— Один из мифов о платформе Ethereum состоит в том, что невозможно описать такие условия, которые будут зависеть от данных внешнего интернет-ресурса, как же быть тогда?
Решение состоит в том, что сам смарт-контракт может предусматривать одного или нескольких так называемых доверенных оракулов, которые собирают данные о состоянии вещей во внешнем мире и передают их в смарт-контракты через специальные методы. Сам контракт считает правдой те данные, которые он получил от доверенных сторон. Для большей надежности просто выбирают большую группу оракулов и минимизируют риск их сговора. Сам контракт может не учитывать данные от оракулов, которые противоречат большинству.
Данной теме посвящена одна из лекций онлайн-курса по Blockchain — “Введение в смарт-контракты”.