Блокчейн-деривативы: решение проблемы на $500 трлн и победа на хакатоне Consensus 2018 +11


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 по отношению к доллару США. Жизенный цикл такого контракта будет следующим:

  1. Любой пользователь может опубликовать контракт BlockSigmaPut под определенный выпуск опционов. При публикации необходимо указать: (1) базовый токен, (2) валютный токен, (3) дату окончания, (4) страйк, (5) адрес эмитента, уполномоченного выступать поручителем по контрактам в данном выпуске и (6) требование к минимальному резерву по контракту. Пример: Продажа EOS до 1 июля 2018 года со страйком 10 DAI и минимальным резервом 2 DAI. Такой контракт дает покупателю право на продажу EOS поручителю за 10 DAI в любое время до 1 июля 2018 года. Требование к минимальной марже по каждому контракту в этом случае составит 2 + max(0, 10 – текущая цена EOS).
  2. Указанный эмитент выступает поручителем по определенному числу контрактов, размещая необходимый резерв в валютном токене. Для примера выше при текущей рыночной цене EOS в размере $12 эмитент должен разместить 2 + max(0, 10 – 12) = 2 DAI, чтобы выпустить 1 контракт на опцион. Выпущенные контракты будут считаться обычными токенами ERC20, что позволит вывести их на биржу для продажи.
  3. Покупатель, желающий исполнить контракт, должен дать разрешение на перевод EOS в смарт-контракт на опцион и затем вызвать метод exercise. После начала исполнения контракта у продавца будет 24 часа на то, чтобы перечислить платеж в валютном токене. В нашем примере за каждый токен EOS продавец должен отдать 10 DAI.
  4. Эмитент дает разрешение на перевод токенов DAI со своего счета в смарт-контракт на опцион и вызывает метод deliver. Исполненный смарт-контракт автоматически осуществляет расчет по транзакции: переводит DAI и EOS покупателю и продавцу (эмитенту) соответственно, а резерв возвращает продавцу.
  5. (Необязательно) Если продавец не осуществил платеж в течение 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




К сожалению, не доступен сервер mySQL