Но не во всех областях смарт-контракты будут работать так успешно. Рассмотрим, например, трудовой контракт: А соглашается выполнить определенную работу для B в обмен на X единиц валюты C. Платежную часть сделки несложно реализовать в виде смарт-контракта. А вот с подтверждением того, что работа действительно выполнена, все не так просто. Если она связана с физическим миром, смарт-контракт тут совершенно бесполезен, ведь у блокчейна нет никакого доступа к внешнему миру. Даже если речь идет о создании сайта, оценить его качество будет очень сложно, и, хотя в некоторых случаях программы могут эффективно использовать алгоритмы машинного обучения для оценки подобных характеристик, невероятно трудно заключить такой контракт, в котором работник не сможет найти лазейки. Одних лишь алгоритмов для управления обществом недостаточно.
К счастью, есть решение, которое позволяет взять лучшее из обоих этих миров: арбитраж. В обычной судебной системе судья обладает почти неограниченной властью делать все, что сочтет нужным, и сам судебный процесс – не самая оптимизированная штука: человек должен подать иск, дождаться начала процесса, после чего судья наконец вынесет вердикт согласно существующим законам. Не слишком быстро и эффективно. Третейский суд часто оказывается дешевле и быстрее, но и он не лишен тех же проблем. В свою очередь, арбитраж фактического мира устроен совсем иначе. Трудовой смарт-контракт может выглядеть следующим образом:
if says(B,“A did the job”) or says(J,“A did the job”):
send(200, A)
else if says(A,“A did not do the job”) or says(J,“A did not do the job”):
send(200, B)
says – это алгоритм проверки подписи; функция says(P,T) проверяет, не отправил ли кто-либо сообщение с текстом T и цифровой подписью, которая подтверждает использование публичного ключа P. Как же работает этот контракт? Сначала работодатель должен отправить на контракт 200 единиц валюты, где они будут храниться на эскроу-счете. В большинстве случаев наниматель и работник ведут себя по отношению друг к другу честно. Поэтому либо А не станет завершать работу и вернет В оплату, подписав сообщение с текстом «А не выполнил работу», либо В подтвердит, что А завершил работу, и контракт отправит деньги А. Но если А сделает работу, а В с этим не согласится, в дело вступит арбитр J, который решит, сделана работа или нет.
Обратите внимание, что полномочия J определены очень четко: он вправе лишь сказать, выполнил А работу или нет. В более сложном контракте арбитру можно предоставить право оценивать результат по определенной шкале. J не имеет права, например, решить, что А на самом деле заслуживает 600 денежных единиц – или что контракт вообще незаконен и 200 единиц должен забрать J. Полномочия арбитра реализуются по факту – контракт содержит его публичный ключ, и поэтому оговоренная сумма отправится либо к А, либо к В на основании указанных условий. Контракт может даже потребовать сообщений от хотя бы двух из трех арбитров или предусматривать разных арбитров для оценки разных аспектов работы, чтобы затем автоматически определить качество ее выполнения. В любой контракт можно включить любого арбитра с любым запросом: подтвердить истинность или ложность конкретного факта, измерить некоторую переменную или участвовать в урегулировании спорных ситуаций.
Чем такая система лучше той, к которой мы привыкли? Если коротко, она предлагает нам «арбитраж как услугу». Сегодня, чтобы стать «арбитром», вам нужно получить должность в частной арбитражной компании или в государственном суде. Но благодаря криптографии возможна фактическая правовая система, где арбитром может стать любой обладатель открытого ключа и компьютера с доступом к интернету. Как бы странно это ни звучало, арбитрам не обязательно разбираться в законах. Например, некоторые арбитры могут специализироваться на вопросах логистики и определять, корректно ли был доставлен продукт (в идеале этим должны заняться почтовые службы).
Другие судьи могут верифицировать выполнение трудовых контрактов. Третьи – оценивать ущерб для страховых договоров. Авторы контрактов сами будут решать, какую часть договора лучше предоставить на суд арбитра, а с чем справится программный код.
Вот и все, о чем я хотел сегодня рассказать.