Módulos

Async Monitor

Versão async-native do MonitorAgent para uso com FastAPI e WebSocket.

O AsyncMonitorAgent é a versão async do MonitorAgent. Usa asyncio.sleep e asyncio.to_thread internamente — nunca bloqueia o event loop, ideal para FastAPI e handlers WebSocket.

Importação

from arc_devkit.agents.async_monitor import AsyncMonitorAgent

Uso com await

monitor = AsyncMonitorAgent(
    watched_address="0xWallet",
    interval_seconds=10,
    min_change_wei=0,
)

async def run():
    result = await monitor.execute(
        callback=lambda event: print(event),
        max_iterations=100,
    )

Generator assíncrono

Ideal para handlers WebSocket — itera indefinidamente até stop():

async def stream_to_websocket(websocket):
    async for event in monitor.event_stream():
        await websocket.send_json(event)

WebSocket via REST API

O Arc DevKit expõe um endpoint WebSocket pronto para uso:

WS /agents/monitor/{address}?interval=15&min_change_wei=0

Conectando via JavaScript

const ws = new WebSocket(
  "ws://localhost:8000/agents/monitor/0xYourWallet?interval=10"
)

ws.onmessage = (e) => {
  const event = JSON.parse(e.data)

  if (event.event_type === "native") {
    console.log(`Balance change: ${event.change_wei} wei (${event.type})`)
  } else if (event.event_type === "erc20_transfer") {
    console.log(`USDC ${event.type}: ${event.value_atomic} atomic units`)
  }
  // event_type === "ping" → heartbeat, sem ação necessária
}

Referência da API

AsyncMonitorAgent(watched_address, interval_seconds, min_change_wei)

ParâmetroTipoPadrãoDescrição
watched_addressstrEndereço a monitorar
interval_secondsint10Intervalo entre polls
min_change_weiint0Mudança mínima para emitir evento

execute(callback, max_iterations=None)

Executa o loop de polling assíncrono.

ParâmetroTipoDescrição
callbackcallableFunção sync ou async chamada em cada evento
max_iterationsint | NoneLimite de iterações (None = infinito)

event_stream()

Retorna: AsyncGenerator — gera eventos indefinidamente até stop().

stop()

Sinaliza o loop para parar.

Estrutura dos eventos WebSocket

CampoDescrição
event_type"native", "erc20_transfer" ou "ping"
addressEndereço monitorado
type"credit" ou "debit"
balance_weiSaldo atual em wei
change_weiVariação assinada
tx_hashHash da tx (eventos ERC-20 apenas)

Heartbeat

O endpoint WebSocket envia um {"event_type": "ping"} a cada ciclo sem eventos. Isso mantém a conexão viva e indica que o monitor está ativo.