The shape of the problem
When we built monsoon, the airdrop farming framework, we ended up with three pieces that turned out to be far more general than airdrops: a curated registry of protocols with metadata (chain, category, criteria, contracts), a scorer that asks "does this wallet meet these criteria," and a tracker that follows wallets across chains and aggregates protocol signals.
Then we kept needing the same three pieces in places that have nothing to do with airdrops:
- Due diligence — "which wallets actually use this protocol? what's the smart-money overlap with our portfolio?"
- Treasury monitoring — "track the protocols this whale prefers; alert if exposure shifts."
- Wallet reputation — "is this address a real user or a sybil?" as input to lending allowlists.
- Allowlist gating — "does this wallet meet our criteria for the closed beta?"
- Governance intel — "where is this delegate active across protocols?"
- Ecosystem mapping — protocol relationships derived from shared user bases.
The shape of the problem is the same in all of them. So we pulled the three pieces out into kcolbchain/scout and started consuming them from monsoon.
What scout is
Three composable parts, deliberately decoupled from any single use case:
- Registry — a curated, queryable database of protocols. Loaded from YAML so you can edit, fork, and contribute without code changes.
- FitScorer — scores any wallet against any target's criteria (0–100 with met / missing / recommendations breakdown).
- WalletTracker — follows wallets across chains, aggregates protocol signals. Etherscan v2 multichain backend by default;
ActivityBackendis a 3-line interface for plugging in Alchemy / Covalent / your own indexer.
from scout import Registry, FitScorer, WalletTracker
reg = Registry.load()
linea = reg.get("Linea")
score = FitScorer().score(my_wallet, linea)
print(score.score, score.grade, score.recommendations)
Data lives in YAML, not in code
The whole point of a curated database is that it gets curated. We put the target list, alpha-wallet list, and known-contracts map in scout/data/ as plain YAML. Editing them doesn't require touching Python. PRs adding entries are welcome — keep them factual and cite a source in the notes when possible.
What scout is not
- Not a trading bot. Read-only intelligence. Never signs or broadcasts transactions.
- Not an airdrop farmer. monsoon is the farming agent; scout is the research substrate it consumes.
- Not a graph database. Single Python module, YAML data, no service to run.
- Not opinionated about backends. Etherscan v2 is the default; bring your own.
Why split?
Two reasons. First, honesty about scope: when monsoon's most useful component is wallet-and-protocol intelligence, calling the whole thing "an airdrop framework" undersells the part that has reuse. Second, composability: by giving scout its own surface area, anyone (including future kcolbchain projects) can pull it in for due diligence, lending, governance, or research without inheriting monsoon's farming-specific scaffolding.
Full reference at docs.kcolbchain.com/scout.
Source and issues: GitHub.
Install: pip install scout-onchain.