构建Solana代币风险模型:从源码教你用机器学习揪出“拉地毯”骗局

·

关键词: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 链上数据

为了构建有“正样本”和“负样本”的监督数据集,我们需要下列字段:

  1. Risk(标签):Danger = 1,Warning = 1,Good = 0
  2. decimals:小数位
  3. liquidity:当前流动性池深度
  4. v24hChangePercent:24h 价涨跌幅
  5. v24hUSD:24h 成交额
  6. Volatility:滚动 4h 波动率
  7. holders_count:持币地址数

    Vybe API 的 /tokens 端点一次性返回这些指标;仅需填一个 API Key,即可分页拉取 5w+ 条新币记录。

    👉 想动手试试?这篇笔记手把手教你3分钟拉取Vybe的真实数据!(https://okxdog.com/


03 数据预处理:清洗掉噪音列

拿到原始 .json 后,我们要做三件事:

  1. 去掉非预测特征:如addresslastTradeUnixTime → 与标签 Bonus 无关
  2. 标签映射:把Danger|Warning统一成1,Good→0
  3. 测试 / 训练划分:默认test_size=0.4random_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 模型评估:看得见的性能

指标数值(示例)备注
Accuracy0.965总体正确率
Recall (Danger)0.92漏报少,放心
Precision (Good)0.98误杀少,安心

用混淆矩阵一眼看懂:

            预测
        1      0
真  1  132    4
实  0   6     252

07 保存 & 部署: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/


场景示例:把代码搬到实际交易所看效果

  1. DEX聚合器/score API 集成在列表页,每秒刷新代币分数;
  2. 钱包插件 在签名前弹窗“高风险提示”,先过一关模型;
  3. 链上机器人 监控广播 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。

如果你已跃跃欲试,下面两份资料可以即刻开跑:

祝你训练顺利,安全第一!