11 и 12 мая 2018 года команда 8base в лице меня, Евгения Семушина и Гейба Келли решила испытать свои силы и побороться за приз AlphaPoint на хакатоне Consensus 2018, который проходил в Нью-Йорке. Всего в хакатоне участвовало 33 команды, а среди его спонсоров были такие гиганты, как CoinDesk, Microsoft, IBM, Hyperledger и Quorum.
На соревновании AlphaPoint требовалось написать приложение, привязанное к криптовалютной бирже, поэтому мы надеялись, что мой опыт работы в хедж-фонде будет весьма кстати. Мы хотели создать нечто большее, чем фронт-энд к существующему блокчейн-решению. Нашей целью было решить реальную проблему, применив уникальные возможности блокчейн-архитектуры, собственный опыт разработки смарт-контрактов и знания о внутренней механике финансов.
Мы создали набор смарт-контрактов в сети Ethereum, который позволяет формировать децентрализованные деривативы и управлять их обеспечением на основе блокчейна. С помощью нашего решения любой пользователь может стать поручителем по контракту на продажу или покупку любого актива ERC20 без какого-либо внешнего управления требованиями и их исполнением. В результате мы удостоились главного приза.
Под катом нюансы реализации этого проекта.
Проблема
Деривативы — штука серьезная. Капитализация мирового рынка деривативов оценивается почти в $500 трлн. Если сравнить это с рынком криптовалют (около $0,4 трлн), объемом наличных денег (около $40 трлн) и мировым рынком акций (около $70 трлн), то становится очевидно, как велика роль деривативов в мировой экономике. Достаточно лишь взглянуть на эту инфографику. Банки, фонды и компании активно используют опционы, фьючерсы, свопы и другие деривативы для управления рисками.
Рыночная капитализация различных активов:
- Crypto — криптовалюты
- Liquid money — наличные деньги
- Global public stock markets — мировой рынок акций
- Derivatives — деривативы
Основная сложность с контрактами на деривативы связана с тем, что в них обычно используется кредитное плечо, так как потенциальные риски выше сумм, которыми стороны фактически располагают. Из-за этого возникает сложная система взаиморасчетов, а также требования к минимальной марже и запросы на увеличение маржи: уровень обеспечения должен оставаться таким, чтобы выход из сделки всегда был дороже, чем ее исполнение.
Все это рухнуло в 2008 году. Запутавшись в хитросплетениях контрактов на деривативы, игроки Уолл-стрит потеряли контроль над ситуацией. В результате сработал «эффект домино»: шквал запросов на увеличение маржи и невозможность их исполнить привели к краху Lehman Brothers и других игроков. Правительству США пришлось вмешаться и выступить поручителем Уолл-стрит по гигантским суммам неисполненных контрактов на деривативы. Все мы знаем, к чему это привело…
Решение
BlockSigma — это набор смарт-контрактов для организации сделок по деривативам криптовалют и управления такими сделками. Управление обеспечением основано на блокчейне, поэтому, чтобы контролировать соблюдение требований к минимальной марже для средств, зафиксированных в смарт-контракте, никакой посредник не требуется.
Главное новшество — управление маржой полностью на основе блокчейна, без централизованного контроля и прогнозного потока котировок. Для этого мы интегрировали протокол Bancor. Протокол Bancor уже активно внедряется в биржевую торговлю и ежедневно обслуживает операции на миллионы долларов. В Bancor используется детерминированная функция цены на основе соотношения спроса и предложения по конкретному активу. Соответственно, цену базового токена можно определять прямо в блокчейне, что позволяет точно формулировать требования к минимальной марже и вовремя создавать запросы на увеличение маржи.
Логика смарт-контрактов построена так, чтобы покупатель опциона принудительно закрывал позицию, как только обеспечение в смарт-контракте упадет ниже обязательного требования к минимальной марже. Функция определения минимальной маржи учитывает избыточный резерв, что создает экономические стимулы для покупателя опциона внимательно следить за позицией и заполучить этот резерв (вместе с избытком) при ее принудительном закрытии в случае нарушения требования к минимальной марже. В свою очередь, у продавца (поручителя) опциона тоже появляются экономические стимулы вовремя пополнять обеспечение, если сделка складывается неудачно, чтобы не потерять избыточный резерв.
Реализация
Полный исходный код решения опубликован в репозитории GitHub.
Решение состоит из трех основных файлов Solidity: BlockSigmaBase.sol, BlockSigmaCall.sol и BlockSigmaPut.sol. BlockSigmaBase реализует общую логику, а BlockSigmaCall и BlockSigmaPut наследуют ее и реализует логику контрактов на покупку и продажу соответственно.
Вот как выглядит интерфейс контракта:
contract BlockSigmaBase is StandardToken {
/**
* @dev Constructor
* @param _underlyingTokenAddress address of the underlying ERC20 token.
* @param _currencyTokenAddress address of the currency ERC20 token.
* @param _strike option strike denominated in the currency token.
* @param _exp expiration timestamp.
* @param _minReserve minimum (excess) reserve
* @param _underlyingBancorConverter address of the Bancor converter contract that converts underlying token into BNT.
* @param _currencyBancorConverter address of the Bancor converter contract that converts currency token into BNT.
* @param _issuer address that is allowed to issue(underwrite) new contracts.
*/
function BlockSigmaBase(address _underlyingTokenAddress, address _currencyTokenAddress,
uint256 _strike, uint256 _exp, uint256 _minReserve,
address _underlyingBancorConverter, address _currencyBancorConverter,
address _issuer) public;
/**
* @dev get the required maintenance margin level in currency token.
*/
function getRequiredReserve() public view returns (uint256);
/**
* @dev Get price of the underlying token expressed in currency token from Bancor
*/
function getUnderlyingPrice() public view returns (uint256);
/**
* @dev Ability for writer to issue(underwrite) new contracts
* @param amount how many contracts to issue (in wei).
*/
function issue(uint256 amount) public onlyIssuer returns (bool);
/**
* @dev Buyer can exercise the option anytime before the maturity. Buyer deposits currency(call) or underlying tokens(put).
*/
function exercise() public returns (bool);
/**
* @dev Writer delivers the underlying tokens(call) or currency(put).
* @param to which buyer to deliver to.
*/
function deliver(address to) public onlyIssuer returns (bool);
/**
* @dev Buyer can force liquidation if exercise is past due or reserve is below requirement
*/
function forceLiquidate() public returns (bool);
/**
* @dev Writer can deposit additional reserve
* @param amount how much currency token to deposit.
*/
function depositReserve(uint256 amount) public returns (bool);
/**
* @dev Writer can withdraw reserve
* @param amount how much currency token to withdraw.
*/
function withdrawReserve(uint256 amount) public onlyIssuer returns (bool);
/**
* @dev Is reserve below the requirement?
*/
function isReserveLow() public view returns (bool);
/**
* @dev Is option series expired?
*/
function isExpired() public view returns (bool);
/**
* @dev Can option be liquidated?
*/
function canLiquidate() public view returns (bool);
}
Теперь рассмотрим основные рабочие процессы для контракта на продажу. Возьмем, к примеру, контракт на продажу токенов EOS, деноминированных в DAI, который позволяет эффективно хеджировать активы в EOS по отношению к доллару США. Жизенный цикл такого контракта будет следующим:
- Любой пользователь может опубликовать контракт BlockSigmaPut под определенный выпуск опционов. При публикации необходимо указать: (1) базовый токен, (2) валютный токен, (3) дату окончания, (4) страйк, (5) адрес эмитента, уполномоченного выступать поручителем по контрактам в данном выпуске и (6) требование к минимальному резерву по контракту. Пример: Продажа EOS до 1 июля 2018 года со страйком 10 DAI и минимальным резервом 2 DAI. Такой контракт дает покупателю право на продажу EOS поручителю за 10 DAI в любое время до 1 июля 2018 года. Требование к минимальной марже по каждому контракту в этом случае составит 2 + max(0, 10 – текущая цена EOS).
- Указанный эмитент выступает поручителем по определенному числу контрактов, размещая необходимый резерв в валютном токене. Для примера выше при текущей рыночной цене EOS в размере $12 эмитент должен разместить 2 + max(0, 10 – 12) = 2 DAI, чтобы выпустить 1 контракт на опцион. Выпущенные контракты будут считаться обычными токенами ERC20, что позволит вывести их на биржу для продажи.
- Покупатель, желающий исполнить контракт, должен дать разрешение на перевод EOS в смарт-контракт на опцион и затем вызвать метод exercise. После начала исполнения контракта у продавца будет 24 часа на то, чтобы перечислить платеж в валютном токене. В нашем примере за каждый токен EOS продавец должен отдать 10 DAI.
- Эмитент дает разрешение на перевод токенов DAI со своего счета в смарт-контракт на опцион и вызывает метод deliver. Исполненный смарт-контракт автоматически осуществляет расчет по транзакции: переводит DAI и EOS покупателю и продавцу (эмитенту) соответственно, а резерв возвращает продавцу.
- (Необязательно) Если продавец не осуществил платеж в течение 24 часов, покупатель может вызвать метод forceLiquidate, чтобы вернуть размещенные EOS вместе с резервом на покрытие некорректных действий продавца.
Теперь рассмотрим, как реализовано управление обеспечением. В нашем примере цена EOS в момент выпуска контракта на опцион составляла $12. Предположим, что она снизилась до $9. Тогда необходимый резерв будет равен 2 + max (0, 10 – 9) = 3. Это означает, что продавец должен дополнительно внести 1 DAI за каждый контракт, по которому выступает поручителем. Если продавец не сможет это сделать, то у покупателя будет экономический стимул принудительно закрыть позицию:
- Если покупатель исполнит опцион, то получит выплату в размере 10 – 9 = 1 DAI за каждый контракт (т.е. купит EOS на рынке по $9 и продаст эмитенту за $10).
- С другой стороны, если покупатель принудительно закроет позицию, то получит весь резерв, который для нашего примера составляет 2 DAI за каждый контракт.
Это мотивирует покупателя принудительно закрывать позиции как можно раньше, чтобы быстро получать прибыль.
Трудности
Это ни в коей мере не готовое решение. Его главная цель — показать прорывные возможности блокчейна и смарт-контрактов для автоматизации взаиморасчетов и управления обеспечением контрактов на опционы. Традиционно эти услуги предоставляются посредниками, а также требуют ручной работы и уплаты комиссий.
Хотя наше решение очень перспективное в этом плане, мы видим ряд серьезных трудностей:
- Протокол Bancor не тестировался в жестких условиях. В нем используется детерминированная функция цены, сходящаяся к биржевым ценам через арбитраж. Пока что непонятно, как этот механизм будет работать при гораздо большей волатильности и/или при серьезных ценовых разрывах.
- Механизм управления обеспечением неустойчив к резким ценовым разрывам. Теоретически возможна ситуация, при которой ответственность поручителя превысит резерв, из-за чего поручитель захочет нарушить сделку, а покупатель не получит полную компенсацию. Чтобы избежать этого, можно увеличить минимальный резерв. Кроме того, можно поступить традиционным образом: пользователи системы вносят средства в распределенный «пул страхования», который автоматически покрывает недостачи в исключительных случаях.
- Поскольку в Bancor используется детерминированная функция цены, возможны различные манипуляции с целью повысить выплаты одной стороне контракта на опцион в ущерб другой стороне. Такое может произойти только при малом резерве конвертера Bancor (т.е. при высокой чувствительности к цене) относительно суммы позиции опционов. В этом случае манипуляция с ценой в Bancor может оказаться выгоднее, чем выплаты по опционам в результате такой манипуляции. Однако эта проблема характерна не только для криптовалют, но и для традиционных рынков (например, поджог дома ради получения страховки).
- Неопределенность в регулировании. Мы не изучали аспекты регулирования, так как пока что наш проект преследует чисто исследовательские цели.
Если вы заметили какие-либо проблемы, не указанные в списке, напишите о них в комментариях.
Выводы
Описанное решение в общих чертах отражает те фундаментальные изменения, которые блокчейн привнесет в финансовую отрасль за ближайшие годы. Помимо более эффективных взаиморасчетов и управления обеспечением эта технология введет прозрачные, самоисполняющиеся и единые для всех участников рынка правила.
Наша команда 8base не специализируется на нишевых решениях и протоколах, описанных в статье. Мы ожидаем взрывной рост аналогичных революционных технологий в ближайшие годы на волне цифровой трансформации. Соответственно, мы концентрируемся на построении следующего уровня инфраструктуры, чтобы дать бизнес-пользователям простой доступ к этим технологиям и возможность встроить их в корпоративное ПО для достижения коммерческих целей.
Исходники на GitHub
Автор: andrei_anisimov