O DEATHStr começou de forma caótica. Infelizmente, perdi a corrida inicial, mas encontrei um problema que foi negligenciado, o qual divulguei à equipe e agora está corrigido. O DEATHStr foi projetado para comprar NFTs e listá-los 20% mais baratos, com a intenção de derrubar os preços mínimos dos NFTs em benefício do próprio DEATHStr (os lucros são usados para comprar e queimar o token). No entanto, não há atraso ou outro mecanismo para impedir uma arbitragem pura - qualquer pessoa que possua um Moonbird poderia efetivamente colher 20% das taxas do contrato a qualquer momento. A função acima é suficiente para qualquer detentor de Moonbird tomar de forma atômica e sem risco 20% das taxas disponíveis do DEATHSTR. Em ordem, ela: - Determina as taxas disponíveis - Gera uma listagem no Seaport para esse valor - Diz ao DEATHSTR para comprar essa listagem - Lê o preço que o DEATHSTR listou o NFT (deve ser um desconto de 20%) - Compra o NFT de volta O usuário acaba com o mesmo NFT com que começou, + um pouco de ETH fresco. Isso poderia ser executado enquanto `currentFees() * 0.2` resultasse em mais do que o gás para executar. Solução sugerida: implementar um atraso de um bloco antes que um NFT possa ser comprado de volta do DEATHSTR. Isso remove a atomicidade e faz com que qualquer NFT vendido para o protocolo tenha uma chance justa de ser comprado por qualquer pessoa no mundo, então vender por qualquer valor abaixo do mínimo se torna de repente um risco, e provavelmente uma perda garantida para o usuário. Por enquanto, a equipe simplesmente adicionou controle de acesso à buyTargetNFT, para que apenas endereços aprovados possam acionar compras. Isso é aceitável a curto prazo, mas adoraria ver uma solução mais aberta a longo prazo.
Considero isso mais um problema narrativo do que mecânico. O DEATHSTR ainda é comprado e queimado da mesma forma, no entanto, já não há nenhum aspecto que possa ser considerado um "ataque" aos andares de nft. Na verdade, desconecta-o completamente da coleção que está a visar, além do fato de que o arbitrador deve possuir um nft da coleção alvo para poder colher as taxas.
34