A exchange descentralizada (DEX) Lifinity teve sua pool LFNTY-USDC drenada por um bot de arbitragem em 8 de dezembro, resultando em uma perda de US$ 699.090. Segundo o canal Discord da Lifinity, uma resposta inesperada a uma negociação malsucedida causou a perda.
Um membro central da Lifinity, conhecido como Durden, explicou que um bot tentou uma negociação de arbitragem seguindo a rota USDC > xLFNTY > LFNTY > USDC, tentando lucrar com discrepâncias de preço entre diferentes pares de negociação.
Here's how the events transpired in the @Lifinity_io Discord when the 700k arb happened
I noticed something wrong with LFNTY's price and alerted zoro, one of the devs on the platform.
At first glance, it appeared that the protocol had gotten hacked pic.twitter.com/ebXfK9pDW3
— Shardo (@DrashoWho) December 8, 2023
O bot iniciou uma ordem de mercado Immediate-or-Cancel (IOC) no Serum v3, um tipo de ordem que deve ser executada imediatamente ao preço de mercado atual se preenchida. Ordens que não podem ser preenchidas imediatamente são canceladas.
Explicação técnica do incidente
‘Mas, em vez de retornar um erro, como a maioria dos programas faz, ele retornou 0 quantidade para fora. Nossas pools processaram a 0 quantidade para dentro e também retornaram 0 quantidade para fora’, observou Durden, antes de explicar que isso levou o programa a atualizar o último preço da transação para 0, fazendo com que o próximo preço inicial também fosse 0.
‘Como é uma curva CP, o preço real não será 0, mas a pool ofereceu um preço extremamente baixo, resultando no esvaziamento logo depois.’ A Lifinity v1 é um market maker automatizado (AMM), o que significa que usa algoritmos para criar liquidez em pares de negociação.
Segundo Durden, ela depende do market maker de produto constante (CPMM), um tipo específico de modelo AMM, para manter um equilíbrio entre duas quantidades de token em uma pool de liquidez.
Resposta da Lifinity e medidas tomadas
Outras exchanges descentralizadas, como Uniswap e Bancor, também usam esse modelo. A Lifinity v1 não suporta uma curva de produto constante (CP) padrão usada em CPMMs tradicionais, mas pode replicar sua função.
Uma das soluções usadas para replicá-la foi chamar uma função de ‘último preço’ para o próximo preço inicial. No entanto, como o bug retornou um preço de 0, o bot conseguiu explorar a discrepância e esgotar os fundos.
A equipe da Lifinity está trabalhando para reintroduzir liquidez na pool, revisando o código do protocolo e tentando recuperar os fundos. Negociações resultando em 0 quantidades não são mais aceitas.