Sistema de custodia reativa para wallets operacionais da propria empresa, com foco em micro-residuo economicamente positivo.
O sistema nao procura apenas saldo grande. Ele monitora:
- taxa
- troco
- sobra
- residuo
- farelo do giro
Regra central:
valor_residual_total = nativo + tokens_em_eth
custo_total = gas_estimado * gas_price
valor_liquido = valor_residual_total - custo_total
executa se valor_liquido > margem_minima
Condicoes adicionais:
- ha saldo nativo suficiente para executar
MIN_BALANCEe apenas reserva minima operacional- o destino da tesouraria precisa bater com o
forwarder - a politica do ativo precisa permitir
O projeto diferencia tres classes:
nativestableother-token
Cada classe pode ter thresholds proprios:
NATIVE_MIN_NET_PROFIT_ETHNATIVE_MIN_ROI_BPSENABLE_NATIVE_SWEEPSTABLE_MIN_NET_PROFIT_ETHSTABLE_MIN_ROI_BPSENABLE_STABLE_SWEEPOTHER_TOKEN_MIN_NET_PROFIT_ETHOTHER_TOKEN_MIN_ROI_BPSENABLE_OTHER_TOKEN_SWEEP
Tokens monitorados aceitam:
address:decimals:price_ethsymbol:address:decimals:price_ethsymbol:class:address:decimals:price_eth
Exemplo:
MONITORED_TOKENS_ETHEREUM=USDC:stable:0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eb48:6:0.00032,WETH:other:0xC02aaA39b223FE8D0A0E5C4F27eAD9083C756Cc2:18:1.0A fila prioriza:
- maior valor liquido residual
- maior ROI
- maior antiguidade
Nao e FIFO puro.
O dashboard agora mostra:
- candidatos residuais ativos
- recorrencia por wallet
- lucro detectado acumulado
- lucro realizado acumulado
- score de residuo recorrente
- status do fallback publico
DISABLE_PUBLIC_FALLBACK=truedeve ser o padrao em producaoBOT_MODE=shadowe o ponto de partidapaperdeve operar com allowlist e teto baixoliveexige destino validado, latencia medida e politicas calibradas
Partir de algo conservador:
MIN_NET_PROFIT_ETH=0.001
MIN_ROI_BPS=500
MIN_SCAN_INTERVAL_MS=250
MAX_SCAN_INTERVAL_MS=1500
WALLET_COOLDOWN_SECS=20
QUEUE_DEDUPE_SECS=10
DISABLE_PUBLIC_FALLBACK=trueDepois ajustar conforme ruido real, custo medio de gas e tamanho dos residuos.
Existe um benchmark manual da fila em src/queue.rs.
Rodar com carga padrao:
cargo test benchmark_queue_throughput_for_large_bursts -- --ignored --nocaptureAjustar carga e limite esperado:
QUEUE_BENCH_ROUNDS=5000 QUEUE_BENCH_WALLETS=400 QUEUE_BENCH_MAX_MS=8000 cargo test benchmark_queue_throughput_for_large_bursts -- --ignored --nocaptureO teste imprime:
total_jobselapsed_msjobs_per_sec
Se elapsed_ms passar do limite configurado em QUEUE_BENCH_MAX_MS, o teste falha.
Para medir os gargalos reais de RPC e relay sem entrar no loop do monitor:
RUN_NETWORK_BENCHMARK=true cargo run -- --network ethereumO benchmark mede por endpoint:
get_block_numberget_gas_priceget_balances_batchget_transaction_count
Preferencia de rota em producao:
RPC_READ_PREFERENCE=auto|alchemy|infuraRPC_SEND_PREFERENCE=auto|alchemy|infura
Saida:
avgp50p95- contagem de erros
Ajustes:
RUN_NETWORK_BENCHMARK=true NETWORK_BENCHMARK_SAMPLES=20 NETWORK_BENCHMARK_WALLETS=40 cargo run -- --network ethereumProbe opcional do relay Flashbots:
RUN_NETWORK_BENCHMARK=true NETWORK_BENCHMARK_BUNDLE=true NETWORK_BENCHMARK_BUNDLE_SAMPLES=3 cargo run -- --network ethereumEsse probe de send_bundle fica desligado por padrao porque envia um bundle real ao relay para medir round-trip.