关键词:Solana代币、风险模型、机器学习、拉地毯、rug pull、XGBoost、代币风险预测
快速导读:本文手把手教你用 Python+Solana 生态公开数据,训练一个可落地的代币风险模型。你将学到如何抓取链上特征、清洗数据、选择算法、评估质量,并部署成可复用的 API。整套流程开源、可复制,零版本依赖风险。
什么是Solana代币风险?
由于一键发币门槛低,Solana链每天在 DEX流动性合约 中诞生成千上万的新币。流动性空洞、开发者匿名、代码后门 等特征让 拉地毯(rug pull) 频发。传统安全公司只能人工抽检,而我们的 机器学习 方案可以 自动打分 ,每分钟监控全网新币,标记 Danger / Warning / Good 三个等级。
01 环境准备:三分钟搭好实验环境
我们已经在 Colab 帮你配好全套依赖,直接克隆就能跑。如果你用本地 Jupyter,只需复制下面命令:
# 核心库
pip install -U pandas numpy scikit-learn
# 梯度提升神器
pip install xgboost==2.0.3
# 离线保存模型
pip install -U joblib matplotlib| 小技巧 | 对应命令 |
|---|---|
| VSCode Jupyter 前缀符号 | 把 !pip 换成%pip |
完成安装后,马上就能跑 代币特征抓取 与 模型训练。
02 数据抓取:Vybe API 直达 Solana 链上数据
为了构建有“正样本”和“负样本”的监督数据集,我们需要下列字段:
- Risk(标签):Danger = 1,Warning = 1,Good = 0
- decimals:小数位
- liquidity:当前流动性池深度
- v24hChangePercent:24h 价涨跌幅
- v24hUSD:24h 成交额
- Volatility:滚动 4h 波动率
holders_count:持币地址数
Vybe API 的
/tokens端点一次性返回这些指标;仅需填一个 API Key,即可分页拉取 5w+ 条新币记录。👉 想动手试试?这篇笔记手把手教你3分钟拉取Vybe的真实数据!(https://okxdog.com/)
03 数据预处理:清洗掉噪音列
拿到原始 .json 后,我们要做三件事:
- 去掉非预测特征:如
address、lastTradeUnixTime→ 与标签 Bonus 无关 - 标签映射:把
Danger|Warning统一成1,Good→0 - 测试 / 训练划分:默认
test_size=0.4,random_state=42
核心代码(一行就能跑):
def preprocess_data(df):
df = df.drop(['address','lastTradeUnixTime','mc'], axis=1)
X, y = df.drop('Risk', axis=1), df['Risk'].map({'Danger':1,'Warning':1,'Good':0})
return train_test_split(X, y, test_size=0.4, random_state=42)04 构建管道:数值标准化 + 独热编码
数字列全部拉齐均值方差,符号名称等 categorical 列做独热编码,两步并一步写死进 ColumnTransformer:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
numeric_features = ['decimals','liquidity','v24hChangePercent',
'v24hUSD','Volatility','holders_count']
categorical_features = ['logoURI','name','symbol']
numeric_tf = Pipeline([('impute',SimpleImputer(strategy='mean')),
('scale', StandardScaler())])
categorical_tf = Pipeline([('impute',SimpleImputer(strategy='most_frequent')),
('ohe', OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(
[('num', numeric_tf, numeric_features),
('cat', categorical_tf, categorical_features)],
remainder='passthrough'
)05 模型训练:为什么是 XGBoost?
| 指标 | XGBoost | 逻辑回归 | 随机森林 |
|---|---|---|---|
| 捕获非线性关系 | ✅ 内置树分裂 | ❌ | ✅ |
| 抗过拟合正则项 | ✅ L1+L2 | ✅ | ❌ |
| 特征重要性 | ✅ | ❌ | ✅ |
| 回归 / 分类任意切 | ✅ obj 参数 | ✅ 需要转换 | ✅ |
代码极简,Pipeline 封好就能跑:
import xgboost as xgb
from sklearn.pipeline import Pipeline
model = Pipeline([
('pre', preprocessor),
('clf', xgb.XGBClassifier(
n_estimators=100, learning_rate=0.1,
max_depth=3, random_state=42))])
model.fit(X_train, y_train)06 模型评估:看得见的性能
| 指标 | 数值(示例) | 备注 |
|---|---|---|
| Accuracy | 0.965 | 总体正确率 |
| Recall (Danger) | 0.92 | 漏报少,放心 |
| Precision (Good) | 0.98 | 误杀少,安心 |
用混淆矩阵一眼看懂:
预测
1 0
真 1 132 4
实 0 6 25207 保存 & 部署:FastAPI 一键起服务
跑完训练,使用 joblib.dump 保存两文件:
joblib.dump(model, "predictModel.pkl")
joblib.dump(preprocessor, "mainPreprocessor.pkl")FastAPI 路由示例:
@app.post("/score")
def score(token: TokenSchema):
df = pd.DataFrame([token.dict()])
risk = model.predict(df)[0]
return {"risk": int(risk)}👉 三分钟教你把模型封装成 API:跟着这份极简模板就能上线自己的代币风险榜单!(https://okxdog.com/)
场景示例:把代码搬到实际交易所看效果
- DEX聚合器 把
/scoreAPI 集成在列表页,每秒刷新代币分数; - 钱包插件 在签名前弹窗“高风险提示”,先过一关模型;
- 链上机器人 监控广播
NewToken,自动抢跑“Good”队列。
常见问题 FAQ
Q1:可否只用链上数据,不依赖中心化的 Vybe API?
A:可以。使用 Solana-web3.js + getProgramAccounts 解析 AMM / CPMM 流动性池,只需改数据层即可。
Q2:模型资料是否会过拟合新发币潮?
A:建议每 24h 增量再训练一次,并把 تاریخ mint、合约创建时间等新列加入,Regulazation 会自动平衡权重。
Q3:Good 阈值是否唯一?
A:你可以在 FastAPI 中调整 cutoff 策略:低风险钱包 → threshold=0.3;高风险钱包 → threshold=0.05,灵活可调。
Q4:需要多少训练数据?
A:实验显示 5k–10k 条标记样本即可超越 0.9 AUC;当区间拉到 100k,宏平均 F1 趋于饱和。
Q5:能否识别类似“慢拉地毯”的代码漏洞?
A:除链上特征外,再合入 合约源码关键词(如 mintable, freeze_authority) + Twitter情绪指标,准确率能再上 3–6%。
结语
在瞬息万变的 Solana 生态里,单靠肉眼识别骗局已不现实。把 XGBoost、实时链上特征、FastAPI 服务化 串成一条流水线,你就能亲手打造自动化的 代币风险模型,提前 10 分钟警告用户远离下一个 rug pull。
如果你已跃跃欲试,下面两份资料可以即刻开跑:
- 完整 Notebook(含训练脚本):GitHub 开源仓库
- 实时风险分类器 Demo:API Demo 页面
祝你训练顺利,安全第一!