Introdução ao UniswapV2

1. O que é uniswap

Documento oficial

O que é Uniswap? Vejamos a primeira frase do documento oficial:

Uniswap é um protocolo de liquidez automatizado alimentado por uma fórmula de produto constante e implementado em um sistema de contratos inteligentes não atualizáveis ​​no blockchain Ethereum .

Vamos dividir esta frase e dar uma olhada em seus pontos-chave. Em primeiro lugar, é um acordo de liquidez automático; em segundo lugar, é baseado em um algoritmo de produto constante. Em seguida, ele é implementado por meio de contratos inteligentes não atualizáveis; por fim, é no blockchain Ethereum.

De modo geral, podemos pensar no Uniswap como uma troca de moeda digital descentralizada (DEX) no Ethereum, ou como um tipo de Defi.

Vamos falar um pouco sobre esses conceitos:

  • Algoritmo de produto constante: considerado simplesmente X * Y = K, onde K(produto) permanece inalterado, denominado algoritmo de multiplicação constante, a função é uma curva sigmoidal.

  • Os acordos de liquidez automática são geralmente chamados de criação automática de mercado. Na fórmula acima, a proporção de X / Y é geralmente chamada de preço. Quando X muda, de acordo com o produto inalterado, Y também muda, então X / Y, que é o preço, muda, por isso é chamado de criação automática de mercado. Aqui, os correspondentes X e Y podem ser fornecidos ao mesmo tempo de acordo com a proporção de X e Y. Essa operação é chamada de aumento (provisão) de liquidez. Embora o valor de K após o aumento da liquidez tenha mudado em relação a antes, ele permanece inalterado nas transações subsequentes. Correspondentemente, também existem operações para reduzir a liquidez. A fórmula geral para transações X e Y é semelhante a:

    (X + X0) * (Y - Y0) = K. A fórmula é expressa fornecendo (quantidade x0) X para obter (quantidade y0) Y.

  • Não pode ser atualizado. A capacidade de atualização significa que existe o risco do mal. Não atualizável significa que o código é a lei e tudo é aberto, transparente e imutável.

  • Ethereum blockchain. Funciona no Ethereum na rede pública. No momento, a maioria dos Defi ou DEX estão rodando no Ethereum, e alguns estão rodando em outras cadeias públicas.

Uniswap e Bancor são a base de vários Defi atualmente em uma bagunça, e a maioria dos DEXs também são modificados ou copiados de sua base.

Como uma estrela em ascensão, o Uniswap deixou seus antecessores muito para trás. No momento, o Uniswap já é a versão V 2. Em comparação com a versão V1, muitas alterações e otimizações foram feitas.

2. Algum conteúdo central do Uniswap

Esta seção é derivada principalmente de documentos oficiais.

  1. O par de negociação da Uniswap é qualquer par de negociação ERC20. Aumentar a liquidez (fornecendo as duas moedas ERC20 correspondentes) obterá tokens de liquidez. Você também pode usar tokens de liquidez para resgatar seus tokens ERC20 a qualquer momento. O aumento da liquidez reduzirá a derrapagem dos preços durante a negociação.

  2. O Uniswap usa um produto constante para fazer o mercado automaticamente.Portanto, a relação (preço) no momento da execução das transações de grande e pequeno valor ficará exponencialmente pior.Claro, é projetado assim.

  3. Devido à existência de arbitragem, o preço Uniswap sempre tende para o preço de ajuste.

  4. Ao negociar, o Uniswap cobra uma taxa de manuseio de 3% e paga a todos os provedores de liquidez. Isso essencialmente torna o produto constante Kmaior.

  5. Os participantes ecológicos do Uniswap são divididos em três categorias: provedores de liquidez, negociantes e desenvolvedores.

    • Os provedores de liquidez são divididos em quatro categorias: passivos, profissionais, participantes de projetos simbólicos e inovadores DeFi.
    • Os comerciantes também são divididos em várias categorias: especuladores, arbitradores, usuários Dapp, contratos inteligentes. (A diferença entre arbitradores e especuladores é que os arbitradores usam a diferença de preço de diferentes plataformas para obter lucros, e os especuladores obtêm lucros negociando tokens).
    • Desenvolvedores. Também pode ser dividido nas seguintes categorias:
      1. O recurso de código aberto possibilita que outros projetos usem funções Uniswap. Você pode encontrar funções Uniswap nos principais projetos Defi.
      2. A carteira integra tokens de transação e funções de fornecimento de liquidez.
      3. DEX (câmbio descentralizado) pode puxar a liquidez do Uniswap, separando assim a liquidez da negociação. Para esses projetos, o Uniswap é a maior fonte de liquidez descentralizada.
      4. Desenvolvedores de contratos inteligentes podem usar o conjunto completo de funções do Uniswap para desenvolver novas ferramentas Defi e verificar algumas ideias experimentais.
  6. O sistema de contrato inteligente do Uniswap V2 consiste em duas partes: o contrato principal, que fornece garantias básicas de segurança para todos os pares de negociação no Uniswap. Os contratos periféricos são usados ​​para interagir com o contrato principal para conveniência do usuário, mas não fazem parte do contrato principal.

  7. O contrato principal consiste em um único factorye vários pares de negociação pairs. factoryUsado para criar e indexar pairs. O contrato principal é projetado para ser curto, pequeno e conciso, o que reduz a complexidade e é menos sujeito a erros, mas às vezes é relativamente hostil para os usuários. Na verdade, não é recomendável interagir diretamente com o contrato principal, mas sim com o contrato periférico.

  8. factoryO contrato salva o pairsbytecode habilitado . Sua principal tarefa é criar um contrato inteligente exclusivo para um par comercial exclusivo. Ele também controla a troca de cobrança da taxa de recrutamento da equipe de desenvolvimento.

  9. pairsOs pares de negociação fornecem principalmente duas funções: uma é fornecer criação automática de mercado e rastrear o saldo simbólico no pool de negociação; a outra é expor dados relevantes para o exterior como um oráculo de preços descentralizado.

  10. Os contratos periféricos são uma coleção de contratos projetados para oferecer suporte a interações com contratos principais em áreas específicas.

  11. Contrato de biblioteca. A biblioteca no Uniswap V2 fornece um grande número de ferramentas convenientes para obter dados e preços.

  12. Contrato de roteamento do roteador. O contrato usado para interagir com o front-end é usado para implementar transações e gerenciamento de liquidez. Ele também oferece suporte nativo para transações de vários pares, trata a ETH como um cidadão de primeira classe e fornece suporte para transações de metadados quando a liquidez é removida.

  13. O método de transação de envio de tokens com antecedência. Geralmente, se os tokens são transferidos por meio de um contrato de terceiros, é necessária uma autorização para operar. O Uniswap V2 usa um design diferente. Ele não usa autorização, mas precisa enviar tokens para o par de negociação antes de negociar. Durante a transação, o contrato verificará o saldo do token atualmente salvo e o saldo do token real do contrato e usará a diferença entre os dois como o número de tokens de entrada. Portanto, ao chamar qualquer método no par de negociação que requer tokens, a quantidade correspondente de tokens deve ser enviada ao par de negociação (exceto para a exceção de Flash Swaps, que é emprestado e depois negociado).

  14. WETH. O Uniswap V2 não suporta o par comercial ETH / ERC20, portanto, a simulação WETH deve ser usada. Os usuários podem ignorar os detalhes e simplesmente usar os contratos de periféricos para embalar e desempacotar o ETH.

  15. Liquidez mínima. Para eliminar o efeito de corte e aumentar o tick mínimo teórico de oferta de liquidez, o par de negociação queima a liquidez mínima inicial. Ocorre apenas durante a primeira vez que a liquidez é fornecida. Para a maioria dos pares de negociação, esse valor é desprezível e pode ser ignorado.

Três, alguns novos recursos do UniswapV2

O conteúdo desta seção é derivado principalmente do white paper do UniswapV2.

UniswapV2 é uma nova realização baseada no algoritmo de produto constante. Comparado com V1, possui os seguintes novos recursos:

  • Qualquer par de negociação ERC20 / ERC20 pode ser criado, enquanto V1 só pode criar pares de negociação ETH / ERC20. Desta forma, o token pode ser processado uniformemente dentro do par de transações, e não mais distinguir entre eth e erc20. Para apoiar o par de negociação ERC20 / ERC20, a ETH tornou-se WETH de acordo.

  • Aprimorou a função oráculo, reduzindo o risco de manipulação de preço no mesmo bloco no UniswapV1. O método específico é: vender uma grande quantidade de certo ativo A no início de um bloco para afetar o preço e realizar outras operações em outros contratos (transações não uniswap contra contratos) com base neste preço muito flutuante no meio do bloco e no final do bloco Comprar a mesma quantidade do ativo A novamente traz o preço de volta aos níveis normais. O UniswapV2 tem realizado acúmulo de preços, o que é conveniente para terceiros usarem o preço médio de uma determinada faixa, o que aumenta muito a dificuldade de tal manipulação e faz com que a manipulação de preços não tenha benefícios reais. Como o valor médio é usado, o valor médio de um certo intervalo de A / B e B / A não é mais uma relação recíproca, portanto, a versão V2 fornece esses dois preços.

  • O formato de dados UQ112.112 é usado para melhorar a precisão do cálculo do preço. Ao mesmo tempo, uint112 é usado para armazenar o número de ativos no par de negociação. Ao mesmo tempo, 32 bits são usados ​​para salvar o tempo de criação do bloco atual.Embora ele irá estourar após 100 anos, um mecanismo de processamento correspondente é feito.

  • Trocas de Flash. A transação é devida primeiro, para que possa ser arbitrada a custo zero. Suponha que haja um par de negociação A / B no UniswapV2 e outros DEXs também tenham um par de negociação A / B. Aqui podemos dever A primeiro, obter B do Uniswap, então usar B para obter A0 de outro DEX, e então retornar o A do Uniswap, de forma que A0-A seja nossa arbitragem. Não precisamos de nenhum tokens, apenas pagamos gasolina (taxa de manuseio) para perceber o lobo branco da luva vazia. Claro, outros DEXs também podem arbitrar o Uniswap a custo zero, desde que haja diferença de preço suficiente entre os mesmos pares de negociação.

  • Taxas da equipe de desenvolvimento. O UniswapV2 tem um switch que pode controlar se deve dividir 1/6 da taxa de transação de 0,3%, que é 0,05% da taxa total, para a equipe de desenvolvimento. A fim de não afetar as taxas de transação, esta taxa só será calculada ao aumentar / diminuir a liquidez.

  • A emissão adicional de tokens de liquidez (ações do pool) suporta transações de metadados.

  • UniswapV2 é escrito em Solidity em vez de Vyper.

  • Reconstrução do contrato. O UniswapV2 minimiza o contrato do par de negociação, retendo apenas a função de troca e a função de proteção do provedor de liquidez, ao mesmo tempo que economiza a última quantidade de cada ativo. Outras funções são colocadas no contrato de roteamento externo. Em V2, o negociador deve enviar o ativo correspondente (token) para o contrato do par de negociação antes de chamar a função de troca, e o contrato do par de negociação não importa como o ativo é enviado.

    • Ajuste as taxas de transação. Na versão V1, apenas o valor do pagamento é reduzido antes de realizar o produto constante, como :, (x1 - 0:003 * xin)) * y1 >= x0 * y0enquanto na versão V2, devido à existência de Flash Swaps, a fórmula é ajustada para (x1 - 0:003 * xin) * (y1 - 0:003 * yin) >= x0 * y0.
    • sync () e skim (). sync () é usado para sincronizar o número de ativos armazenados em cache no contrato com o valor atual do contrato, para restringir os ativos, e é usado principalmente para lidar com situações em que o índice é muito irracional e não há provedor de liquidez para regredir. skim () é usado para lidar com a situação em que o valor de um certo ativo no contrato é maior do que o valor máximo de uint112 (consulte a descrição do formato UQ112.112). Permite ao usuário propor a diferença entre o valor atual do ativo do contrato e o valor máximo de uint112.
  • Lide com tokens não padronizados e usados ​​com pouca frequência. O contrato de token ERC20 padrão precisa retornar um valor booleano para indicar o sucesso após a transferência do token. Mas nem todos os tokens fazem isso e alguns não fornecem um valor de retorno. Na versão V1, a transferência de tokens sem valor de retorno falha por padrão e toda a transação será redefinida. UniswapV2 considera a transferência de tokens sem valor de retorno como uma transferência bem-sucedida. Além disso, a transferência de sinal a versão V1, supõe-se não irá provocar a re-entrada da transação, mas esta suposição é apoiada ERC777pelo hooksnúmero de fichas ERC20 quebradas. Para oferecer suporte a esse token, a versão V2 adiciona uma função anti-reentrada a todas as funções públicas que alteram as variáveis ​​de estado locke também evita a reentrada de callbacks definidos pelo usuário em Flash Swaps.

  • Suporte para inicialização de liquidez. Ao fornecer novamente liquidez para um par de negociação que já possui liquidez, é fácil calcular a nova liquidez com base no índice atual. Mas quando a liquidez é fornecida pela primeira vez, o denominador desse índice é 0, o que não é mais aplicável. O que fazer agora? Na versão V1, o valor de liquidez inicial é diretamente igual ao valor ETH fornecido durante a inicialização. Essa abordagem tem sua racionalidade e suas desvantagens, ou seja, depende muito do índice de liquidez inicial (o índice é arbitrário), não havendo mecanismo para garantir que esse índice seja consistente com o preço real. Na versão V2, o par de negociação é ERC20 / ERC20, o que significa que não há ETH. Portanto, a inicialização da liquidez usa a seguinte fórmula:
    S cunhado = X depositado ⋅ Y depositado S_ {cunhado} = \ sqrt {X_ {depositado} \ cdot Y_ {depositado}}Sm i n t e d=Xd e p o s i t e dYd e p o s i t e d
    A fórmula acima garante que a participação da carteira de liquidez nunca será inferior à média geométrica das reservas da carteira. Mas isso também fará com que o valor aumente com o tempo. Para reduzir esse efeito, o UniswapV2 queima a fluidez inicial de 1e-15, que é 1000 vezes a fluidez mínima (1e-18). Isso é trivial para qualquer par de negociação, mas aumenta muito o custo dos invasores que usam essa influência para lucrar.

  • Pacote ETH. A interface para negociar a moeda nativa ETH no Ethereum é diferente da interface para negociar ERC20. Portanto, muitos outros protocolos não oferecem suporte a ETH, mas, em vez disso, oferecem suporte a uma alternativa ao WETH (um token que envolve o ETH). UniswapV1 é uma exceção porque seu par comercial contém diretamente ETH. Como V2 é qualquer par de negociação ERC20, o suporte a ETH nativo complicará as coisas e aumentará os riscos. Portanto, ETH não é compatível com V2 e os usuários devem mudar para WETH antes de usar o par de negociação. Na verdade, o UniswapV2 converte automaticamente o ETH fornecido pelo usuário em WETH internamente.

  • Endereço determinístico do par de transações. Independentemente de V1 ou V2, todos os pares de negociação são criados por uma única fábrica. Em V1, o createcódigo de operação é usado e a transação criada é afetada pela ordem em que a transação é criada. Em V2, um novo opcode é usado create2e o endereço que ele gera é determinístico, o que significa que o endereço do par de transações pode ser calculado fora da cadeia sem a necessidade de verificar o status da cadeia.

  • O número máximo de tokens. Para implementar com eficiência a função oracle, UniswapV2 usa uint112 para salvar o número de tokens, ou seja, ele suporta apenas um máximo de 2 ^ 112-1 tokens. Esse valor também é suficiente para uma moeda com uma precisão de 18, que é aproximadamente 5192296858534828 (5,19e15), que é 5,19 petaflops. Se o valor do registro no contrato exceder esse valor, a transação reportará um erro.Como mencionado anteriormente, qualquer pessoa pode usar a função skim () para recuperar e remover o excesso de ativos na carteira de liquidez.

Quatro, terminologia

O conteúdo desta seção vem de documentos oficiais do Uniswap.

  • Fabricante automático de makert (criação automática de mercado). É essencialmente um contrato inteligente no Ethereum, que economiza alguns ativos e os usuários negociam ativos de acordo com o preço calculado automaticamente por um algoritmo específico.
  • Fórmula de produto constante (fórmula de produto constante). O algoritmo de criação de mercado automático usado pelo Uniswap é semelhante X * Y = K.
  • ERC20. O token ERC20 é um token homogêneo empilhável no Ethereum. Uniswap suporta todas as implementações ERC20 padrão.
  • Fábrica. Um contrato inteligente, que é usado para implantar um contrato inteligente exclusivo (específico) para cada par de transações ERC20.
  • Par. Par de transações, um contrato inteligente implantado pela Factory para negociar dois tokens ERC20.
  • Piscina. Um pool de liquidez de todos os provedores de liquidez em um par de negociação.
  • Provedor de liquidez / LP. Provedores de liquidez referem-se àqueles que prometem dois tokens ERC20 em valores correspondentes ao pool de liquidez de um par de negociação. O provedor de liquidez assume o risco de perda de preço, como compensação, pode obter a parcela correspondente da taxa de manuseio.
  • Preço médio. O preço médio pelo qual os jogadores compram e vendem tokens em um determinado momento. No Uniswap, é a proporção do número de dois tokens no par de negociação.
  • Impacto no preço. A diferença entre o preço médio e o preço de execução real da transação.
  • Slippage. Slippage. Em um par de negociação, a quantidade de movimento entre o preço quando uma determinada transação é submetida e o preço após a transação ser executada.
  • Testemunho. O contrato básico necessário para Uniswap. A atualização para a nova versão do contrato principal requer migração de liquidez.
  • Periferia. Contratos periféricos. Um contrato externo que é útil para Uniswap, mas não necessário para Uniswap. Não há necessidade de migração de liquidez na implantação de novos contratos de periféricos.
  • Troca de Flash. Um tipo de gasto antes de pagar pela transação.
  • Invariante. Imutabilidade. Refere-se ao algoritmo de produto constante que Knão muda durante a negociação.

Acho que você gosta

Origin blog.csdn.net/weixin_39430411/article/details/108665694
Recomendado
Clasificación