scout: on-chain wallet & protocol intelligence as a primitive

Wallet and protocol intelligence shows up in a lot of places that pretend to be unrelated. We split it out of monsoon into its own library so it can power them all.

scout
Open-source research artefact · MIT

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; ActivityBackend is 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.

Docs & code

Full reference at docs.kcolbchain.com/scout. Source and issues: GitHub. Install: pip install scout-onchain.