手把手教你用Python监控自己的ETH钱包地址是否‘被碰撞’(含简易脚本)
用Python构建ETH钱包安全监控系统从API调用到风险预警实战最近在整理自己的数字资产时突然意识到一个问题我们平时使用的ETH钱包地址是否可能因为公开交易记录而暴露在风险中这个问题让我开始研究如何通过技术手段主动监控自己的钱包安全状态。今天要分享的这套Python解决方案正是基于这样的实际需求场景开发而来。这套系统本质上是一个自动化监控工具核心功能是通过区块链浏览器API定期获取活跃交易地址数据并与本地存储的钱包地址进行比对。整个过程完全合法合规仅使用公开数据接口不涉及任何私钥或助记词的获取。它的价值在于让资产持有者能够直观了解自己的地址在公开网络中的暴露情况及时采取相应的安全措施。1. 系统架构与核心原理1.1 监控系统设计思路一个完整的钱包安全监控系统需要包含以下几个核心模块数据获取层通过区块链浏览器API获取最新的活跃交易地址数据处理层对获取的地址数据进行清洗和格式化比对分析层将活跃地址与本地存储的钱包地址进行匹配检测预警通知层当发现潜在风险时触发告警机制# 系统模块结构示意代码 class WalletMonitor: def __init__(self): self.api_client BlockchainAPI() self.storage LocalStorage() self.analyzer AddressAnalyzer() self.notifier NotificationService()1.2 关键技术选型在选择技术方案时我们需要考虑以下几个关键因素技术需求解决方案优势区块链数据获取Etherscan API官方认可数据可靠地址比对本地哈希存储保护隐私快速查询定时任务APScheduler灵活配置执行周期结果通知SMTP/Telegram即时预警2. 环境准备与API配置2.1 开发环境搭建建议使用Python 3.8版本进行开发主要依赖库包括pip install requests python-dotenv apscheduler创建项目目录结构/wallet-monitor /config settings.py .env /src api_client.py analyzer.py monitor.py /data addresses.json2.2 Etherscan API申请与配置访问Etherscan官网注册账号进入API页面申请免费API Key设置调用频率限制免费版建议5秒/次将API Key保存在环境变量中# config/.env ETHERSCAN_API_KEYyour_api_key_here3. 核心功能实现3.1 区块链数据获取模块实现一个可靠的API客户端需要考虑错误处理和速率限制# src/api_client.py import requests import time from datetime import datetime from config.settings import ETHERSCAN_API_KEY class BlockchainAPI: BASE_URL https://api.etherscan.io/api def get_recent_transactions(self, limit100): params { module: account, action: txlist, startblock: 0, endblock: 99999999, sort: desc, apikey: ETHERSCAN_API_KEY } try: response requests.get(self.BASE_URL, paramsparams) response.raise_for_status() data response.json() return [tx[from] for tx in data[result][:limit]] except Exception as e: print(fAPI请求失败: {str(e)}) return []3.2 地址比对算法优化为了提高比对效率我们采用布隆过滤器技术# src/analyzer.py from pybloom_live import ScalableBloomFilter import json class AddressAnalyzer: def __init__(self): self.bloom ScalableBloomFilter(initial_capacity1000000) self.load_addresses() def load_addresses(self): try: with open(data/addresses.json, r) as f: addresses json.load(f) for addr in addresses: self.bloom.add(addr.lower()) except FileNotFoundError: print(本地地址文件未找到将创建新文件) def check_address(self, address): return address.lower() in self.bloom4. 系统集成与安全实践4.1 主监控程序实现将各模块整合成一个完整的监控系统# src/monitor.py from apscheduler.schedulers.blocking import BlockingScheduler from api_client import BlockchainAPI from analyzer import AddressAnalyzer from notifier import send_alert def monitoring_job(): api BlockchainAPI() analyzer AddressAnalyzer() print(f{datetime.now()} - 开始获取最新交易地址) addresses api.get_recent_transactions() matches [] for addr in addresses: if analyzer.check_address(addr): matches.append(addr) if matches: alert_msg f检测到{len(matches)}个匹配地址: {, .join(matches)} send_alert(alert_msg) if __name__ __main__: scheduler BlockingScheduler() scheduler.add_job(monitoring_job, interval, hours6) scheduler.start()4.2 安全存储最佳实践对于本地存储的钱包地址信息建议采取以下安全措施加密存储使用AES等算法加密敏感数据访问控制设置文件系统权限限制备份策略定期备份到加密的云存储最小化原则仅存储必要信息# 示例加密存储实现 from cryptography.fernet import Fernet def encrypt_addresses(address_list): key Fernet.generate_key() cipher_suite Fernet(key) encrypted cipher_suite.encrypt(json.dumps(address_list).encode()) with open(data/addresses.enc, wb) as f: f.write(encrypted) # 密钥需要安全存储 with open(config/key.key, wb) as f: f.write(key)5. 进阶功能与扩展思路5.1 多链支持方案系统可以扩展支持其他主流区块链网络# 多链API端点配置 CHAIN_CONFIG { ethereum: { api_url: https://api.etherscan.io/api, api_key: ETHERSCAN_API_KEY }, bsc: { api_url: https://api.bscscan.com/api, api_key: BSCSCAN_API_KEY } } def get_chain_client(chain_name): config CHAIN_CONFIG.get(chain_name.lower()) if config: return BlockchainAPI(config[api_url], config[api_key]) raise ValueError(f不支持的区块链网络: {chain_name})5.2 风险评分模型建立更智能的风险评估体系# 风险评分计算逻辑 def calculate_risk_score(address, tx_history): score 0 # 交易频率因子 freq_factor min(len(tx_history) / 100, 1.0) score freq_factor * 40 # 余额因子 balance get_balance(address) balance_factor min(math.log10(balance 1) / 5, 1.0) score balance_factor * 30 # 时间因子 last_active get_last_active(address) time_factor 1 - (datetime.now() - last_active).days / 365 score time_factor * 30 return min(int(score), 100)6. 实际部署与维护6.1 服务器部署方案推荐使用以下部署架构运行环境Ubuntu Server Python虚拟环境进程管理Supervisor或systemd日志收集Filebeat ELK Stack监控告警Prometheus Grafana# 使用systemd创建服务单元 [Unit] DescriptionWallet Monitor Service Afternetwork.target [Service] Usermonitor WorkingDirectory/opt/wallet-monitor ExecStart/opt/wallet-monitor/venv/bin/python /opt/wallet-monitor/src/monitor.py Restartalways [Install] WantedBymulti-user.target6.2 定期维护任务为确保系统长期稳定运行需要设置以下维护计划每周检查API调用配额使用情况每月更新依赖库版本每季度审查安全存储策略每年全面安全审计# 维护任务示例 def maintenance_tasks(): update_dependencies() rotate_encryption_keys() backup_data() audit_security_policies()这套系统在实际运行中最让我意外的是发现了几个长期未使用的地址竟然出现在活跃交易列表中。这促使我重新审视了资产分布策略将大部分资产转移到了新生成的冷钱包地址中。监控频率方面经过一段时间的运行测试发现每6小时扫描一次能在API调用限制和实时性之间取得良好平衡。