kcolbchain / docs / scout

scout

On-chain wallet & protocol intelligence primitives. Registry, fit scoring, activity tracking.

scout is a small Python library for systematic on-chain research. Three composable parts:

Powering monsoon. scout is the intelligence substrate that monsoon consumes for airdrop research, but the primitives are useful far beyond airdrops. See use cases.

Install

pip install scout-onchain
# or, with the WalletTracker activity backend:
pip install scout-onchain[activity]

Quick Start

from scout import Registry, FitScorer, WalletTracker

# 1. Load the curated protocol registry
reg = Registry.load()
print(f"{len(reg)} targets across {len(reg.categories())} categories")

# 2. Filter
l2_targets = reg.filter(category="l2", confidence="high")

# 3. Score a wallet against a target
scorer = FitScorer()
linea = reg.get("Linea")
score = scorer.score(my_wallet, linea)
print(f"{score.target}: {score.score}/100 ({score.grade})")

# 4. Follow alpha wallets across chains
import asyncio
tracker = WalletTracker.load_alpha()
asyncio.run(tracker.refresh(chains=["ethereum", "arbitrum", "base"]))
print(tracker.protocol_signals())

Registry

The Registry is a queryable collection of Target objects, sorted by priority. Targets have a chain, category, confidence level, optional contract addresses, criteria, tags, and notes. The bundled registry ships with curated entries; you can also load your own YAML file.

reg = Registry.load()                 # bundled curated registry
reg = Registry.load(path="my.yaml")   # custom YAML

reg.get("Linea")                      # case-insensitive lookup
reg.filter(category="l2")             # filter by category
reg.filter(chain="ethereum")          # chain="multi" matches any
reg.filter(confidence="high")         # minimum confidence
reg.filter(tag="zkevm")               # filter by tag

reg.categories()                      # all categories
reg.chains()                          # all chains
reg.add(Target(...))                  # add programmatically
reg.mark("Linea", Confidence.CLAIMED) # update confidence

FitScorer

FitScorer scores any wallet (anything implementing the WalletLike protocol) against any target's criteria dict. Returns a FitScore with the numeric score, met/missing criteria, and actionable recommendations.

scorer = FitScorer()
score = scorer.score(wallet, target)

print(score.score)            # 0-100
print(score.grade)            # A/B/C/D/F
print(score.met)              # ["Bridge activity (5 txns)", ...]
print(score.missing)          # ["DEX swaps (have 2, need 5+)", ...]
print(score.recommendations)  # ["Swap on native DEXes on linea", ...]

# Score against many targets at once
scores = scorer.score_all(wallet, reg.filter(category="l2"))

Recognized criteria keys: bridge_volume, bridge_usage, cross_chain_messages, dex_swaps, dex_interaction, swap_volume, unique_months, restake_eth, bgt_staking, testnet_activity, lp_provision. Universal heuristics (chain diversity, gas spend, long-term activity) always apply.

WalletTracker

Follow wallets across chains and aggregate protocol signals. Useful for smart-money following, treasury monitoring, governance intel, ecosystem mapping.

import asyncio
from scout import WalletTracker

# Load the bundled alpha-wallet list
tracker = WalletTracker.load_alpha()

# Refresh activity across chains (requires ETHERSCAN_API_KEY)
asyncio.run(tracker.refresh(chains=["ethereum", "arbitrum", "base"]))

# Aggregate signals
tracker.protocol_signals()  # {"uniswap_v3": 12, "aerodrome": 7, ...}
tracker.chain_signals()     # {"arbitrum": 18, "base": 11, ...}

The default backend is Etherscan v2 (multichain unified API, requires API key). You can plug in your own backend by subclassing ActivityBackend — it's a 3-line interface.

Beyond airdrops

The primitives are deliberately decoupled from any single use case:

Use caseHow scout helps
Airdrop researchRegistry of unfunded protocols + criteria scoring + alpha following. monsoon's primary consumer.
Due diligenceTrack which wallets actually use a protocol; flag smart-money concentration.
Treasury monitoringFollow competitor / partner wallets, see which protocols they prefer.
Wallet reputationFitScorer as a sybil-resistance signal. Works as input to lending allowlists.
Allowlist gating"Does this wallet meet our criteria for the closed beta?"
Governance intelTrack delegates across protocols.
Ecosystem mappingProtocol relationships derived from shared user bases.

CLI

# List targets
python -m scout targets
python -m scout targets --category l2 --confidence high
python -m scout targets --chain ethereum

# Inspect one target
python -m scout get Linea

# Available categories
python -m scout categories

# Refresh alpha wallets and dump signals
ETHERSCAN_API_KEY=YOUR_KEY python -m scout follow

Data files

Curated assets live in scout/data/ as YAML so they can be edited and contributed to without touching code:

PRs adding entries are welcome. Keep them factual; cite a source in notes when possible.

GitHub Repository

Source code, issues, contributions

monsoon

Airdrop farming agents (powered by scout)

meridian

RWA market making agents