Nos dias 11 e 12 de maio de 2018, a equipe da 8base na pessoa de Evgeny Semushin, Gabe Kelly e eu decidimos testar minha força e competir pelo prêmio AlphaPoint no hackathon
Consensus 2018 , realizado em Nova York. No total, 33 equipes participaram do hackathon, e entre seus patrocinadores estavam gigantes como CoinDesk, Microsoft, IBM, Hyperledger e Quorum.

Na competição AlphaPoint, era necessário escrever um aplicativo vinculado a uma troca de criptomoedas, por isso esperávamos que minha experiência em um fundo de hedge fosse muito útil. Queríamos criar algo mais do que um front-end para a solução blockchain existente. Nosso objetivo era resolver o problema real aplicando os recursos exclusivos da arquitetura blockchain, nossa própria experiência no desenvolvimento de contratos inteligentes e conhecimento da mecânica interna das finanças.
Criamos um conjunto de contratos inteligentes na rede Ethereum, que permite criar derivativos descentralizados e gerenciar suas provisões com base no blockchain. Com a nossa solução, qualquer usuário pode se tornar um garante nos termos de um contrato para a venda ou compra de qualquer ativo do ERC20 sem nenhum gerenciamento externo de requisitos e seu cumprimento. Como resultado, ganhamos o prêmio principal.
Sob o corte, as nuances da implementação deste projeto.
O problema
Derivados são uma coisa séria. A capitalização do mercado global de derivativos é estimada em quase US $ 500 trilhões. Se você comparar isso com o mercado de criptomoedas (cerca de US $ 0,4 trilhão), dinheiro (cerca de US $ 40 trilhões) e o mercado de ações global (cerca de US $ 70 trilhões), torna-se óbvio a importância do papel dos derivativos na economia global. Basta olhar para este
infográfico . Bancos, fundos e empresas usam ativamente opções, futuros, swaps e outros derivativos para gerenciar riscos.

Capitalização de mercado de vários ativos:
- Criptografia - criptomoedas
- Dinheiro líquido - dinheiro
- Mercados de ações públicos globais - mercado de ações global
- Derivados - derivativos
A principal dificuldade dos contratos de derivativos é que eles geralmente usam alavancagem, uma vez que os riscos potenciais são maiores do que os valores que as partes realmente possuem. Por esse motivo, surge um sistema complexo de acordos mútuos, bem como requisitos para uma margem mínima e solicitações de aumento de margem: o nível de garantias deve permanecer de tal forma que a saída da transação seja sempre mais cara que sua execução.
Tudo isso entrou em colapso em 2008. Enredados nos meandros dos contratos de derivativos, os jogadores de Wall Street perderam o controle da situação. Como resultado, o “efeito dominó” funcionou: uma enxurrada de pedidos por margens crescentes e a incapacidade de cumpri-las levaram ao colapso do Lehman Brothers e de outros atores. O governo dos EUA teve que intervir e atuar como garantidor de Wall Street nas quantias gigantescas de contratos pendentes de derivativos. Todos sabemos o que isso levou a ...
Solução

O BlockSigma é um conjunto de contratos inteligentes para organizar transações em derivativos de criptomoeda e gerenciar essas transações. O gerenciamento de garantias é baseado no blockchain, portanto, para garantir a conformidade com os requisitos mínimos de margem para fundos registrados no contrato inteligente, nenhum intermediário é necessário.
A principal inovação é o gerenciamento de margens baseado inteiramente no blockchain, sem controle centralizado e o fluxo previsto de cotações. Para isso, integramos o protocolo
Bancor . O protocolo Bancor já está sendo implementado ativamente nas operações de troca e serviços diários por milhões de dólares. O Bancor usa uma função determinística de preço com base na razão de oferta e demanda de um ativo específico. Consequentemente, o preço do token básico pode ser determinado diretamente na blockchain, o que permite formular com precisão os requisitos para a margem mínima e a tempo de criar solicitações para aumentar as margens.
A lógica dos contratos inteligentes é projetada para que o comprador da opção feche à força a posição assim que as garantias do contrato inteligente ficarem abaixo do requisito de margem mínima obrigatória. A função de determinar a margem mínima leva em consideração o excesso de reserva, o que cria incentivos econômicos para que o comprador da opção monitore de perto a posição e obtenha essa reserva (juntamente com o excesso) quando for forçado a fechar em caso de violação do requisito de margem mínima. Por sua vez, o vendedor (garantidor) da opção também possui incentivos econômicos para restabelecer a garantia dentro do prazo, caso a transação não tenha êxito, para não perder o excesso de reserva.
Implementação

O código fonte completo da solução é publicado no
repositório GitHub .
A solução consiste em três arquivos principais do Solidity: BlockSigmaBase.sol, BlockSigmaCall.sol e BlockSigmaPut.sol. O BlockSigmaBase implementa a lógica comum, enquanto o BlockSigmaCall e o BlockSigmaPut a herdam e implementam a lógica dos contratos de compra e venda, respectivamente.
Aqui está a aparência da interface do contrato:
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); }
Agora considere os fluxos de trabalho básicos para um contrato de vendas. Tomemos, por exemplo, um contrato para a venda de tokens EOS denominados em DAI, que permite proteger efetivamente os ativos no EOS em relação ao dólar americano. O ciclo de vida de um contrato será o seguinte:
- Qualquer usuário pode publicar um contrato BlockSigmaPut para um problema específico de opções . Ao publicar, você deve especificar: (1) o token de base, (2) o token da moeda, (3) a data de vencimento, (4) a greve, (5) o endereço do emissor autorizado a atuar como garantidor dos contratos nesta emissão e (6) o requisito de reserva mínima sob o contrato. Exemplo: venda de EOS antes de 1 de julho de 2018 com uma greve de 10 DAI e uma reserva mínima de 2 DAI. Esse contrato dá ao comprador o direito de vender a EOS ao garantidor por 10 DAI a qualquer momento até 1º de julho de 2018. O requisito de margem mínima para cada contrato nesse caso será de 2 + máx. (0, 10 - preço atual da EOS).
- O emissor especificado atua como garantidor de um certo número de contratos, colocando a reserva necessária em um token de moeda. Para o exemplo acima, pelo preço atual de mercado da EOS de US $ 12, o emissor deve colocar 2 + max (0, 10 - 12) = 2 DAI para emitir um contrato de opção. Os contratos emitidos serão considerados tokens comuns do ERC20, o que permitirá que eles sejam listados na bolsa de valores para venda.
- O comprador que deseja cumprir o contrato deve dar permissão para transferir o EOS para o contrato de opção inteligente e depois chamar o método de exercício. Após o início da execução do contrato, o vendedor terá 24 horas para transferir o pagamento em um token de moeda. Em nosso exemplo, o vendedor deve fornecer 10 DAI para cada token EOS.
- O emissor concede permissão para transferir tokens DAI de sua conta para o contrato de opção inteligente e chama o método de entrega. Um contrato inteligente executado liquida automaticamente a transação: transfere DAI e EOS para o comprador e o vendedor (emissor), respectivamente, e a reserva é devolvida ao vendedor.
- (Opcional) Se o vendedor não efetuar o pagamento dentro de 24 horas, o comprador poderá chamar o método forceLiquidate para devolver a EOS colocada junto com a reserva para cobrir as ações incorretas do vendedor.
Agora considere como o gerenciamento de garantias é implementado. Em nosso exemplo, o preço da EOS no momento em que o contrato de opção foi emitido era de US $ 12. Suponha que ela caiu para US $ 9. A reserva necessária será então 2 + max (0, 10 - 9) = 3. Isso significa que o vendedor deve depositar adicionalmente 1 DAI para cada contrato sob o qual ele atua como garantidor. Se o vendedor não puder fazer isso, o comprador terá um incentivo econômico para fechar com força a posição:
- Se o comprador exercer a opção, ele receberá um pagamento de 10 a 9 = 1 DAI para cada contrato (ou seja, ele comprará a EOS no mercado por US $ 9 e a venderá ao emissor por US $ 10).
- Por outro lado, se o comprador forçosamente fechar a posição, ele receberá toda a reserva, que para o nosso exemplo é de 2 DAI para cada contrato.
Isso motiva o comprador a fechar forçosamente as posições o mais cedo possível, a fim de obter lucro rapidamente.
Dificuldades
Esta não é de forma alguma uma solução pronta. Seu principal objetivo é mostrar os recursos inovadores de blockchain e contratos inteligentes para automatizar acordos mútuos e gerenciar o fornecimento de contratos de opções. Tradicionalmente, esses serviços são prestados por intermediários e também exigem trabalho manual e pagamento de comissões.
Embora nossa solução seja muito promissora nesse sentido, vemos várias dificuldades sérias:
- O protocolo Bancor não foi testado sob condições rigorosas. Ele usa uma função determinística de preço que converge para trocar preços por meio de arbitragem. Ainda não está claro como esse mecanismo funcionará com volatilidade muito maior e / ou com graves diferenças de preço.
- O mecanismo de gerenciamento de garantias é instável para brechas acentuadas de preços. Teoricamente, é possível uma situação em que a responsabilidade do garantidor exceda a reserva, por causa da qual a garantia deseja interromper a transação, e o comprador não recebe compensação total. Para evitar isso, você pode aumentar a reserva mínima. Além disso, você pode fazer da maneira tradicional: os usuários do sistema depositam fundos em um “pool de seguros” distribuído, que cobre automaticamente a escassez em casos excepcionais.
- Como o Bancor utiliza uma função de preço determinística, são possíveis várias manipulações para aumentar os pagamentos para um lado do contrato de opção em detrimento do outro. Isso pode acontecer apenas com uma pequena reserva do conversor Bancor (ou seja, com alta sensibilidade ao preço) em relação à quantidade de opções de opções. Nesse caso, a manipulação de preços no Bancor pode se mostrar mais lucrativa do que os pagamentos de opções resultantes dessa manipulação. No entanto, esse problema é típico não apenas para criptomoedas, mas também para mercados tradicionais (por exemplo, atear fogo a uma casa para seguro).
- Incerteza na regulamentação. Não estudamos aspectos regulatórios, porque até agora nosso projeto tem objetivos puramente de pesquisa.
Se você notar algum problema não listado, escreva sobre eles nos comentários.
Conclusões
A solução descrita em termos gerais reflete as mudanças fundamentais que a blockchain trará para o setor financeiro nos próximos anos. Além de acordos e gestão de garantias mais eficazes, essa tecnologia introduzirá regras transparentes, auto-realizáveis e uniformes para todos os participantes do mercado.
Nossa equipe da 8base não é especializada nas soluções e protocolos de nicho descritos neste artigo. Esperamos um crescimento explosivo de tecnologias revolucionárias semelhantes nos próximos anos, na onda de transformação digital. Assim, estamos nos concentrando na construção do próximo nível de infraestrutura, a fim de oferecer aos usuários de negócios acesso fácil a essas tecnologias e a capacidade de integrá-las ao software da empresa para atingir as metas de negócios.
Fontes do GitHub