SSRN 7157638 · estudo do livro ao vivo da Aave v3
Publicado · SSRNLiquidation Without Loss
A Live-Book Decomposition of Aave v3
Lido como um número de perda, o valor em risco de um livro em loop superestima sem limite a exposição de um protocolo de crédito. Este artigo separa as três quantidades que um teste de estresse colapsa em uma, deriva a profundidade em que volume poderia virar perda e dimensiona os canais que de fato fazem essa conversão. Tudo abaixo roda sobre um único bloco ao vivo da Ethereum: 17.419 tomadores, US$ 6,5 bi de dívida.
Parceiros de dados
A Bitquery forneceu os logs de eventos e as enumerações de tomadores, incluindo o livro pré-evento da Aave v2 usado no teste fora da amostra. A CoinGecko Pro forneceu as marcações diárias de preço por trás da cesta de covariância e das reconstruções de eventos. Ambas concederam acesso de API como patrocinadoras deste trabalho.
Ver no SSRN
SSRN 7157638 · 51 páginas
Código de replicação e engine
github.com/DaruFinance/defi-param-stress
O que o artigo estabelece
O RESULTADO
US$ 1,38 bi elegível, US$ 0 perdido
Uma desancoragem de 5% na fatia de liquid staking de 1.437 posições sinaliza US$ 1,38 bi como elegível para liquidação. Cerca de metade disso transaciona e, no núcleo puro de loops de US$ 1,357 bi que a engine percorre, nada disso é capital que o protocolo perde.
O MECANISMO
LT(1+b) < 1
Quando o limite de liquidação de uma categoria multiplicado pelo seu bônus fica abaixo de um, um loop que cruza HF = 1 é removido enquanto seu colateral ainda cobre a dívida acrescida do bônus. A Aave satisfaz isso nas oito categorias de e-mode ativas.
O CONTROLE
Rompa a trajetória, não a profundidade
A perda exige um salto discreto de preço, um oráculo defasado ou um pool raso demais para absorver a apreensão. Profundidade sozinha não a produz. Portanto as alavancas são os limites do oráculo e os tetos de oferta, não o limite de liquidação.
Três quantidades, não uma
Um teste de estresse imprime um número e uma mesa de risco o lê como perda. Em um livro em loop ele não é nem o volume que transaciona nem o capital que o protocolo perde, e as três quantidades se separam com nitidez quando o livro é percorrido por uma trajetória real de preços em vez de marcado em um único fundo.
Dívida elegível é a dívida em posições cujo fator de saúde cruza um. Sob um fator de fechamento parcial a posição é liquidada em partes: uma chamada paga uma fração da dívida corrente, a apreensão a recoloca acima do limite e ela pode cruzar de novo mais adiante. Assim a dívida elegível chega a cerca de duas vezes o pagamento executado, e no cluster ao vivo nenhuma posição é encerrada por completo.
Por que um loop está protegido contra o choque que todos testam
Um loop deposita um ativo, toma emprestado um ativo correlacionado e redeposita. A engine de estresse escala o fator de saúde real on-chain de cada posição por um movimento ponderado entre colateral e dívida, em que cada u é o valor em dólares daquela perna e o HF₀ on-chain já embute os limites de e-mode do protocolo. Escrita como razão, ela assume que as pernas de colateral compartilham um único limite de liquidação, o que vale para o núcleo puro de loops; a forma explícita por ativo carrega o limite de cada perna dentro do somatório de colateral:
O mecanismo fica visível na razão. Quando a classe do colateral é igual à classe da dívida, os fatores (1 + movimento) se cancelam e uma queda de mercado quase não altera o fator de saúde. O loop sobrevive. Uma posição direcional, cuja perna de dívida em stablecoin é mantida enquanto o colateral cai, absorve o movimento integralmente.
def shocked_hf(position, moves): """Scale the real on-chain HF by a collateral-vs-debt weighted move. We never re-derive a loan-to-value: HF0 is read from the chain and so already embeds whichever e-mode liquidation threshold the account selected. """ coll = sum(u * (1 + moves[a]) for a, u in position.collateral.items()) debt = sum(u * (1 + moves[a]) for a, u in position.debt.items()) coll_w = coll / sum(position.collateral.values()) debt_w = debt / sum(position.debt.values()) return position.hf0 * (coll_w / debt_w) # liquidatable iff < 1 # A loop holds the same class on both legs, so the move divides out:# hf0 * (1 + m) / (1 + m) == hf0 -> survives a market crash# A directional position holds a stable debt leg, so it does not:# hf0 * (1 + m) / (1 + 0) == hf0*(1+m) -> liquidatedÉ por isso que o número que um painel uniforme reporta para um livro em loop é uma convenção de netting e não uma propriedade do livro. Contra uma mesa que faz o netting corretamente, o modelo correlacionado e o contraste de mesma classe concordam dentro de 8% em toda severidade, 0,92× a −5%. As razões maiores de 6,53× e 9,13× medem o tamanho de uma omissão de netting. E o cancelamento não é artefato de como os ativos são agrupados: embaralhar o pareamento colateral-dívida derruba a razão de 9,13× para cerca de 1,3×, p = 0,0002 sob os dois esquemas.
A invariante que torna a liquidação sem perda
Um loop é liquidado sob os parâmetros do modo em que é mantido, e é aqui que uma leitura pode errar: o cluster ao vivo está no e-mode correlacionado a ETH, cujo bônus de categoria é 1%, não o bônus de 6% da reserva wstETH. Lido do contrato Pool, o par é LT 0,95 com b = 0,01.
Um liquidante que apreende colateral no valor do pagamento acrescido do bônus é limitado ao colateral que a posição ainda detém. Assim um déficit só pode abrir quando o colateral deixa de cobrir essa apreensão acrescida, o que dá a condição diretamente:
Com LT 0,95, alcançar o regime de perda no cruzamento exigiria um bônus acima de 5,26%, cinco vezes o que a Aave define. Cada uma das oito categorias de e-mode ativas fica entre 0,876 e 0,960, e o par da reserva wstETH é 0,859. Isso não é um fio de navalha, e é por isso que o US$ 0 é estrutural em vez de um achado empírico de robustez.
Onde o volume poderia virar perda
A distância entre volume e perda só se torna acionável quando se pode dizer onde ela termina. Um loop que deposita colateral C ao limite LT contra dívida D tem fator de saúde on-chain HF₀ = C·LT/D, e uma desancoragem de profundidade f marca o colateral para baixo contra a perna de dívida mantida. Duas profundidades importam, e o ponto de ruptura é a maior delas:
O primeiro termo é onde o fator de saúde chega a um e a liquidação se torna elegível. O segundo é onde a apreensão acrescida do bônus deixa de ser coberta e a dívida irrecuperável do protocolo começa. A perda não pode começar antes de o loop ser sequer liquidável, então D* é o máximo. Em termos de alavancagem, ambos encolhem conforme o loop se alavanca.
def d_star(leverage, lt, bonus): """Depth at which a de-peg stops being volume and can become loss. f_hf the loop becomes liquidation-eligible (HF reaches 1) f_exh collateral stops covering the bonus-grossed seizure """ hf0 = lt * leverage / (leverage - 1) f_hf = 1 - 1 / hf0 # == 1 - (L-1)/(L*LT) f_exh = 1 - (1 + bonus) * lt / hf0 # == 1 - (1+b)(L-1)/L return max(f_hf, f_exh), f_hf, f_exh # The live ETH-correlated e-mode anchor: ~12x leverage, LT 0.95, 1% bonusd, f_hf, f_exh = d_star(12, 0.95, 0.01)# f_hf = 0.0351 eligible at a 3.5% de-peg# f_exh = 0.0742 loss cannot begin before 7.4%# d = 0.0742 -> a 3.9-point band of pure liquidation volumePara a âncora de e-mode ao vivo, a cerca de 12× de alavancagem, o loop se torna elegível para liquidação em 3,5% mas só começa a perder em 7,4%: uma faixa de 3,9 pontos em que a desancoragem produz puro fluxo. A mediana ao longo da fatia ao vivo é 6,9%, e 8,8% ponderada por dívida. A forma fechada reproduz o início da perda da engine de cascata dentro de um passo de grade, no máximo 0,02%, em todos os pontos verificados.
O que de fato converte volume em perda
Como todo loop ao vivo está no regime com folga de solvência, uma desancoragem contínua mais profunda não converte volume em perda. O loop é removido no seu próprio cruzamento, ainda solvente, em qualquer profundidade. Percorrido por um deslizamento contínuo, o loop âncora registra US$ 0 de 2% a 20%. O que converte é uma ruptura da trajetória, e cada canal pode ser dimensionado na mesma engine.
O canal que morde primeiro não é o dramático. Um salto discreto largo o suficiente para pular a fronteira não registra nada até 8%. A liquidação parcial em um pool finito registra US$ 3,01 mi num salto de 5%, onde uma liquidação integral em um pool profundo registra zero, porque a posição fica submersa ao longo de várias rodadas enquanto cada venda forçada deprime o preço para a seguinte. Essa cifra é um limite superior do canal: a Aave promove o fator de fechamento a 100% abaixo de um limiar de fator de saúde, e um único fechamento integral evita a depressão em múltiplas rodadas. A defasagem de oráculo medida em junho de 2022 multiplica um salto de 8% de US$ 0,58 mi para US$ 5,13 mi na cauda de defasagem profunda.
# One liquidation call, inside the cascade to a fixed point.# Two caps carry the whole result. # Aave's cap. Note close_factor is promoted to 1.0 below a health-factor# threshold, so the partial-round case below is the worst case, not the only one.repay = position.debt * close_factorseize_value = repay * (1 + bonus) # bonus-grossed # A position cannot be seized for more collateral than it still holds,# so a loop liquidated over several rounds never over-seizes.available = position.collateral - position.seizedseized = min(seize_value, available) position.debt -= repayposition.seized += seized # Loss is the residual, and it only opens once the grossed seizure# stops being covered: bad_debt = D - C(1 - f)/(1 + b)if seized < seize_value: bad_debt += repay - seized / (1 + bonus) # Selling the seized collateral into a finite x*y=k pool moves the mark# for the next round. With close_factor < 1 the position sits underwater# across rounds, and that is the channel that books loss at gaps a# deep-pool boundary treats as harmless.price *= constant_product_impact(seized, pool_reserves)A profundidade do mercado secundário define a magnitude e antecipa o início: para um cluster disperso o início cai de 6,05% contra um pool infinitamente profundo para 2,10% quando o pool é finito, e a perda realizada em um salto fixo de 15% sobe de US$ 30,2 mi para US$ 695,7 mi contra um pool de US$ 1 bi. Os loops não perdem porque são liquidados. Eles perdem se o mercado em que são liquidados for raso demais para absorver a apreensão.
Quando a venda forçada move a própria paridade
A objeção mais afiada a ler US$ 1,38 bi como volume é que ela assume que a venda se resolve sem mover a paridade. Para um token de liquid staking a paridade é um preço de mercado secundário, então o colateral despejado deprime exatamente a razão que o marca. Fechando esse laço endogenamente no cluster ao vivo, com a fila de resgate congelada, um choque acima do gatilho de 0,19% do loop mais alavancado leva a paridade a cerca de 3% do par, uma desancoragem de aproximadamente 97%.
Mesmo ali o protocolo registra US$ 0, porque cada loop é removido no seu próprio cruzamento solvente antes de a paridade passar por ele. O perigo sem um backstop é o colapso do mercado do token, que prejudica seus detentores, e não um buraco no balanço do protocolo. Com a fila ativa, a arbitragem de resgate limita a desancoragem inteiramente abaixo da região de descontrole.
O que isso muda para um comitê de parâmetros
A recomendação do artigo se divide pelo eixo que decide quais parâmetros sequer se aplicam. Uma posição em wstETH mantida sob a categoria correlacionada a ETH é governada pelo limite da categoria, então uma mudança no limite da reserva não a alcança. Das 1.723 contas com colateral em wstETH, 56 estão em um limite efetivo que só aquela categoria alcança; as 1.667 restantes são precificadas pela reserva.
- Cortar o limite da reserva de 0,81 em direção a 0,59 eleva o valor em risco sob desancoragem de 5% das contas em modo reserva de US$ 16,9 mi para US$ 144,1 mi, uma alta de oito vezes, sem remover qualquer perda realizada. Não há nenhuma nesse segmento para remover.
- A categoria de e-mode é onde a cauda vive, e ali os controles operacionais são o teto de oferta e um backstop de saque ativo, nenhum dos quais uma mudança de limite oferece.
- Os limites de desvio e de heartbeat do oráculo governam os canais de salto e defasagem, que é por onde a perda de fato entra.
- Tetos de oferta dimensionados pela profundidade do mercado secundário governam o canal de liquidação parcial, o que registra perda em saltos que a fronteira de pool profundo trata como inofensivos.
Dito de forma direta: o limite de liquidação não é a alavanca. Ele define onde o volume começa, e volume não é o que custa dinheiro ao protocolo.
Por que o zero da engine é confiável
Um resultado de exatamente zero convida à pergunta de se a engine é capaz de registrar qualquer perda. Ela é, e o artigo dedica parte de sua extensão a demonstrar isso em vez de afirmá-lo.
- A mesma engine registra perda realizada grande quando a trajetória é rompida: vendido em um pool finito de US$ 2 bi, o cluster disperso registra US$ 203 mi a partir de cerca de 3% de desancoragem. Note qual fronteira foi ultrapassada. Ela supera o início de pool finito de 2,10%, não o D* de pool profundo de 6,05%, porque um pool finito antecipa o início. Portanto o US$ 0 é o valor da curva abaixo do seu ponto de ruptura, não um piso do qual o código não consegue sair.
- Três episódios reais reconstroem para o mesmo lugar. O mais exigente é um livro pré-evento de stETH na Aave v2, obtido de estado arquival antes da desancoragem de junho de 2022 e percorrido pela trajetória real da paridade: ele registra US$ 0 contra a perda realizada desprezível do protocolo. Uma reconstrução separada por recibos do mesmo episódio também registra US$ 0 na trajetória, e ali um retrato de fundo único teria levantado um falso alarme de US$ 25,1 mi. As duas construções são mantidas separadas no artigo e concordam no zero.
- O contrafactual do USDC de março de 2023 sinaliza US$ 0,3 mi em 26 posições contra US$ 0 realizado, e essas 26 reconciliam exatamente com a reconstrução do oráculo travado.
- O kernel quente é em Rust com uma referência em Python e um gêmeo em Numba, numericamente equivalentes dentro de 1e-9; a diferença absoluta máxima observada é cerca de 2,3e-13 em um teste de 300 casos.
- As sementes são fixadas em 20260609 e as threads de BLAS são fixadas em uma antes de o numpy ser importado. Os esquemas de permutação, os testes de fortalecimento e suas regras de veredito estão escritos em um plano de análise com hash travado. O artigo é cuidadoso quanto ao que isso garante: o hash certifica a integridade do plano, não a sua prioridade no tempo, já que a data de travamento é autodeclarada e os arquivos entram no histórico do git quatro dias depois. O teste do livro pré-evento foi adicionado após o travamento e está rotulado como tal.
A mesma engine, sobre uma perda que aconteceu
Em novembro de 2022 uma conta tomou emprestado 92 milhões de CRV contra colateral em USDC e a posição virou. Enquanto o token era pressionado para cima, a liquidação não conseguiu quitar a dívida rápido o suficiente: os liquidantes pagaram 89,6 mi de CRV, o colateral acabou e 2,39 mi de CRV de dívida ficaram de pé. O artigo deliberadamente não publica nenhuma cifra de profundidade ou slippage para este episódio, porque o ajuste de impacto de preço durante a pressão teve R² negativo, e um número que uma constante superaria é pior do que nenhum número.
Esse residual, ao preço vigente de US$ 0,693, é a perda: US$ 1,65 mi modelado contra cerca de US$ 1,60 mi realizado on-chain, um erro de 3,4%. Esta é a imagem espelhada do resultado de desancoragem e sai do mesmo kernel. Quando o custo de liquidar supera o bônus de liquidação, a liquidação trava e o residual se torna a perda do protocolo. Uma engine reproduz tanto um buraco real de US$ 1,6 mi quanto um US$ 0 real.
O que o US$ 0 cobre e o que não cobre
- A afirmação estrita vale para o núcleo puro de loops de US$ 1,357 bi. O 1,76% restante são posições de colateral misto cujas outras pernas carregam seus próprios parâmetros; a invariante torna US$ 0 o resultado esperado ali também, mas isso é divulgado em vez de incorporado.
- O retrato ao vivo carrega o limite de liquidação efetivo de cada conta, mas não a categoria de e-mode selecionada, então a pertinência é inferida do LT efetivo. A separação é limpa, com um amplo vazio entre os dois grupos, mas é um proxy.
- Dívida irrecuperável do protocolo igual a zero não é custo econômico igual a zero. As mesmas liquidações pagam o bônus aos liquidantes, impõem perdas reais aos tomadores liquidados e podem acionar compensação da DAO. A afirmação é sobre o balanço do protocolo.
- A varredura do limite da reserva aplica um limite mais baixo ao livro congelado de hoje, então mede o custo de transição de uma só vez, não o estado estacionário em que um limite permanentemente mais baixo se acomodaria.
Reproduzindo
A engine, o kernel em Rust, os scripts de aquisição, o harness de paridade, as fixtures congeladas e o pré-registro são publicados por completo. Os dados de mercado não são redistribuídos: o estado ao vivo vem de um RPC arquival público, os logs de eventos da Bitquery e as marcações de preço da CoinGecko Pro, com credenciais lidas do ambiente. Os números de destaque rodam sobre um retrato fixo e com hash, então as afirmações são verificáveis contra os insumos em vez de recoletadas de um clone sem chaves. github.com/DaruFinance/defi-param-stress
Citar
Trabalho relacionado
The de-peg engine’s credibility checks fit peaks-over-threshold GPD tails and a tail-dependence coefficient χ. That is the same machinery, implemented and demonstrated on its own, in Peaks-over-threshold and pairwise tail-coupling.

