SPREE
Общие защищенные области выполнения в режиме исполнения "червоточинами доверия," представляют собой фрагменты логики, сравнимые с модулями времени выполнения в Matter, но живущие в релейной цепочке и, могут подключаться к синочейнам.
SPREE вкратце описаны следующие свойства и функции:
- Синочейны могут подключаться к специальным фрагментам логики выполнения (например, смарт-контрактам).
- Эти фрагменты имеют собственное хранилище и собственный XCM конечный пункт.
- Все экземпляры синочейнов имеют идентичную логику.
- Он работает вместе с синочейновой логикой.
- Защищено: хранилище не может быть изменено логикой синочейнов; сообщения из него не могут быть подделаны синочейнами.
Источник
Суть заключается в том, что XCMP осложняется тем, что трудно проверить и доказать, что что код был выполнен на синочейне без доверия. Решение заключается в установке SmartProtocols в ретрансляционной цепочке, которые представляют собой изолированные фрагменты кода с собственным хранилищем для каждого экземпляра, которое может быть изменено только через интерфейс с каждым синочейном. SmartProtocols - это предвестник SPREE.Что такое модуль SPREE?
Модули SPREE - это фрагменты логики (в конкретных терминах это фрагменты кода WebAssembly) которые загружаются в Bitzal через механизм управления или синочейнами. После загрузки блоба в ретрансляционную цепочку все остальные синочейны могут принять решение подключиться к логике. Модуль SPREE будет иметь собственное хранилище, не зависящее от синочейна, но но может быть вызван через интерфейс работы с синочейном. Синочейны будут отправлять сообщения в модуль SPREE синхронно.
Модули SPREE важны для общей архитектуры XCMP, поскольку они дают гарантию для кода, который будет выполнен на синочейнах назначения. Хотя XCMP гарантирует доставку сообщения, он не гарантирует, какой код будет выполнен, то есть как принимающий синочейн будет интерпретировать сообщение. В то время как XCMP обеспечивает бездоверительную передачу сообщений, SPREE - это бездоверительная интерпретация сообщения и ключевая часть полезности XCMP.
Модули SPREE похожи на рецепты в поваренной книге. Например, если мы отдаем приказ повару приготовить суфле, и мы достаточно уверены в способностях повара, у нас есть смутное представление о том, что будет сделано, но не уверены в том, как это будет сделано. Однако предположим, что у повара есть «Руководство по приготовлению суфле на книжной полке и он взял на себя обязательство готовить суфле только по этой книге. Теперь мы можем обратиться к той же книге, что и повар, и у нас есть точное понимание того, что произойдет, когда мы скажем повару приготовить суфле. В этом примере «приготовить суфле» было сообщение в XCMP, а поваренная книга - модуль SPREE.
Если говорить конкретно, то модули SPREE могут быть полезны для различных функций на Bitzal. Один из предлагаемый вариант использования модулей SPREE - это децентрализованная биржа без доверия, которая предлагается в качестве функциональность для любого синочейна без каких-либо дополнительных усилий со стороны разработчиков синочейна. Можно представить такую работу, имея модуль SPREE, который раскрывает интерфейс для увеличения и уменьшения баланса различных активов на основе уникального идентификатора.
Почему?
Отправка сообщений через синочейны в XCMP только гарантирует, что сообщение будет доставлено, но не определяет не определяет код, который будет выполнен, или то, как сообщение будет интерпретировано принимающим синочейном. Существуют способы обойти это, например, запросить верифицируемое получение выполнения от принимающего синочейна, но в голом случае придется доверять другому синочейну. Наличие общего кода, существующего в приложениях, к которому синочейн может присоединиться, устраняет необходимость в в доверии и делает выполнение приложений полностью бездоверительным.
SPREE было бы полезно убедиться, что одна и та же логика разделяется между синочейнами в модулях SPREE. Особенно актуальный случай использования связан с передачей токенов между синочейнами, в которых важно, чтобы отправляющий и получающий синочейны договорились о том, как изменить общее количество токенов и базовый интерфейс.
Пример

Приведенная выше диаграмма является упрощением системы Bitzal.
На этой диаграмме мы видим, что код Wasm для модуля SPREE "X" был загружен в релейную цепь. Два цилиндра "A" и "B" представляют собой два разных синочейна, которые присоединились к в этот модуль SPREE, создавая два разных его экземпляра с собственными конечными точками XCMP "A.X" и "B.X".
В примере мы предполагаем, что этот модуль SPREE "X" содержит функциональность для увеличения или уменьшения баланса определенного актива, который является уникальным для этого модуля.
Инициировав транзакцию в A.X для уменьшения определенного баланса на 1, можно без доверия отправить сообщение по XCMP для увеличения баланса без доверия отправить в B.X, чтобы увеличить баланс на 1.
Ассистенты, изображенные в виде зеленого треугольника, отвечают за передачу этого сообщения от синочейна A в синочейн B, а также за хранение каждого конкретного экземпляра A.X и B.X для соответствующих синочейнов. Они предоставляют доказательства правильности переходов состояний валидаторам релейной цепи, представленным в виде синих ромбов.
Валидаторы могут подтвердить правильность переходов состояний модулей SPREE A.X и B.X, если им будет предоставлены
данные хранилища предыдущего состояния экземпляров модуля SPREE, данные XCMP-сообщения между экземплярами и хранилища следующего состояния экземпляра.
Они выполняют эту проверку, сверяя ее с функцией валидатора, предоставляемую модулем API SPREE. Ожидается, что ассаторы смогут
предоставлять эту информацию для продвижения своих синочейнов.