区块链衍生品:以500万亿美元解决问题并赢得共识2018黑客马拉松

2018年5月11日至12日,Evgeny Semushin,Gabe Kelly和我的8base团队决定在纽约举行的Consensus 2018 hackathon上测试我的力量并争夺AlphaPoint奖。 共有33个团队参加了此次黑客马拉松,其赞助商包括CoinDesk,Microsoft,IBM,Hyperledger和Quorum等巨头。



在AlphaPoint竞赛中,有必要编写与加密货币交易所绑定的应用程序,因此我们希望我在对冲基金中的经验会非常有用。 我们想要创建的不仅仅是现有区块链解决方案的前端。 我们的目标是通过运用区块链架构的独特功能,我们在开发智能合约方面的经验以及对金融内部机制的知识来解决实际问题。

我们在以太坊网络中创建了一组智能合约,使您可以创建分散式衍生品并在区块链的基础上管理其供应。 借助我们的解决方案,任何用户都可以成为买卖任何ERC20资产的合同的担保人,而无需对需求及其实现进行任何外部管理。 结果,我们获得了主要奖项。

根据削减,该项目实施的细微差别。

问题


衍生物是一件严肃的事情。 全球衍生品市场的资本总额估计接近500万亿美元。 如果将其与加密货币市场(约0.4万亿美元),现金(约40万亿美元)和全球股票市场(约70万亿美元)进行比较,很明显,衍生品在全球经济中的作用非常重要。 看看这个信息图 。 银行,基金和公司积极使用期权,期货,掉期合约和其他衍生工具来管理风险。



各种资产的市值:

  • 加密 -加密货币
  • 流动资金-现金
  • 全球公开股票市场 -全球股票市场
  • 衍生工具 -衍生工具

衍生品合约的主要困难在于它们通常使用杠杆,因为潜在风险高于当事方实际拥有的金额。 因此,出现了一个复杂的相互结算系统,以及对最低保证金的要求和要求增加保证金的要求:必须保持抵押品的水平,以使退出交易总是比执行交易更为昂贵。

所有这些在2008年崩溃了。 陷入复杂的衍生品合同,华尔街参与者失去了对局势的控制。 结果,“多米诺骨牌效应”奏效了:大量增加利润的要求以及无法履行利润的要求导致了雷曼兄弟公司和其他参与者的破产。 美国政府必须介入并充当华尔街的担保人,以处理巨额的未偿还衍生品合同。 我们都知道这导致了...

解决方案




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); } 

现在考虑销售合同的基本工作流程。 例如,以DAI计价的EOS代币销售合同,使您可以有效地对冲EOS资产对美元。 此类合同的生命周期如下:

  1. 任何用户都可以发布针对特定发行期权的BlockSigmaPut合约。 发布时,您必须指定:(1)基本令牌,(2)货币令牌,(3)到期日期,(4)行使价,(5)被授权担当本期合同担保人的发行人的地址,以及(6)最低准备金要求根据合同。 示例:在2018年7月1日之前卖出EOS,执行10个DAI的行权,最低准备金2个DAI。 此类合同使买方有权在2018年7月1日之前的任何时候以10 DAI的价格向担保人出售EOS。 在这种情况下,每份合约的最低保证金要求为2 +最高(0,10-当前EOS价格)。
  2. 指定的发行人充当一定数量合同的担保人,将必要的准备金放入货币令牌中。 对于上面的示例,在当前EOS市场价格$ 12时,发行人必须放置2 + max(0,10-12)= 2 DAI才能发行1个期权合约。 已发行的合同将被视为普通的ERC20代币,这将使它们能够在交易所出售中上市。
  3. 想要履行合同的买方必须授予将EOS转移到智能期权合同的权限,然后调用执行方法。 合同开始执行后,卖方将有24小时以货币令牌转移付款。 在我们的示例中,卖方必须为每个EOS令牌提供10 DAI。
  4. 发行者授予将DAI令牌从其帐户转移到智能期权合约的权限,并调用交付方法。 已执行的智能合约会自动结算交易:将DAI和EOS分别转让给买方和卖方(发行方),然后将储备金退还给卖方。
  5. (可选)如果卖方未在24小时内付款,则买方可以调用forceLiquidate方法返回已放置的EOS以及储备金,以弥补卖方的不当行为。

现在考虑如何实施抵押品管理。 在我们的示例中,发行期权合约时EOS的价格为12美元。 假设她降至$ 9。 然后,必要的准备金将为2 + max(0,10-9)=3。这意味着卖方必须为作为担保人的每份合同额外支付1 DAI。 如果卖方不能做到这一点,那么买方将有经济动机去强制平仓:

  • 如果买方行使期权,则每份合约他将获得10-9 = 1 DAI的付款(即他将以9美元的价格在市场上购买EOS并以10美元的价格出售给发行人)。
  • 另一方面,如果买方强行平仓,他将获得全部准备金,在我们的示例中,每份合约为2 DAI。

这促使买方尽早强行平仓以快速获利。

难点


这绝不是现成的解决方案。 它的主要目标是展示区块链和智能合约的突破性功能,以实现相互自动结算和管理期权合约的提供。 传统上,这些服务由中介提供,并且还需要人工工作和支付佣金。

尽管我们的解决方案在这方面非常有前途,但我们看到了许多严重的困难:

  • Bancor协议尚未在严格条件下进行测试。 它使用确定性价格函数,该函数通过仲裁收敛到交换价格。 尚不清楚这种机制如何在更大的波动性和/或严重的价格差距下发挥作用。
  • 抵押品管理机制不稳定,价格差距明显。 从理论上讲,担保人的责任超过准备金的情况可能发生,因为担保人希望中断交易,而买方则无法获得全额赔偿。 为避免这种情况,您可以增加最低准备金。 此外,您可以通过传统方式进行:系统用户将资金存入分布式“保险池”,在特殊情况下,该池可自动弥补短缺。
  • 由于Bancor使用确定性价格函数,因此可以进行各种操纵来增加对期权合约一方的支付,而损害另一方的支付。 相对于期权头寸的数量,这只有在Bancor转换器的储备量较小(即对价格高度敏感)的情况下才会发生。 在这种情况下,Bancor中的价格操纵可能比这种操纵产生的期权付款更有利可图。 但是,不仅对于加密货币,而且对于传统市场(例如,放火烧毁保险屋),这个问题都是典型的。
  • 法规的不确定性。 我们没有研究监管方面,因为到目前为止我们的项目仅具有研究目的。

如果发现未列出的任何问题,请在注释中写出有关它们的信息。

结论


总体上描述的解决方案反映了区块链将在未来几年带给金融业的根本变化。 除了更有效的结算和抵押品管理外,该技术还将为所有市场参与者引入透明,自我实现和统一的规则。

我们的8base团队并不专门研究本文介绍的利基解决方案和协议。 我们预计,随着数字化转型的浪潮,未来几年类似革命性技术的爆炸式增长。 因此,我们将重点放在构建更高级别的基础架构上,以使业务用户可以轻松访问这些技术,并能够将其集成到企业软件中以实现业务目标。
GitHub 来源

Source: https://habr.com/ru/post/zh-CN415755/


All Articles