crypttrace 0.22.0__tar.gz → 0.24.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {crypttrace-0.22.0/src/crypttrace.egg-info → crypttrace-0.24.0}/PKG-INFO +7 -6
  2. {crypttrace-0.22.0 → crypttrace-0.24.0}/README.md +6 -5
  3. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/__init__.py +1 -1
  4. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/bridges.py +14 -7
  5. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/cli.py +8 -2
  6. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/config.py +2 -0
  7. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/etherscan.py +30 -9
  8. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/known.json +81 -5
  9. {crypttrace-0.22.0 → crypttrace-0.24.0/src/crypttrace.egg-info}/PKG-INFO +7 -6
  10. {crypttrace-0.22.0 → crypttrace-0.24.0}/LICENSE +0 -0
  11. {crypttrace-0.22.0 → crypttrace-0.24.0}/pyproject.toml +0 -0
  12. {crypttrace-0.22.0 → crypttrace-0.24.0}/setup.cfg +0 -0
  13. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/addresses.py +0 -0
  14. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/analysis.py +0 -0
  15. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/assess.py +0 -0
  16. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/assets.py +0 -0
  17. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/chains.py +0 -0
  18. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/drain.py +0 -0
  19. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/evidence.py +0 -0
  20. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/__init__.py +0 -0
  21. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/bitcoin.py +0 -0
  22. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/http.py +0 -0
  23. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/solana.py +0 -0
  24. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/ton.py +0 -0
  25. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/fetchers/tron.py +0 -0
  26. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/freeze.py +0 -0
  27. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/funder.py +0 -0
  28. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/gascluster.py +0 -0
  29. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/investigate.py +0 -0
  30. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/__init__.py +0 -0
  31. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/audit.py +0 -0
  32. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/bulk.py +0 -0
  33. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/labels.py +0 -0
  34. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/names.py +0 -0
  35. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/partial.json +0 -0
  36. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/tonapi.py +0 -0
  37. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/labels/tronscan.py +0 -0
  38. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/offramp.py +0 -0
  39. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/poisoning.py +0 -0
  40. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/prices.py +0 -0
  41. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/render.py +0 -0
  42. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/report.py +0 -0
  43. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/spam.py +0 -0
  44. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/store.py +0 -0
  45. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/trace.py +0 -0
  46. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/verify.py +0 -0
  47. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/watch.py +0 -0
  48. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/web/index.html +0 -0
  49. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace/webapp.py +0 -0
  50. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace.egg-info/SOURCES.txt +0 -0
  51. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace.egg-info/dependency_links.txt +0 -0
  52. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace.egg-info/entry_points.txt +0 -0
  53. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace.egg-info/requires.txt +0 -0
  54. {crypttrace-0.22.0 → crypttrace-0.24.0}/src/crypttrace.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypttrace
3
- Version: 0.22.0
3
+ Version: 0.24.0
4
4
  Summary: OSINT toolkit for crypto investigations: trace stolen funds across Ethereum, Bitcoin, Tron, Solana and TON
5
5
  Author: bobslayerX
6
6
  License-Expression: MIT
@@ -79,7 +79,7 @@ python selftest.py # offline checks, no API keys needed
79
79
 
80
80
  | | Needed? | How to get it |
81
81
  |---|---|---|
82
- | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey). One v2 key covers all EVM chains. |
82
+ | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey) covers Ethereum, Polygon and Arbitrum. BSC, Optimism and Base need a paid Etherscan plan; on a free key crypttrace says so instead of showing an empty wallet. |
83
83
  | **Bitcoin, Tron, Solana, TON** | **Not required** | Work out of the box via public endpoints. |
84
84
 
85
85
  ```bash
@@ -120,7 +120,7 @@ the number either way.
120
120
 
121
121
  | Chain | `--chain` | Data source | Model |
122
122
  |---|---|---|---|
123
- | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 | account |
123
+ | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 (BSC, Optimism, Base: paid plan) | account |
124
124
  | Bitcoin | `btc` | mempool.space | UTXO |
125
125
  | Tron (TRX + USDT-TRC20) | `tron` | TronGrid | account |
126
126
  | Solana (SOL + SPL) | `sol` | public JSON-RPC | account |
@@ -553,7 +553,8 @@ Add sources in `labels/labels.py` → `SOURCES`.
553
553
 
554
554
  On Bitcoin, Tron and Solana the labels cover the reserve wallets of Binance,
555
555
  OKX and HTX, plus Bybit's older 2022 list — each taken from the address list the
556
- exchange publishes itself for proof-of-reserves; on TON, Binance's reserve
556
+ exchange publishes itself for proof-of-reserves; on TON and the EVM chains
557
+ (Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism), Binance's reserve
557
558
  wallets. That is what lets `offramp` flag deposit addresses on those chains. Funds sent to an exchange not on that
558
559
  list still show as `unknown`. Every label records where it came from — see
559
560
  `crypttrace labels audit`.
@@ -714,8 +715,8 @@ cases/ # worked investigations with their data
714
715
 
715
716
  ## Roadmap
716
717
 
717
- - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit) and
718
- TON (now: Binance),
718
+ - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit), TON
719
+ and the EVM chains (now: Binance),
719
720
  and refreshing these lists as the exchanges republish them
720
721
  - More label sources: Chainabuse, CryptoScamDB, exchange deposit-address sets
721
722
 
@@ -45,7 +45,7 @@ python selftest.py # offline checks, no API keys needed
45
45
 
46
46
  | | Needed? | How to get it |
47
47
  |---|---|---|
48
- | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey). One v2 key covers all EVM chains. |
48
+ | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey) covers Ethereum, Polygon and Arbitrum. BSC, Optimism and Base need a paid Etherscan plan; on a free key crypttrace says so instead of showing an empty wallet. |
49
49
  | **Bitcoin, Tron, Solana, TON** | **Not required** | Work out of the box via public endpoints. |
50
50
 
51
51
  ```bash
@@ -86,7 +86,7 @@ the number either way.
86
86
 
87
87
  | Chain | `--chain` | Data source | Model |
88
88
  |---|---|---|---|
89
- | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 | account |
89
+ | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 (BSC, Optimism, Base: paid plan) | account |
90
90
  | Bitcoin | `btc` | mempool.space | UTXO |
91
91
  | Tron (TRX + USDT-TRC20) | `tron` | TronGrid | account |
92
92
  | Solana (SOL + SPL) | `sol` | public JSON-RPC | account |
@@ -519,7 +519,8 @@ Add sources in `labels/labels.py` → `SOURCES`.
519
519
 
520
520
  On Bitcoin, Tron and Solana the labels cover the reserve wallets of Binance,
521
521
  OKX and HTX, plus Bybit's older 2022 list — each taken from the address list the
522
- exchange publishes itself for proof-of-reserves; on TON, Binance's reserve
522
+ exchange publishes itself for proof-of-reserves; on TON and the EVM chains
523
+ (Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism), Binance's reserve
523
524
  wallets. That is what lets `offramp` flag deposit addresses on those chains. Funds sent to an exchange not on that
524
525
  list still show as `unknown`. Every label records where it came from — see
525
526
  `crypttrace labels audit`.
@@ -680,8 +681,8 @@ cases/ # worked investigations with their data
680
681
 
681
682
  ## Roadmap
682
683
 
683
- - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit) and
684
- TON (now: Binance),
684
+ - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit), TON
685
+ and the EVM chains (now: Binance),
685
686
  and refreshing these lists as the exchanges republish them
686
687
  - More label sources: Chainabuse, CryptoScamDB, exchange deposit-address sets
687
688
 
@@ -1,2 +1,2 @@
1
1
  """crypttrace — OSINT crypto investigation CLI."""
2
- __version__ = "0.22.0"
2
+ __version__ = "0.24.0"
@@ -15,7 +15,7 @@ are reported as likely continuations with the delay and amount so the analyst
15
15
  can judge. (v1 matches native-coin value; token-bridging and recipient-address
16
16
  decoding from bridge calldata are natural extensions.)
17
17
  """
18
- from typing import List, Dict
18
+ from typing import Dict, List, Optional
19
19
 
20
20
  from crypttrace.fetchers import etherscan
21
21
  from crypttrace.labels import labels
@@ -46,9 +46,13 @@ def bridge_outflows(address: str, chain: str = "eth") -> List[Dict]:
46
46
 
47
47
 
48
48
  def find_arrivals(address: str, source_chain: str, amount: float, after_ts: int,
49
- tol: float = 0.05, window_h: int = 48) -> List[Dict]:
49
+ tol: float = 0.05, window_h: int = 48,
50
+ unread: Optional[Dict[str, str]] = None) -> List[Dict]:
50
51
  """Search every other supported chain for an inbound transfer to `address`
51
- of ~`amount` (within `tol`) within `window_h` hours after `after_ts`."""
52
+ of ~`amount` (within `tol`) within `window_h` hours after `after_ts`.
53
+
54
+ A chain that could not be read is no evidence of "no arrival": it goes into
55
+ `unread` (chain -> why) instead of silently counting as searched."""
52
56
  me = address.lower()
53
57
  hits = []
54
58
  for ch in config.CHAINS:
@@ -56,7 +60,9 @@ def find_arrivals(address: str, source_chain: str, amount: float, after_ts: int,
56
60
  continue
57
61
  try:
58
62
  txs = etherscan.get_txs(address, ch, limit=200, sort="asc")
59
- except etherscan.EtherscanError:
63
+ except etherscan.EtherscanError as e:
64
+ if unread is not None:
65
+ unread[ch] = str(e)
60
66
  continue
61
67
  for tx in txs:
62
68
  if tx.get("to", "").lower() != me:
@@ -80,11 +86,12 @@ def find_arrivals(address: str, source_chain: str, amount: float, after_ts: int,
80
86
 
81
87
 
82
88
  def trace_cross(address: str, chain: str = "eth", tol: float = 0.05,
83
- window_h: int = 48) -> List[Dict]:
84
- """For each bridge-out from `address`, list likely continuations on other chains."""
89
+ window_h: int = 48, unread: Optional[Dict[str, str]] = None) -> List[Dict]:
90
+ """For each bridge-out from `address`, list likely continuations on other chains.
91
+ Chains that could not be searched are collected in `unread`."""
85
92
  results = []
86
93
  for out in bridge_outflows(address, chain):
87
94
  arrivals = find_arrivals(address, chain, out["amount"], out["timestamp"],
88
- tol=tol, window_h=window_h)
95
+ tol=tol, window_h=window_h, unread=unread)
89
96
  results.append({"bridge_out": out, "arrivals": arrivals})
90
97
  return results
@@ -303,8 +303,9 @@ def crosschain(
303
303
  tol: float = typer.Option(0.05, "--tol", help="Amount tolerance (0.05 = 5%, for bridge fees)"),
304
304
  ):
305
305
  """Follow funds across bridges: find likely arrivals of the same address on other chains."""
306
+ unread = {}
306
307
  try:
307
- results = bridges_mod.trace_cross(address, chain, tol=tol, window_h=window)
308
+ results = bridges_mod.trace_cross(address, chain, tol=tol, window_h=window, unread=unread)
308
309
  except etherscan.EtherscanError as e:
309
310
  console.print(f"[red]Error:[/red] {e}")
310
311
  raise typer.Exit(1)
@@ -313,6 +314,10 @@ def crosschain(
313
314
  "address on this chain.[/dim]")
314
315
  return
315
316
  console.print(render.crosschain_tree(address, chain, results))
317
+ if unread:
318
+ console.print(f"\n[yellow]Not searched:[/yellow] {', '.join(sorted(unread))} — "
319
+ "could not be read, so no arrival there is not evidence of none. "
320
+ f"({next(iter(unread.values()))})")
316
321
  console.print("\n[dim]Cross-chain links are heuristic (same-address arrival by amount+time), "
317
322
  "not proof. Verify each candidate before relying on it.[/dim]")
318
323
 
@@ -875,7 +880,8 @@ def chains():
875
880
  """List supported chains."""
876
881
  console.print("[bold]EVM[/bold] (Etherscan v2, needs ETHERSCAN_API_KEY):")
877
882
  for name, cid in config.CHAINS.items():
878
- console.print(f" {name:<10} chainid {cid}")
883
+ paid = " (paid Etherscan plan only)" if name in config.PAID_PLAN_CHAINS else ""
884
+ console.print(f" {name:<10} chainid {cid}{paid}")
879
885
  console.print("\n[bold]Non-EVM[/bold] (no API key needed):")
880
886
  console.print(" btc Bitcoin — mempool.space (UTXO)")
881
887
  console.print(" tron Tron — TronGrid (TRX + USDT-TRC20)")
@@ -38,5 +38,7 @@ CHAINS = {
38
38
  "optimism": 10,
39
39
  "base": 8453,
40
40
  }
41
+ # not served on Etherscan's free plan; the API says so and crypttrace reports it
42
+ PAID_PLAN_CHAINS = {"bsc", "optimism", "base"}
41
43
 
42
44
  WEI = 10 ** 18
@@ -2,6 +2,11 @@
2
2
 
3
3
  The blockchain is public: every transaction is queryable. This module wraps the
4
4
  Etherscan API and caches responses so repeated traces don't re-hit the API.
5
+
6
+ Etherscan's free plan does not cover every chain: BNB Chain, Base and Optimism
7
+ need a paid plan. Etherscan says so in an error, which used to pass for an
8
+ empty history — a wallet there looked untouched. Now any error Etherscan
9
+ returns is raised (and never cached); only "No transactions found" is empty.
5
10
  """
6
11
  import json
7
12
  import sqlite3
@@ -50,6 +55,15 @@ class EtherscanError(RuntimeError):
50
55
  pass
51
56
 
52
57
 
58
+ def _empty(data: dict) -> bool:
59
+ """A valid answer with nothing in it ("No transactions found") — not an error."""
60
+ return str(data.get("message", "")).startswith("No ") or isinstance(data.get("result"), list)
61
+
62
+
63
+ def _failed(data: dict) -> bool:
64
+ return str(data.get("status")) == "0" and not _empty(data)
65
+
66
+
53
67
  MIN_INTERVAL = 0.22 # the free plan allows 5 calls a second
54
68
  _last_call = 0.0
55
69
 
@@ -70,7 +84,7 @@ def _call(chain: str, params: Dict[str, str], cache_age: int = 3600, _tries: int
70
84
  key = f"{chain}:" + "&".join(f"{k}={v}" for k, v in sorted(q.items()) if k != "apikey")
71
85
  from crypttrace.fetchers import http
72
86
  cached = None if http.FRESH else _cache_get(key, cache_age)
73
- if cached is not None:
87
+ if cached is not None and not _failed(cached): # older versions cached errors too
74
88
  return cached
75
89
 
76
90
  global _last_call
@@ -78,16 +92,23 @@ def _call(chain: str, params: Dict[str, str], cache_age: int = 3600, _tries: int
78
92
  if wait > 0:
79
93
  time.sleep(wait)
80
94
  _last_call = time.time()
81
- resp = requests.get(config.ETHERSCAN_BASE, params=q, timeout=30)
82
- resp.raise_for_status()
83
- data = resp.json()
84
- # status "0" with "No transactions found" is a valid empty result, not an error
85
- if data.get("status") == "0" and "No transactions" not in str(data.get("message", "")):
86
- # rate-limit or bad key etc.
87
- if "rate limit" in str(data.get("result", "")).lower() and _tries < 4:
95
+ try:
96
+ resp = requests.get(config.ETHERSCAN_BASE, params=q, timeout=30)
97
+ resp.raise_for_status()
98
+ data = resp.json()
99
+ except (requests.RequestException, ValueError) as e:
100
+ raise EtherscanError(f"Etherscan request failed: {e}")
101
+ if _failed(data):
102
+ said = str(data.get("result") or data.get("message") or "")
103
+ if "rate limit" in said.lower() and _tries < 4:
88
104
  time.sleep(1 + _tries)
89
105
  return _call(chain, params, cache_age, _tries + 1)
90
- # otherwise return as-is; caller handles empty
106
+ if "not supported for this chain" in said:
107
+ raise EtherscanError(
108
+ f"Etherscan's free plan does not cover {chain}: its history needs a paid "
109
+ "Etherscan API plan (https://etherscan.io/apis). Without one, crypttrace "
110
+ f"cannot read {chain} — it is not that the wallet is empty.")
111
+ raise EtherscanError(f"Etherscan answered: {said}")
91
112
  _cache_put(key, data)
92
113
  return data
93
114
 
@@ -1,9 +1,82 @@
1
1
  {
2
- "0x28c6c06298d514db089934071355e5743bf21d60": {"name": "Binance 14 (hot wallet)", "type": "exchange"},
3
- "0x21a31ee1afc51d94c2efccaa2092ad1028285549": {"name": "Binance 15", "type": "exchange"},
4
- "0xdfd5293d8e347dfe59e90efd55b2956a1343963d": {"name": "Binance 16", "type": "exchange"},
5
- "0x56eddb7aa87536c09ccc2793473599fd21a8b17f": {"name": "Binance 17", "type": "exchange"},
6
- "0x9696f59e4d72e237be84ffd425dcad154bf96976": {"name": "Binance 18", "type": "exchange"},
2
+ "0x28c6c06298d514db089934071355e5743bf21d60": {"name": "Binance 14 (hot wallet)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2026-01-22", "source_kind": "self-published"},
3
+ "0x21a31ee1afc51d94c2efccaa2092ad1028285549": {"name": "Binance 15", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published"},
4
+ "0xdfd5293d8e347dfe59e90efd55b2956a1343963d": {"name": "Binance 16", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published"},
5
+ "0x56eddb7aa87536c09ccc2793473599fd21a8b17f": {"name": "Binance 17", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published"},
6
+ "0x9696f59e4d72e237be84ffd425dcad154bf96976": {"name": "Binance 18", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published"},
7
+ "0x01c952174c24e1210d26961d456a77a39e1f0bb0": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
8
+ "0x030e37ddd7df1b43db172b23916d523f1599c6cb": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
9
+ "0x082489a616ab4d46d1947ee3f912e080815b08da": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
10
+ "0x08439901c2bb071cd0812ed329675c9657434083": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
11
+ "0x0e4158c85ff724526233c1aeb4ff6f0c46827fbe": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
12
+ "0x161ba15a5f335c9f06bb5bbb0a9ce14076fbb645": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
13
+ "0x18e226459ccf0eec276514a4fd3b226d8961e4d1": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
14
+ "0x1b46970cfe6a271e884f636663c257a5a571fb2c": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
15
+ "0x1b5b4e441f5a22bfd91b7772c780463f66a74b35": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
16
+ "0x1fbe2acee135d991592f167ac371f3dd893a508b": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
17
+ "0x22132139bf7f3921b1cadeab931f4fbf7bf2bc9e": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
18
+ "0x25681ab599b4e2ceea31f8b498052c53fc2d74db": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
19
+ "0x290275e3db66394c52272398959845170e4dcb88": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
20
+ "0x29bdfbf7d27462a2d115748ace2bd71a2646946c": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
21
+ "0x2b9ffcd7a44f9afc8770ac1d5e6405410816dab4": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Base since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
22
+ "0x308a2a0712570daeea77c8ba9c27a32cdc4000d4": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
23
+ "0x3304e22ddaa22bcdc5fca2269b418046ae7b566a": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Base since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
24
+ "0x38aaef3782910bdd9ea3566c839788af6ff9b200": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
25
+ "0x3931dab967c3e2dbb492fe12460a66d0fe4cc857": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
26
+ "0x3a3c006053a9b40286b9951a11be4c5808c11dc8": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
27
+ "0x3c783c21a0383057d128bae431894a5c19f9cf06": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
28
+ "0x417850c1cd0fb428eb63649e9dc4c78ede9a34e8": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
29
+ "0x43684d03d81d3a4c70da68febdd61029d426f042": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
30
+ "0x43839fe6bb18eae45c4228e5d6c8521a9ab57b6e": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
31
+ "0x4976a4a02f38326660d17bf34b431dc6e2eb2327": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
32
+ "0x4a9e49a45a4b2545cb177f79c7381a30e1dc261f": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
33
+ "0x4aec0e98fc1fb55b9cc2faaa7a81acca42cb4e96": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
34
+ "0x4ed6cf63bd9c009d247ee51224fc1c7041f517f1": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
35
+ "0x4fdfe365436b5273a42f135c6a6244a20404271e": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
36
+ "0x505e71695e9bc45943c58adec1650577bca68fd9": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
37
+ "0x515b72ed8a97f42c568d6a143232775018f133c8": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
38
+ "0x5a52e96bacdabb82fd05763e25335261b270efcb": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
39
+ "0x631fc1ea2270e98fbd9d92658ece0f5a269aa161": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
40
+ "0x73f5ebe90f27b46ea12e5795d16c4b408b19cc6f": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
41
+ "0x835678a611b28684005a5e2233695fb6cbbb0007": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
42
+ "0x87433fec6f8d9df13d1e17c4b11364ecd2e93a51": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
43
+ "0x8894e0a0c962cb723c1976a4421c95949be2d4e3": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
44
+ "0x8c991b8bb43859d2f3dff541eb43add2ce92505f": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
45
+ "0x98adef6f2ac8572ec48965509d69a8dd5e8bba9d": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
46
+ "0x9dfb9014e88087fba78cc9309c64031d02be9a33": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
47
+ "0xa180fe01b906a1be37be6c534a3300785b20d947": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
48
+ "0xa64b436964e7415c0e70b9989a53e1fb9a90e726": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
49
+ "0xa7c0d36c4698981fab42a7d8c783674c6fe2592d": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
50
+ "0xacd03d601e5bb1b275bb94076ff46ed9d753435a": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
51
+ "0xad354cfbaa4a8572dd6df021514a3931a8329ef5": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
52
+ "0xb38e8c17e38363af6ebdcb3dae12e0243582891d": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
53
+ "0xb75f972af41d6ff0bcc6b2613b832632de1e418b": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
54
+ "0xbd612a3f30dca67bf60a39fd0d35e39b7ab80774": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
55
+ "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
56
+ "0xbf83d18a46325acb7d8f40a462d23a92f467ed7a": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
57
+ "0xc8812d1d1918587924ad84bcf8687bfbb1231f85": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
58
+ "0xc8daf809c7d7c27dd62d006196d8901ba57e5eae": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
59
+ "0xd3a22590f8243f8e83ac230d1842c9af0404c4a1": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
60
+ "0xd62e55b19135eb3c645573288ee4b6050f86ff54": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Base since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
61
+ "0xdccf3b77da55107280bd850ea519df3705d1a75a": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
62
+ "0xe1940f578743367f38d3f25c2d2d32d6636929b6": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
63
+ "0xe2fc31f816a9b94326492132018c3aecc4a93ae1": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
64
+ "0xe7804c37c13166ff0b37f5ae0bb07a3aebb6e245": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
65
+ "0xeb2d2f1b8c558a40207669291fda468e50c8a0bb": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
66
+ "0xee7ae85f2fe2239e27d9c1e23fffe168d63b4055": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
67
+ "0xf92402bb795fd7cd08fb83839689db79099c8c9c": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
68
+ "0xf977814e90da44bfa03b6295a0616a897441acec": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism since 2025-10-15", "source_kind": "self-published", "added": "2026-10-17"},
69
+ "0xf708e1eab1a3651b1c73d1bfa2fc54c148328be4": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Polygon since 2025-11-18", "source_kind": "self-published", "added": "2026-10-17"},
70
+ "0x86523c87c8ec98c7539e2c58cd813ee9d1a08d96": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, BNB Chain, Arbitrum, Polygon, Optimism since 2025-12-18", "source_kind": "self-published", "added": "2026-10-17"},
71
+ "0xb93b82f33e2653b544e046128f3cb47879dc917b": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, Arbitrum, Base since 2026-03-16", "source_kind": "self-published", "added": "2026-10-17"},
72
+ "0x71a7de1bdad3904b312717843597f549d2a79eb8": {"name": "Binance reserve wallet (custodied by Ceffu)", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum, Arbitrum, Base since 2026-03-23", "source_kind": "self-published", "added": "2026-10-17"},
73
+ "0x756b86fd69914db92229c07c7393d7d9948fed33": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2026-03-25", "source_kind": "self-published", "added": "2026-10-17"},
74
+ "0x32e11a20337ebc79abd0eeab2d91bafbd9591149": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2026-04-30", "source_kind": "self-published", "added": "2026-10-17"},
75
+ "0x5ce4825e2c5d7025b110d7bbeb5b1f03976e1443": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2026-08-03", "source_kind": "self-published", "added": "2026-10-17"},
76
+ "0x605d0b92cde1e110d5ae9123969097ea2489d1aa": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Arbitrum since 2026-08-03", "source_kind": "self-published", "added": "2026-10-17"},
77
+ "0x26bff98f6f37c8d560684eaf2afd1149bf76633e": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for Ethereum since 2026-09-01", "source_kind": "self-published", "added": "2026-10-17"},
78
+ "0x28e8d4eab37cfbf49edf7ff39c27377b7ae3a2a0": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2026-09-01", "source_kind": "self-published", "added": "2026-10-17"},
79
+ "0xb2a6a72843db0f508204a56448413f3867ea691a": {"name": "Binance reserve wallet", "type": "exchange", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed for BNB Chain since 2026-09-01", "source_kind": "self-published", "added": "2026-10-17"},
7
80
  "0x3cd751e6b0078be393132286c442345e5dc49699": {"name": "Coinbase 4", "type": "exchange"},
8
81
  "0x71660c4005ba85c37ccec55d0c4493e66fe775d3": {"name": "Coinbase 1", "type": "exchange"},
9
82
  "0x503828976d22510aad0201ac7ec88293211d23da": {"name": "Coinbase 2", "type": "exchange"},
@@ -100,6 +173,9 @@
100
173
  "39CnKMu9KWvFAabLJ5BYghVfSqHgC2VShe": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2026-07-27", "source_kind": "self-published", "added": "2026-09-23"},
101
174
  "34ryUknRsda7w9yXqzjLhgRPZLPV43rpsd": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2026-07-31", "source_kind": "self-published", "added": "2026-09-23"},
102
175
  "bc1q9n7j6a5wwru6tad9xrlncnagresvyjt96pl3en": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2026-07-31", "source_kind": "self-published", "added": "2026-09-23"},
176
+ "32z4XkTCBMp4QfcoobxaXtJkWngyHqGjHp": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed since 2026-09-24", "source_kind": "self-published", "added": "2026-10-17"},
177
+ "33TDwJRsFJbtSEwkXGwtJkj3Ey3Gman3TV": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed since 2026-09-24", "source_kind": "self-published", "added": "2026-10-17"},
178
+ "36yB51gULVXXnvyWmvAoCVjq6igZUiHf3y": {"name": "Binance reserve wallet", "type": "exchange", "chain": "btc", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-10-17; listed since 2026-09-28", "source_kind": "self-published", "added": "2026-10-17"},
103
179
  "TAzsQ9Gx8eqFNFSKbeXrbi45CuVPHzA8wr": {"name": "Binance reserve wallet", "type": "exchange", "chain": "tron", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2025-10-15", "source_kind": "self-published", "added": "2026-09-23"},
104
180
  "TCEn8ogRSiqdqv26UhsJmQQemrgJS56ZBD": {"name": "Binance reserve wallet", "type": "exchange", "chain": "tron", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2025-10-15", "source_kind": "self-published", "added": "2026-09-23"},
105
181
  "TDqSquXBgUCLYvYC4XZgrprLK589dkhSCf": {"name": "Binance reserve wallet", "type": "exchange", "chain": "tron", "source": "Binance proof-of-reserves address list (binance.com/bapi/apex/v1/public/apex/market/por/address), fetched 2026-09-23; listed since 2025-10-15", "source_kind": "self-published", "added": "2026-09-23"},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypttrace
3
- Version: 0.22.0
3
+ Version: 0.24.0
4
4
  Summary: OSINT toolkit for crypto investigations: trace stolen funds across Ethereum, Bitcoin, Tron, Solana and TON
5
5
  Author: bobslayerX
6
6
  License-Expression: MIT
@@ -79,7 +79,7 @@ python selftest.py # offline checks, no API keys needed
79
79
 
80
80
  | | Needed? | How to get it |
81
81
  |---|---|---|
82
- | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey). One v2 key covers all EVM chains. |
82
+ | **EVM chains** (Ethereum, BSC, Polygon, Arbitrum, Optimism, Base) | **Required** | Free key at [etherscan.io/myapikey](https://etherscan.io/myapikey) covers Ethereum, Polygon and Arbitrum. BSC, Optimism and Base need a paid Etherscan plan; on a free key crypttrace says so instead of showing an empty wallet. |
83
83
  | **Bitcoin, Tron, Solana, TON** | **Not required** | Work out of the box via public endpoints. |
84
84
 
85
85
  ```bash
@@ -120,7 +120,7 @@ the number either way.
120
120
 
121
121
  | Chain | `--chain` | Data source | Model |
122
122
  |---|---|---|---|
123
- | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 | account |
123
+ | Ethereum, BSC, Polygon, Arbitrum, Optimism, Base | `eth` `bsc` `polygon` `arbitrum` `optimism` `base` | Etherscan v2 (BSC, Optimism, Base: paid plan) | account |
124
124
  | Bitcoin | `btc` | mempool.space | UTXO |
125
125
  | Tron (TRX + USDT-TRC20) | `tron` | TronGrid | account |
126
126
  | Solana (SOL + SPL) | `sol` | public JSON-RPC | account |
@@ -553,7 +553,8 @@ Add sources in `labels/labels.py` → `SOURCES`.
553
553
 
554
554
  On Bitcoin, Tron and Solana the labels cover the reserve wallets of Binance,
555
555
  OKX and HTX, plus Bybit's older 2022 list — each taken from the address list the
556
- exchange publishes itself for proof-of-reserves; on TON, Binance's reserve
556
+ exchange publishes itself for proof-of-reserves; on TON and the EVM chains
557
+ (Ethereum, BNB Chain, Arbitrum, Polygon, Base, Optimism), Binance's reserve
557
558
  wallets. That is what lets `offramp` flag deposit addresses on those chains. Funds sent to an exchange not on that
558
559
  list still show as `unknown`. Every label records where it came from — see
559
560
  `crypttrace labels audit`.
@@ -714,8 +715,8 @@ cases/ # worked investigations with their data
714
715
 
715
716
  ## Roadmap
716
717
 
717
- - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit) and
718
- TON (now: Binance),
718
+ - More exchanges on Bitcoin, Tron, Solana (now: Binance, OKX, HTX, Bybit), TON
719
+ and the EVM chains (now: Binance),
719
720
  and refreshing these lists as the exchanges republish them
720
721
  - More label sources: Chainabuse, CryptoScamDB, exchange deposit-address sets
721
722
 
File without changes
File without changes
File without changes