О смарт-контрактах попроще
Смарт-контракты. Что это такое за модное словечко в блокчейне?
Когда я был на митапе для юристов, очень многие в разных видах задавали вопрос "а вот ваш смарт-контракт, какая у него юридическая сила?". Хреновый это термин - смарт-контракт, вот что. Путает людей, ибо сразу сдвигает рассмотрение в какую-то правовую область, которой там и не пахнет. Так что давайте разберемся кратенько.
Если вы читали whitepaper по Bitcoin-у - то помните:
- в блокчейне биткоина хранятся блоки
- в блоках хранятся пачки транзакций
- каждая транзакция представляет собой адрес источника, адрес получателя и данные (например сумму перевода) плюс подпись
- пачки транзакций, которые попадают в блоки определятся консенсусом - т.е. тысячи майнеров и клиентов на своих машинах перепроверяют достаточно ли монет на счету источника, правильна ли его подпись, действительно ли тысячи майнеров достаточно долго "готовили" этот блок - если все верно, цепочка считается валидной
Ну так вот - некоторый набор транзакций в блоке можно рассматривать как состояние оперативной памяти некоторой программы. Перед запуском некоторой программы(смарт-контракта) память имеет одно состояние, после того как она отработала - другое. Если представить, что между адресами перемещаюся не монеты, а значения переменных, то можно представить себе и код, который исполняется на всех клиентах и целостно переводит одно состояние данных (к примеру X монет, распределенных между N адресами) в другое (X монет распределеннных другим способом между M адресами). Или, другими словами, представьте себе программу, которая работает только с адресами и деньгами на этих адресах, а результатом ее работы являются также адреса и деньги на них - тогда пачка транзакций отлично подходит для хранения "памяти" такой программы.
Таким образом получается вот что - майнеры "проигрывают" код смарт-контракта у себя на машинах, получают новое состояние (фактически, перераспределяют монеты), и договариваются с помощью консенсуса о получившемся реультате. Если еще ближе к программистам, то это что то типа исполнения кода с записью в блокчейн результатов трассировки, причем трассировка проводится множеством узлов, и результаты коммитятся в блокчейн по достижении консенсуса.
Ну к примеру - контракт для патологических мотов, на который можно положить деньги, которые вернутся строго через год. Это контракт (имеющий, кстати, собственный адрес-счет), который:
- принимая транзакцию переводит деньги от мота на свой счет
- проверяет не наступило ли "через год"
- если наступило, переводит деньги обратно на счет мота
Т.е теперь майнеры увидев код этого контракта, выполнят его, если ничего делать не надо, то состояние счета мота не изменится и никаких транзакицй выполнять не нужно. Но как только пройдет год, майнер выполнит код контракта, и получит транзакцию, возвращающую деньги на счет мота - и запишет ее в блокчейн.
Очень важный момент такого децентрализованного исполнения кода - защита от DoS и неконтролируемого перевода монет. Чтобы не появлялись контракты, которые в бесконечных циклах выгребают деньги со счетов или DoS-ят клиентов каждая инструкция контракта стоит немного специальной сущности - газа (у которого есть цена в валюте сети). Поэтому исполнение контракта стоит денег, которые уходят тем, кто их исполняет и закрывает блоки - т.е. майнерам.
Большая проблема смарт-контрактов - контакты с внешним миром. Например контракт, который принимает от Васи и Пети ставки на исход матча, а потом на основании результата переводит деньги либо Васе, либо Пете. Ответ на вопрос "выиграл ли Спартак у ЦСКА 25 мая 2017 года" и является проблемой - ведь данные можно подменить, поэтому в блокчейне появился термин "оракул" - это механизм ответа на вопросы о фактах реального мира. Оракулы также могут быть частью того же блокчейна, и ответы на нужные вопросы создавать также с помощью консенсуса, а могут быть и внешними, тогда вопрос доверия к ним стоит особенно остро. В общем всё очень, и очень непросто.
Тонкостей в смарт-контрактах огромное количество, начиная от безопасности кода самих контрактов, оракулов, и заканчивая общими экономическими проблемами типа стоимости газа (который может быть привязан к основной крипте сети, а может и нет). Но при всех этих сложностях именно смарт-контракты являются смертью современного финтеха - банкинга, страхования, букмекерства. Легко программировать алгоритмы типа "пусть Вася платит каждый месяц по 1 монете (иначе контракт закрывается, возвращая все деньги кроме комиссий), а если разобъет машину(оракул) - получает страховую премию (которую страховая компания кладет прямо в контракт, где она и блокируется)". Остальные кейзы, типа депозитов, игры на предсказание, страхование тоже делаются довольно легко. И напомню, что никакой централизации тут нет, все делается силами сети, в которой никто никому не доверяет.
Как то так выглядит Etherium. Если хотите подробностей - welcome, вот одна из лучших whitepapers по блокчейну:
https://github.com/ethereum/wiki/wiki/White-Paper
а вот yellow paper - если интересны алгоритмы и техническая архитектура:
https://ethereum.github.io/yellowpaper/paper.pdf
Сейчас пилятся множество проектов, в том или ином виде реализующие движки для смарт-контрактов, фактически это будущие платформы для множества конкретных применений во всех областях. Так что есть смысл почитать