Specter842/ChainGuard
GitHub: Specter842/ChainGuard
一个融合机器学习与以太坊智能合约的端到端反洗钱检测平台。
Stars: 0 | Forks: 0
# 基于区块链与机器学习的反洗钱系统
一个全栈 AML 检测平台,结合经过训练的机器学习欺诈分类器与以太坊智能合约,用于标记并不可变地记录可疑金融交易。构建于 Django 并集成 Web3.py 以实现链上交互。
## 概述
本系统反映了现代金融机构如何开始利用 AI 增强合规运营。它结合了两层独立的检测机制:
1. **基于 ML 的欺诈分类器** — 在真实以太坊交易数据上训练的随机森林模型,用于评估钱包行为并预测欺诈活动
2. **链上智能合约** — 部署在以太坊网络的 Solidity 合约,用于监控实时转账并在超过可配置的 ETH 阈值时触发 `SuspiciousTransaction` 事件
两层数据共同输入 Django 后端,提供预测结果并维护本地合规记录。
## 架构
```
Ethereum Network
│
▼
AntiMoneyLaundering.sol ──── SuspiciousTransaction events
│
▼
Web3.py Integration (Django)
│
├── ML Inference Layer (finalized_model.sav)
│ └── Random Forest Classifier
│ └── Trained on Ethereum Fraud Detection Dataset
│
└── Django REST API
└── SQLite / PostgreSQL
```
## 功能特性
- **随机森林欺诈分类器** — 基于 10,000+ 以太坊钱包交易训练,包含特征工程、异常值移除与相关性分析
- **Solidity 智能合约** — 包含存款、取款与转账函数;对超过可配置 ETH 阈值的交易触发链上事件
- **智能合约编译与部署流水线** — 使用 `py-solc-x` 与 Web3.py
- **Django 后端** — 通过 REST API 提供 ML 预测服务
- **模型对比** — 评估了逻辑回归、SVM(带 GridSearchCV 的 RBF 核)与随机森林;基于更优的召回率与 F1 分数选择随机森林作为最终模型
- **PCA 实验** — 对降维效果与全特征集进行测试;最终保留全特征以获得更好性能
- **ROC 曲线分析** — 用于阈值调节
## 技术栈
| 层级 | 技术 |
|---|---|
| ML 与数据 | Python, scikit-learn, Pandas, NumPy, Matplotlib, Seaborn, Plotly |
| 区块链 | Solidity, Web3.py, py-solc-x, Infura |
| 后端 | Django 4.1, Django REST Framework, Web3.py |
| 数据库 | SQLite(开发),PostgreSQL(兼容) |
| 模型持久化 | Pickle |
## ML 流水线
### 数据集
- **来源:** [Ethereum Fraud Detection Dataset](https://www.kaggle.com/datasets/vagifa/ethereum-frauddetection-dataset)(Kaggle)
- **目标:** `FLAG` — 指示钱包是否具有欺诈行为的二元标签
### 预处理
- 移除零方差特征与高相关特征对(阈值 > 0.9)
- 数值型空值使用均值填充;类别型空值使用众数填充
- 对 ERC20 代币类型类别特征进行标签编码
- 对训练/测试集独立应用 MinMax 归一化(0–1 范围)
- 对 `Time Diff` 与 `Avg min between received tnx` 中的极端值进行异常值移除
### 评估模型
| 模型 | 说明 |
|---|---|
| 逻辑回归 | 基线模型;对欺诈类召回率较低 |
| SVM(RBF,C=9) | 使用 GridSearchCV 调参;速度较慢,收益有限 |
| **随机森林** | **入选 — 在欺诈类上拥有最佳 F1 与召回率** |
### 最终模型
- `RandomForestClassifier(n_estimators=25, max_features=5, random_state=101)`
- 通过 Pickle 持久化为 `finalized_model.sav`
- 在运行时由 Django 加载用于推理
## 智能合约
**文件:** `Anti-Money-Laundering.sol`
```
contract AntiMoneyLaundering {
address public admin;
uint public threshold; // Default: 100 ETH
mapping(address => uint) public balances;
function transfer(address to, uint amount) public { ... }
event SuspiciousTransaction(address from, address to, uint amount);
}
```
该合约在发送方转账后余额超过配置阈值时触发 `SuspiciousTransaction` 事件,创建**不可篡改的链上审计轨迹**,无法被更改或删除。
使用 `py-solc-x`(Solidity 0.8.0)编译并通过 Web3.py 部署到 Infura。
## 项目结构
```
├── model_training.ipynb # Full ML pipeline: EDA → preprocessing → training → evaluation
├── AML_Smart_Contract.ipynb # Smart contract compilation and Ethereum deployment
├── Anti-Money-Laundering.sol # Solidity contract source
├── compiled_code.json # ABI + bytecode output
├── finalized_model.sav # Trained Random Forest model (Pickle)
├── manage.py # Django entry point
├── requirements.txt # Python dependencies
└── db.sqlite3 # Local development database
```
## 安装与设置
### 前提条件
- Python 3.9+
- Node.js(可选,用于本地以太坊节点)
- 可访问 [Infura](https://infura.io/) 以获取以太坊 RPC 权限
### 安装依赖
```
pip install -r requirements.txt
```
### 运行 Django 服务
```
python manage.py migrate
python manage.py runserver
```
### 编译并部署智能合约
打开 `AML_Smart_Contract.ipynb` 并运行所有单元格。部署前请务必使用您自己的项目密钥更新 Infura 提供者 URL。
### 训练模型(可选 — 已提供预训练模型)
打开 `model_training.ipynb` 并运行所有单元格。最终单元格会将 `finalized_model.sav` 保存到磁盘。
## 关键概念演示
- **端到端 ML 流水线** — 从原始数据摄取到生产环境模型持久化
- **区块链 + AI 融合** — 两种独立欺诈检测机制协同工作
- **链上不可变性** — 可疑交易事件永久写入以太坊账本
- **智能合约开发** — Solidity 编写、编译、ABI 提取与 Python 部署
- **合规感知设计** — 基于阈值的标记机制对应现实中的 AML 监管框架(FATF、FinCEN)
## 数据集来源
Vagif A. — [Ethereum Fraud Detection Dataset](https://www.kaggle.com/datasets/vagifa/ethereum-frauddetection-dataset) 在 Kaggle 上的数据集。
## 许可证
MIT License
标签:AML, Apex, Django, Solidity, Web3.py, 不可变审计, 事件检测, 交易分类, 以太坊, 以太坊交易, 区块链, 反洗钱, 合规平台, 异常检测, 数据分类, 智能合约, 机器学习, 模型比较, 欺诈检测, 测试用例, 特征工程, 逆向工具, 金融科技, 链上日志, 阈值监控, 随机森林