Гибридные смарт-контракты объединяют код, запущенный на блокчейн (on-chain) с данными и вычислениями за пределами блокчейн (off-chain), предоставляемыми децентрализованными сетями оракулов. Гибридные смарт-контракты позволяют использовать передовые формы экономической и социальной кооперации, которые обладают свойствами блокчейн, обеспечивающими защиту от взлома и неизменяемость, но при этом используют безопасные off-chain сервисы оракулов для достижения новых возможностей, таких как масштабируемость, конфиденциальность, справедливость порядка транзакций и связь с любым реальным источником внешних данных или внешней системой.
В статье мы определим роль, которую играют гибридные смарт-контракты в развивающихся моделях доверия на основе блокчейна, и продемонстрируем множество децентрализованных сервисов, которые предоставляют оракулы для расширения их возможностей. Затем мы объясним, как это в конечном итоге открывает новое поколение гибридных приложений на основе блокчейна, которые обладают всеми свойствами, необходимыми в будущем для улучшения способов сотрудничества в обществе практически во всех основных отраслях.
Как блокчейн оракулы расширяют возможности взаимодействия на основе блокчейн
По своей сути блокчейн — это вычислительная инфраструктура, созданная для облегчения одной ключевой функции: высоконадежного взаимного сотрудничества. Доверие — это то, что дает участникам твердую уверенность в надежности, истинности, достоверности, возможности или силе сотрудничества. Наиболее распространенным способом установления доверия в процессе совместной работы является договор, в котором определены юридические и деловые обязательства каждого участника и наказания/вознаграждения за их действия. К сожалению, механизм принудительного исполнения договорных обязательств сегодня далек от совершенства, особенно когда один из участников имеет асимметричное преимущество, например, несправедливое влияние на инфраструктуру обеспечения исполнения, более четкое понимание мелкого шрифта или время и капитал для затягивания арбитражного процесса. Это привело к созданию контрактной системы, в которой вера в бренд контрагента становится центральным фактором для определения его благонадежности.
Блокчейн — это технология, способствующая сотрудничеству, которая заменяет доверие на основе бренда доверием на основе математики, перенося механизмы размещения, исполнения, принудительного исполнения и хранения контракта на программную логику, работающую в децентрализованной сети, которую не может взломать ни один участник. Подобно компьютеру без Интернета, блокчейн заслуживает высокого доверия, поскольку это закрытая сеть, намеренно ограниченная для поддержки очень небольшого, заранее определенного диапазона типов операций, которые легко обеспечить, например, передачу токенов между адресами в реестре. Хотя такая изоляция и узкий спектр функциональности создают гарантии защиты от взлома и детерминированности, которые делают блокчейн ценным, они также запрещают поддержку любого типа операций требующих данных, вычислений или функций, не присущих конкретному блокчейну.
Желание расширить виды операций, возможные на блокчейне, привело к появлению оракулов, а затем и гибридных смарт-контрактов. Оракулы обеспечивают блокчейн безопасными шлюзами во внешний мир, чтобы приложения смарт-контрактов могли проверять внешние события, запускать действия на внешних системах и использовать вычисления, которые невозможно или нецелесообразно выполнять на блокчейне.
Сервисы вне блокчейн, предлагаемые децентрализованными сетями оракулов (Decentralized Oracle Networks — DONs), значительно расширяют типы операций на блокчейн, которые могут поддерживать смарт-контракты. Это уже хорошо видно на примере быстрого роста децентрализованных финансов (DeFi), который ускорился после того, как децентрализованные сети оракулов сделали внешние данные финансовых рынков доступными на блокчейн, поддерживая такие гибридные протоколы смарт-контрактов, как финансовые услуги Aave, платформа деривативов Synthetix, рынки левереджной торговли dYdX, алгоритмический стейблкоин Ampleforth и многое другое.
Состав гибридных смарт-контрактов
Гибридный смарт-контракт — это приложение, состоящее из двух частей:
Смарт-контракт — код, который работает исключительно на блокчейне
Децентрализованная сеть(и) оракулов — безопасные сервисы вне блокчейн, поддерживающие смарт-контракт.
Эти два компонента беспрепятственно и безопасно взаимодействуют друг с другом, образуя единое гибридное приложение смарт-контракта. В результате код на блокчейне дополняется множеством уникальных и важных способов, открывая множество новых вариантов использования, которые были бы невозможны только с помощью кода на блокчейн из-за технических, юридических или финансовых ограничений.
Гибридные смарт-контракты синхронизируют две различные вычислительные среды для создания уникального приложения, чего не смогли бы добиться ни блокчейн, ни сеть оракулов в одиночку, особенно потому, что каждая среда специализируется на предоставлении функций, которых нет у другой. Код на блокчейн работает в чрезвычайно безопасной и ограниченно функциональной среде блокчейна с уменьшенной вероятностью способов атаки, обеспечивая пользователям высокую степень детерминизма выполнения и хранения — код будет выполняться точно так, как он написан, а результаты будут храниться постоянно и неизменно. И наоборот, DON работают вне блокчейн и, таким образом, предлагают бесконечно большую гибкость, функциональность и доступность данных.
Важно отметить, что DON по-прежнему обеспечивают очень высокий уровень устойчивости к взлому и надежности, соответствующий гарантиям, предоставляемым смарт-контрактом, но они делают это в изолированной среде вне блокчейн с использованием множества различных подходов к безопасности. Каждый DON предоставляет индивидуальный децентрализованный сервис для конкретного приложения, что означает, что другие смарт-контракты на том же блокчейне не привязаны к производительности этого DON и не подвергают риску лежащий в основе блокчейна механизм консенсуса, обеспечивающий безопасность всех смарт-контрактов. Как самостоятельные сервисы, DON не только выгодны с точки зрения безопасности, но и обеспечивают гибкость, необходимую для проверки и вычислений в бесконечно более сложном и открытом мире вне блокчейн сетей.
Например, один смарт-контракт может использовать DON для своих конкретных потребностей во внешних данных, только если он высоко децентрализован и подкреплен существенной криптоэкономической гарантией, в то время как другой смарт-контракт может предпочесть DON с более конкретным набором узлов с высокой репутацией, которые используют передовые криптографические методы для выполнения частных верифицируемых вычислений. В такой гетерогенной сетевой архитектуре тысячи и миллионы DON могут работать параллельно без перекрестных зависимостей для предоставления специально созданных децентрализованных услуг конкретным приложениям, хотя некоторые пользователи могут разделять затраты на одну и ту же услугу DON (например, многочисленные протоколы DeFi в настоящее время используют и спонсируют оракулы канала ценовых данных ETH/USD). Эта структура важна для одновременного обслуживания потребностей всех блокчейнов и приложений, например, приложения, работающие на высокоскоростном блокчейне, нуждаются во внешних данных и конфиденциальности, в то время как приложения на высокодецентрализованном блокчейне также нуждаются в масштабируемых вычислениях.
Как гибридные смарт-контракты объединяют вычисления на блокчейн и вне блокчейн
Чтобы лучше понять разницу между компонентами “ on-chain” и “off-chain”, давайте определим различные роли каждого из них:
On-chain: Блокчейн
Ведение постоянного реестра, который обеспечивает авторитетное хранение активов пользователей и взаимодействует с закрытыми ключами
Осуществление окончательного расчета путем обработки необратимых транзакций между пользователями
Разрешение споров и защитные механизмы для обеспечения надлежащего функционирования услуг вне блокчейн, предоставляемых DON
Off-chain: Децентрализованная сеть оракулов
Получение, проверка, защита и доставка данных из внешних API в смарт-контракты, работающие на блокчейне и решениях второго уровня L2
Выполнение различных типов вычислений для смарт-контрактов, работающих на блокчейне и решениях второго уровня L2
Про L2 мы писали тут: Что такое решения второго уровня (Layer 2) для блокчейн?
Децентрализованные сервисы оракулов, обеспечивающие работу гибридных смарт-контрактов
После определения гибридных смарт-контрактов давайте изучим множество децентрализованных сервисов, доступных через DONs, которые могут значительно улучшить смарт-контракт. Децентрализованные сервисы будут разделены на две большие категории: данные вне блокчейн и вычисления вне блокчейн.
Данные вне блокчейн (off-chain)
Децентрализованные сети оракулов могут использоваться для передачи различных типов внешних данных в блокчейн и из него, что позволяет создавать гибридные смарт-контракты на основе этих конкретных фрагментов данных. Некоторые из первоначальных типов данных, доступных для использования, включают:
Price Feeds — ценовые каналы — данные о ценах активов, собранные с сотен бирж, взвешенные по объему и очищенные от отклонений и фиктивных торгов
Proof of Reserve — актуальные данные о текущих резервных балансах, обеспечивающих токенизированные активы, например, резервы BTC, обеспечивающие WBTC или банковский счет в долларах США, обеспечивающий TUSD
Any API — премиальные данные из защищенных API, начиная от прогнозов погоды и результатов спортивных матчей и заканчивая информацией из бэкенда предприятия и сети IoT
Blockchain Middleware — уровень абстракции для внешней системы вне блокчейн для чтения и записи данных в смарт-контракты и из смарт-контрактов в любой сети блокчейн
Вычисления вне блокчейн
DON могут выполнять различные вычисления за пределами блокчейн от имени смарт-контракта, чтобы помочь ему достичь определенных входных данных или создать определенные функции, недоступные на конкретном блокчейне, такие как конфиденциальность, масштабируемость и справедливость порядка транзакций. Некоторые из существующих и планируемых для реализации вне блокчейн вычислений, которые могут выполняться с помощью DON, включают:
Keeper Network — автоматизированные боты, которые выполняют регулярные задачи по обслуживанию смарт-контракта, пробуждая его, когда ему необходимо выполнить ключевые функции в блокчейн
Off-Chain Reporting (OCR) — масштабируемая агрегация ответов узлов оракула в DON, которая затем доставляется в блокчейн в единой транзакции для снижения затрат на выполнение операции в блокчейне
Масштабируемые вычисления (Scalable Computation) — высокопроизводительное и недорогое выполнение кода контрактов для автономных смарт-контрактов, которое периодически синхронизируется на блокчейне с использованием технологии второго уровня L2
Verifiable Randomness Function (VRF) — безопасная и проверяемая генерация случайных чисел, подкрепленная криптографическими доказательствами, подтверждающими целостность процесса
Конфиденциальность данных и вычислений — сохраняющие конфиденциальность вычисления на оракулах, которые делают конфиденциальные данные доступными для смарт-контрактов, используя доказательства нулевого разглашения (DECO), доверенное оборудование (Town Crier), безопасные многосторонние вычисления и/или используя избранные группы узлов DON
Fair Sequencing Services (FSS) — децентрализованное упорядочивание транзакций на основе заранее определенного понятия справедливости, предотвращающее опережение и извлечение майнерами стоимости (MEV — miner extractable value)
On-Chain Contract Privacy — конфиденциальность транзакций для смарт-контракта через декорреляцию между логикой контракта и результатом расчетов, используя DON для ретрансляции связи между этими двумя частями, как в случае с Mixicles
CCIP (Cross-Chain Interoperability Protocol) — протокол кросс-чейн совместимости, позволяющий работать со смарт-контрактами на разных блокчейнах
Что гибридные смарт-контракты означают для глобальных отраслей
DONs позволяют использовать передовую гибридную структуру смарт-контрактов, которая обеспечивает бесшовную, безопасную и универсальную автоматизацию между любыми независимыми субъектами, работающими в разрозненных системах и блокчейнах. Оракулы помогают разработчикам преодолеть существующие технические ограничения смарт-контрактов, позволяя им использовать детерминированные гарантии исполнения технологии блокчейн и одновременно надежно передавая DON-ам такие ключевые функции, как внешние источники данных, конфиденциальность, масштабируемость и справедливость порядка транзакций. Гибридные смарт-контракты не только открывают возможность более надежного и эффективного сотрудничества между различными участниками сети, но и предлагают способ подключения существующей инфраструктуры к сетям блокчейн с минимальными изменениями бэкенда.
DON открывают доступ к большому количеству приложений смарт-контрактов, требующих либо конфиденциальности, либо масштабируемости, включая большинство корпоративных приложений, а также многие игровые и финансовые приложения, требующие высокой пропускной способности и принятия решений в режиме реального времени. Гибридные смарт-контракты также порождают новые, невиданные ранее сценарии использования, например, использование проверяемой случайности и децентрализованного упорядочивания транзакций для создания нового прецедента математической экономической справедливости и прозрачности в социальных системах.
Некоторые из основных отраслей, которые уже затронуты или вскоре будут затронуты гибридными смарт-контрактами, включают:
Идентификация — информация о личности, которая может быть проверена в автоматическом режиме и с сохранением конфиденциальности. Смарт-контракты могут определять требуемую личную информацию и действия, предпринимаемые при ее получении, а DON могут выполнять вычисления, проверяющие личную информацию пользователя, не раскрывая ее публично, не раскрывая ее контрагенту и/или не храня ее во внешней системе
Финансы — открытые финансовые рынки, устойчивые к цензуре, глобально доступные и прозрачные. Смарт-контракты могут определять правила взаимодействия для продавцов и покупателей, а DON могут устанавливать цены на товары и осуществлять расчеты на рынках, используя внешние данные, а также выполнять вычисления для таких дополнительных функций, как сокрытие транзакций, проверка KYC, справедливое упорядочивание транзакций и высокоскоростная обработка вне блокчейн
Цепочки поставок — многосторонние торговые контракты, которые работают на основе общего реестра, оцифровывают товарные линии и/или автоматизируют действия в разрозненных системах с использованием проверенных данных. Смарт-контракты могут определять различные обязательства, условия оплаты и штрафы, в то время как DON могут помочь отслеживать поставки, контролировать качество, проверять личность клиента и инициировать расчетные платежи, используя сочетание вычислений с сохранением конфиденциальности и внешних данных, поступающих из сетей IoT, веб-серверов, других блокчейн и корпоративных бэкендов
Страхование — параметрическое страхование, которому способствуют двусторонние рынки предсказаний на основе заранее определенных событий. Смарт-контракты могут определять премии и процессы претензий, а DON могут подключать контракт к внешним источникам данных для котировки и арбитража претензий. DON также могут выполнять расчеты по оценке риска, получать сложные результаты оценки риска (например, с облачной платформы) и конфиденциально проверять идентификаторы
Игры — игровые платформы, автоматизирующие выдачу вознаграждений, предоставляющие пользователям полное право собственности на внутриигровые активы через NFT и обеспечивающие окончательное доказательство того, что все игроки имеют равные шансы на победу. Смарт-контракты могут определять игровой процесс и модели распределения вознаграждений, а DONs могут обеспечивать защищенную от взлома случайность, чтобы доказать беспристрастность игрового процесса и справедливое распределение призов. С помощью DONs игровые dApps (децентрализованные приложения) могут также подключать данные реального мира, например, показания датчиков IoT для дополненной реальности, и обрабатывать определенные игровые функции вне блокчейн для достижения более высокой производительности
Маркетинг — маркетинговые кампании, которые автоматически распределяют вознаграждения в режиме реального времени на основе данных о целях эффективности. Смарт-контракты могут определять многоуровневую модель выплат с конкретными этапами, а DON могут подтверждать достижение показателей эффективности и предоставлять конфиденциальные вычисления по данным о клиентах и более широким рыночным тенденциям для расширенной оценки кампании
Управление — распределенные сообщества, которые безопасно и справедливо управляют общими системами и объединенными активами. Смарт-контракты могут определять всю структуру управления, а DON могут предоставлять внешние данные и вычисления для распределения прибыли, вычета общих платежей, проверки личности для смягчения атак Сивиллы (вид атаки в одноранговой сети, в результате которой жертва подключается только к узлам, контролируемым злоумышленником), проверки членских обязательств или даже автоматизации принятия решений
В конечном счете, децентрализованные сети оракулов (DON) могут предоставлять все услуги, которые блокчейн не поддерживает по своей природе, а также создавать вне блокчейн (off-chain) услуги, распространяя криптографические гарантии безопасности на существующие данные и системы. Гибридная архитектура смарт-контрактов помогает реализовать более широкое видение сотрудничества на основе децентрализованных систем, позволяя блокчейн и вне-блокчейн инфраструктуре беспрепятственно взаимодействовать безопасным, надежным, масштабируемым, конфиденциальным, настраиваемым и/или универсальным образом. Даже с учетом того, что криптовалюта является многотриллионным классом активов, а экономика DeFi приближается к 100 миллиардам долларов, далеко идущая применимость гибридных смарт-контрактов и децентрализованных сетей оракулов является явным признаком того, что экосистема блокчейн только начинает нащупывать то, что может ждать её впереди.
Пример гибридного смарт-контракта
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";
contract DevmuneRatingInteractor is ChainlinkClient {
using Chainlink for Chainlink.Request;
bytes public data;
mapping (string => uint256) public ratingData;
string public firstPlace;
string public secondPlace;
string public thirdPlace;
bytes32 private jobId;
uint256 private fee;
constructor(address _linkToken, address _operator) {
setChainlinkToken(_linkToken);
setChainlinkOracle(_operator);
jobId = "512265735ece4bcb929b66b0d1ee7432";
fee = 0.1 * 10 ** 18;
}
event DataFulfilled(
bytes32 indexed requestId,
string firstPlace,
uint256 firstPlaceWeight,
string secondPlace,
uint256 secondPlaceWeight,
string thirdPlace,
uint256 thirdPlaceWeight
);
function requestRating(string memory repository, string memory repositoryOwner, string memory dateFrom) public
{
Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
request.add("repo", repository);
request.add("repo_owner", repositoryOwner);
request.addInt("records_limit", 100);
request.add("from_date_time", dateFrom);
request.addInt("users_in_rating_limit", 3);
sendOperatorRequest(request, fee);
}
function fulfill(bytes32 requestId, bytes memory firstPlaceUserResponse, uint256 firstPlaceWeightResponse, bytes memory secondPlaceUserResponse, uint256 secondPlaceWeightResponse, bytes memory thirdPlaceUserResponse, uint256 thirdPlaceWeightResponse) public recordChainlinkFulfillment(requestId)
{
string memory _firstPlace = bytesToString(firstPlaceUserResponse);
string memory _secondPlace = bytesToString(secondPlaceUserResponse);
string memory _thirdPlace = bytesToString(thirdPlaceUserResponse);
emit DataFulfilled(
requestId,
_firstPlace,
firstPlaceWeightResponse,
_secondPlace,
secondPlaceWeightResponse,
_thirdPlace,
thirdPlaceWeightResponse
);
firstPlace = _firstPlace;
secondPlace = _secondPlace;
thirdPlace = _thirdPlace;
ratingData[_firstPlace] = firstPlaceWeightResponse;
ratingData[_secondPlace] = secondPlaceWeightResponse;
ratingData[_thirdPlace] = thirdPlaceWeightResponse;
}
function bytesToString(bytes memory byteCode) public pure returns(string memory stringData)
{
uint256 blank = 0; //blank 32 byte value
uint256 length = byteCode.length;
uint cycles = byteCode.length / 0x20;
uint requiredAlloc = length;
if (length % 0x20 > 0) //optimise copying the final part of the bytes - to avoid looping with single byte writes
{
cycles++;
requiredAlloc += 0x20; //expand memory to allow end blank, so we don't smack the next stack entry
}
stringData = new string(requiredAlloc);
//copy data in 32 byte blocks
assembly {
let cycle := 0
for
{
let mc := add(stringData, 0x20) //pointer into bytes we're writing to
let cc := add(byteCode, 0x20) //pointer to where we're reading from
} lt(cycle, cycles) {
mc := add(mc, 0x20)
cc := add(cc, 0x20)
cycle := add(cycle, 0x01)
} {
mstore(mc, mload(cc))
}
}
//finally blank final bytes and shrink size (part of the optimisation to avoid looping adding blank bytes1)
if (length % 0x20 > 0)
{
uint offsetStart = 0x20 + length;
assembly
{
let mc := add(stringData, offsetStart)
mstore(mc, mload(add(blank, 0x20)))
//now shrink the memory back so the returned object is the correct size
mstore(stringData, length)
}
}
}
}
Телеграм канал про web3 разработку, смарт-контракты и оракулы.