Seshat

Documentation

Developer Scoring

Developer Scoring

A composite 0–100 score measuring how credible, experienced, and active a token's creator is. The key insight: Seshat scores the actual developer or company behind the token, not the raw on-chain deployer wallet — which is often just a proxy or ops address. Three intelligence layers run in parallel during every 2-hour enrichment cycle.

Who gets scored — the creator-identity model

Every Bankr token has several distinct wallet identities. Seshat resolves the creator — the fee beneficiary — before scoring begins, rather than scoring the raw deployer.resolveCreatorWallet() picks the first real wallet in the order fee claimer → fee recipient → deployer (skipping blanks and anonymous stubs), so the on-chain claimer corroborates the configured recipient.

Deployer wallet

stored, not scored

The 0x address that signed the deploy transaction (tokens.deployer_wallet). Frequently a proxy, launcher, or ops wallet — kept literal for reference, used only as the last fallback when no fee identity is known.

Fee recipient

creator

Where creator fees are configured to flow (tokens.fee_recipient_wallet, from Bankr). This wallet — and its X handle — is the real creator and the primary enrichment + scoring target.

Fee claimer

confirmation

Who actually claimed fees on-chain (tokens.fee_claimer_wallet), captured from Alchemy/Bitquery claim events. When present it confirms the recipient and is preferred as the creator wallet.

Project / developer identity

qualitative

Who is really behind it — project name, company, and person/team — researched by ProjectResearcher (Claude + web search) from the creator's X handle and the open web. Stored on the token (identity_research); qualitative context, never fed into the numeric score.

Architecture — three scoring layers

50%

On-chain Track Record

OnchainIntelligence

Primary signal. Wallet age, total tx count, number of token launches, percentage that hit $100K+ market cap, fee claim engagement rate. Categorises developers into archetypes.

25%

Social Quality

FrontrunPro API + DeveloperBackground

KOL tier-weighted follower quality (who follows this developer on Twitter) blended with background pedigree (education, crypto depth, professional history). A Protocol CEO follower outweighs 1,000 generic followers.

25%

Activity Recency

BaseChainProvider

Is this developer still active? Combines last on-chain transaction (40%) and last tweet if available (60%). Rewards developers actively building in the ecosystem.

Layer 1 — On-chain Track Record (50%)

Powered by OnchainIntelligence. Runs once per developer during the 2-hour enrichment cron and persists an onchain_score to the developers table. Falls back to raw field estimates if analysis hasn't run yet.

Developer categories

Every developer is classified into one of six archetypes based on their on-chain history:

🏆
serial_builder

5+ launches, ≥40% hit $100K+, ≥50% claimed fees

active_builder

3+ launches with consistent success and fee engagement

🔬
experimenter

Multiple launches, iterating — mixed results

🆕
first_timer

Single launch or limited on-chain history

🚨
serial_rugger

Multiple launches, zero fee claims, multiple dumps

💤
dormant

Inactive — no transactions in 90+ days

// agents/onchainIntelligence.ts

function categorize(profile: WalletProfile): DeveloperCategory {
  const { totalLaunches, tokensAbove100k, tokensWithClaims, walletAgeDays, totalTxCount } = profile;
  if (totalLaunches === 0) return 'first_timer';

  const successRate = tokensAbove100k  / totalLaunches;
  const claimRate   = tokensWithClaims / totalLaunches;

  if (totalLaunches >= 5 && successRate >= 0.40 && claimRate >= 0.50) return 'serial_builder';
  if (totalLaunches >= 3 && successRate >= 0.30)                       return 'active_builder';
  if (totalLaunches >= 2)                                               return 'experimenter';
  if (claimRate === 0 && totalLaunches >= 3)                           return 'serial_rugger';
  if (walletAgeDays > 90 && totalTxCount < 5)                         return 'dormant';
  return 'first_timer';
}

Layer 2 — Social Quality (25%)

Social quality blends two sub-signals: KOL follower quality (50% of this layer) from the FrontrunPro API, and background pedigree (40%) from developer profile analysis. A raw follower count bonus contributes the remaining 10%.

FrontrunPro smart followers

Seshat uses the FrontrunPro API to look up smart follower data — who in the crypto/tech ecosystem follows this developer on Twitter. Lookups are done by Twitter handle (preferred) when the developer's handle is known, falling back to wallet address.

Followers are cross-referenced against a curated registry of 50+ notable accounts. The tier system means a single Protocol CEO follower contributes far more to the score than dozens of generic KOLs. Example: @vandynathan (BOND developer) has 93 smart followers including “GP@a16z”, “Founder@ElizaLabs”, and “binji | Ethereum FDN” — extremely strong signal.

🏛️
protocol_ceo1.00×

Vitalik, Jesse Pollak, Brian Armstrong, Dan Romero

🔵
base_ecosystem0.90×

Bankr, Clanker, Base official, Coinbase Wallet

💼
vc_partner0.85×

Paradigm, a16z crypto, Matt Huang, Haseeb Qureshi

🤖
agentic_researcher0.80×

Anthropic, OpenAI, Andrej Karpathy, Sam Altman

🔷
defi_lead0.75×

Hayden Adams (Uniswap), Stani Kulechov (Aave)

🏦
institutional0.75×

Coinbase exchange

kol_a0.60×

Cobie, 0xfoobar, Laura Shin, transmissions11

📢
kol_b0.40×

Emerging Base/DeFi influencers

// providers/frontrunpro.ts

// Preferred: lookup by Twitter handle (captures social reputation, not just on-chain activity)
// Fallback:  lookup by wallet address
const fp = twitterHandle
  ? await frontrunpro.getHandleIntelligence(twitterHandle)
  : await frontrunpro.getWalletIntelligence(walletAddress);

// Tier-weighted KOL quality score — 0 to 100
static kolQualityScore(kols: EnrichedKolAssociation[], smartCount: number): number {
  const tieredScore = kols.reduce((sum, k) => sum + k.influence_score, 0);

  // Categorical bonus for having tier-1 followers
  let bonus = 0;
  if (kols.some(k => k.tier === 'protocol_ceo'))       bonus += 25;
  if (kols.some(k => k.tier === 'vc_partner'))         bonus += 20;
  if (kols.some(k => k.tier === 'agentic_researcher')) bonus += 15;
  if (kols.some(k => k.tier === 'base_ecosystem'))     bonus += 10;

  // Raw smart count base — diminishing returns
  const smartBase = Math.min(30, Math.log10(Math.max(1, smartCount)) * 15);

  return Math.round(Math.min(100, tieredScore * 0.5 + bonus + smartBase));
}

Background pedigree (DeveloperBackground)

Analyses the developer's display name and on-chain data to infer education, professional history, and crypto experience depth. Display names often contain credentials (“Ph.D Candidate”, “ex-Google”, “ML researcher”) that are strong signals even before any social data is available.

// agents/developerBackground.ts

// Crypto depth from wallet age:
//   5+ years  → og_2017_earlier   (score: 100) — OG participant
//   4+ years  → early_2018_2020   (score: 80)
//   2-4 years → bull_2021         (score: 55)
//   6m–2y     → recent_2022_plus  (score: 30)
//   <6m       → very_new          (score: 15)

// Professional tier detection from display name keywords:
//   faang_research  → ex-Google, ex-Meta, OpenAI, Anthropic, DeepMind, Microsoft
//   notable_company → Coinbase, Ethereum Foundation, Paradigm, a16z, Uniswap Labs
//   academic        → Ph.D, Professor, Researcher, Harvard, MIT, Stanford
//   startup         → Founder, Co-Founder, CTO, Building, Shipping
//   independent     → everything else

// Green thumb flag — crypto newcomer (needs careful evaluation):
//   crypto_depth in (very_new, unknown)
//   AND no academic/professional signals
//   AND composite_background_score < 35

Layer 3 — Activity Recency (25%)

// agents/developerIntel.ts

private activityRecencyScore(dev: Developer): number {
  const now = Date.now();

  // On-chain recency — 40% of this layer
  let chainScore = 0;
  if (dev.last_on_chain_tx) {
    const days = (now - new Date(dev.last_on_chain_tx).getTime()) / 86_400_000;
    chainScore = days <= 7  ? 100
               : days <= 30 ? 70
               : days <= 90 ? 40
               : 10;
  }

  // Twitter recency — 60% of this layer (when available)
  let twitterScore = 0;
  if (dev.last_tweet_at) {
    const days = (now - new Date(dev.last_tweet_at).getTime()) / 86_400_000;
    twitterScore = days <= 7   ? 100
                 : days <= 30  ? 75
                 : days <= 90  ? 45
                 : days <= 180 ? 20
                 : 0;
  }

  if (twitterScore > 0 && chainScore > 0)
    return Math.round(twitterScore * 0.60 + chainScore * 0.40);

  return twitterScore || chainScore;
}

Composite formula

// agents/developerIntel.ts

const WEIGHTS = {
  onchain_history:  0.50,  // on-chain track record (OnchainIntelligence)
  social_quality:   0.25,  // KOL tier-weighting + background pedigree (FrontrunPro API)
  activity_recency: 0.25,  // last on-chain tx + last tweet
};

// Within social_quality (25% of composite):
//   kolScore     × 0.50   — tier-weighted FrontrunPro followers
//   bgScore      × 0.40   — education + crypto depth + professional history
//   followerBonus× 0.10   — raw Twitter follower count (minor bonus at scale)

composite = Math.round(
  onchainHistory  * 0.50 +
  socialQuality   * 0.25 +
  activityRecency * 0.25
)

Score interpretation

75–100

Very high confidence

Strong serial builder with proven track record, notable KOL followers, and active on-chain presence.

60–74

High confidence

Credible developer with solid on-chain history. Some gaps but mostly strong signals.

45–59

Medium confidence

Mixed signals. Worth monitoring but not a strong indicator on its own.

0–44

Low confidence

Little credibility — anonymous, first-timer, dormant, or serial rugger pattern detected.

Database fields

-- developers table (migrations 0001 + 0003 + 0004)

-- Identity
wallet_address         TEXT UNIQUE   -- primary key identity
twitter_handle         TEXT          -- feeRecipient Twitter (company) or developer handle
display_name           TEXT

-- On-chain (populated by OnchainIntelligence — 2h cron)
total_tokens_launched  INTEGER
tokens_above_100k      INTEGER       -- ever exceeded $100K mcap
tokens_with_fee_claims INTEGER
total_fees_claimed_usd REAL
launch_success_rate    REAL          -- 0-100
claim_engagement_rate  REAL          -- 0-100
developer_category     TEXT          -- serial_builder | active_builder | ...
wallet_age_days        INTEGER
total_tx_count         INTEGER
onchain_score          INTEGER       -- 0-100 composite on-chain score
onchain_analyzed_at    TEXT

-- Social (populated by FrontrunPro API — 2h cron)
smart_follower_count   INTEGER
kol_associations       TEXT          -- JSON: EnrichedKolAssociation[]
vc_associations        TEXT          -- JSON: KolAssociation[]
frontrunpro_rank       INTEGER
frontrunpro_scraped_at TEXT

-- Background (populated by DeveloperBackground — 2h cron)
background_score       INTEGER       -- 0-100 pedigree composite
is_green_thumb         INTEGER       -- 1 = crypto newcomer detected
developer_bio          TEXT          -- bio text if available