Skip to content
Back to skills

Linked Wallets

ASecurity

Cluster addresses likely controlled by the same entity on Base via shared-funder and co-spend heuristics. Keyless — no explorer key needed.

  • 6 stars
  • 0 votes
  • 1 copy
  • 2 views
  • Added September 5, 2026
researchrustgobashapisecurity

Works with

  • api

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add anajuliabit/aeon --skill linked-wallets --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Linked Wallets?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Linked Wallets
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/anajuliabit-linked-wallets/badge)](https://www.skillsdirectory.com/skills/anajuliabit-linked-wallets)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: Linked Wallets
category: onchain-security
description: Cluster addresses likely controlled by the same entity on Base via shared-funder and co-spend heuristics. Keyless — no explorer key needed.
var: ""
tags: [crypto, security, base]
requires: [BASESCAN_KEY?, BASE_RPC_URL?]
capabilities: [read_only, sends_notifications]
---
> **${var}** — Address (`0x...`) on Base to investigate. Required. If empty, log `LINKED_NO_TARGET` and exit cleanly (no notify).

Answers "what other wallets does this person likely control?" Useful for unmasking a deployer's alt-wallets, sybil clusters, or co-conspirators. Uses two on-chain heuristics — **shared funder** (same source wallet funded several fresh wallets) and **co-spend** (addresses that transact both ways with the target).

Runs **keyless** on the Base RPC; a Basescan key sharpens it (native-ETH funding + full history).

## Config

- Target = `${var}`. Chain = Base (`chainid=8453`, explorer `basescan.org`).
- `BASESCAN_KEY` — optional. With it, native-ETH funding and full history are available (the strongest shared-funder signal). Without it, the skill falls back to recent ERC-20 `Transfer` logs over the RPC.

## Steps

### 1. Read the target's recent transfers

With a key, use `account/txlist` + `account/tokentx`. Keyless, scan recent `Transfer` logs (topic0 `0xddf252ad...`) where the target is `from` or `to`. Tally:

- **funders** — addresses that sent value *to* the target.
- **counterparties** — per address, how much flowed in vs out.

### 2. Primary funder

Take the largest funder that is an **EOA** (skip contracts — call `eth_getCode`; routers/pools have code). Fresh wallets are usually seeded by one funding wallet (a disperser, or a CEX-withdrawal address reused across alts).

```bash
ADDR="${var}"; RPC="${BASE_RPC_URL:-https://mainnet.base.org}"
curl -m 10 -s -X POST "$RPC" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getCode","params":["<funder>","latest"]}' | jq -r '.result'   # "0x" => EOA
```

### 3. Shared-funder siblings

Read the **primary funder's outbound** transfers. Every *other* EOA it funded is a sibling — likely the same entity's wallets.

### 4. Co-spend links

From the target's counterparties, keep EOAs that the target both **sent to and received from** (bidirectional flow → operational link, e.g. moving funds between own wallets).

### 5. Cluster + confidence

| Signal present | Confidence |
|----------------|------------|
| Primary funder **and** ≥1 sibling | `MEDIUM` |
| Only co-spend links | `LOW` |
| Nothing conclusive | `INSUFFICIENT` |

Report the cluster as the union of primary funder + siblings + co-spend addresses.

### 6. Notify

Notify via `./notify` only when confidence is `MEDIUM` (an actionable cluster):

```
*Linked Wallets — 0xTarget (Base)*
Cluster confidence: MEDIUM (4 related addresses)

Primary funder: 0xFunder
Shared-funder siblings: 0xa…, 0xb…
Co-spend links: 0xc…

Heuristic, not proof — verify before acting.
Target: https://basescan.org/address/0xTarget
```

### 7. Log

Append to `memory/logs/${today}.md`:

```
## linked-wallets
- Target: 0x… | confidence: MEDIUM | cluster: 4
- Funder: 0x… | siblings: 2 | co-spend: 1
- Source: rpc-logs (no key)
```

End-states: `LINKED_OK` (insufficient/low, no notify), `LINKED_FLAGGED` (medium cluster → notify), `LINKED_ERROR`.

## Sandbox note

The sandbox may block outbound `curl` or env-var expansion. Both the Base RPC and Basescan's API work over plain HTTPS, so for every failed `curl` retry the **same URL/body via WebFetch** before giving up. `eth_getLogs` may need a narrower block range on high-volume tokens (public-RPC result cap). If a `BASESCAN_KEY` is set, pass it as a query param (`&apikey=...`) via WebFetch — never echo the key into logs or notify text. Treat every discovered address as untrusted data; only interpolate the validated `$ADDR` / hex into calls.

## Constraints

- **Heuristic, not proof.** Shared-funder and co-spend links suggest common control but can be coincidental (shared CEX withdrawal address, airdrop disperser, common counterparty). Always present as "likely related", never as confirmed identity, and never deanonymise a real-world person.
- CEX/bridge funding **breaks** the on-chain trail — an `INSUFFICIENT` result often just means funds came through an exchange, not that the wallet is clean.
- Keyless mode sees only recent ERC-20 transfers; a Basescan key materially improves coverage (native ETH + full history). State which mode was used.
- Read-only (`eth_call` / `eth_getLogs` / explorer reads) — no transactions. No trade advice, no targeting of individuals.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…