Распределённое исполнение

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

Для каждого метода в смарт-контракте указывается необходимое количество экземпляров для его параллельного исполнения на разных юбот-серверах. Количество может быть указано абсолютным (15 юботов) или относительным (20% сети). Если текущее состояние сети не позволяет исполнить метод, он не будет запущен.

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

Выбранные юбот-сервера (инстансы) запускают указанный контракт, стараясь сделать это одновременно. Каждый инстанс формирует результат (возможно, пустой) и, опционально, изменяют глобальный стейт контракта. При этом происходит проверка на совпадение результатов и изменений в глобальный стейт. Этот факт проверяется и утверждается сетью Universa; если итоги исполнения не совпали – фиксируется ошибка, и стейт контракта не изменяется.

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

Представим себе ситуацию, что имеется брокерский скрипт, который должен продать или обменять существенное количество криптовалюты при каком-то состоянии ее курса. Скрипт считывает курс с какого-то внешнего сервиса. Злоумышленник, перехватив контроль над одним из инстансов, подделывает этот курс, перехватывая обращение к сервису на уровне исполняющей системы, имитируя запрос в сеть и ответ. Или даже подделывает сертификат сервиса курса, что вполне возможно в любой стране, которая имеет возможность управлять CA (США, Китай, и многие другие, как мы имеем основания полагать). В этом случае можно спровоцировать вполне валидный смартконтракт на ошибочные действия, потенциально приводящие к большим убыткам.

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

В разделе «распределённое доверие» есть более подробное описание того, как консенсус исполнения юботов используется для заверения транзакций.

Параллельные вычисления

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

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