Files
ca_auto_table/chain/add_mining_tutorial_column.py

152 lines
5.4 KiB
Python
Raw Normal View History

2025-12-04 15:50:55 +08:00
import csv
from typing import List
def load_rows(csv_path: str) -> List[List[str]]:
"""
加载 CSV 并返回行列表
参数:
csv_path: CSV 文件路径
返回值:
包含表头与数据的二维列表
"""
with open(csv_path, "r", encoding="utf-8") as f:
reader = csv.reader(f)
return [row for row in reader]
def save_rows(csv_path: str, rows: List[List[str]]) -> None:
"""
保存 CSV 行列表到指定路径
参数:
csv_path: 目标 CSV 文件路径
rows: 二维列表包含表头与数据
"""
with open(csv_path, "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(rows)
def tutorial_for(chain_name: str, mining_method: str) -> str:
"""
根据挖矿方式生成简洁的部署教程
参数:
chain_name: 公链名称
mining_method: 挖矿方式描述
返回值:
教程简述单行分号分隔步骤
"""
mm = (mining_method or "").lower()
if "sha-256" in mm:
return (
"准备ASIC矿机(比特币/BCH/BSV); 选择矿池(如ViaBTC/AntPool); 在矿池创建账户与子账户; "
"矿机接网与供电, 在Web面板设置矿池地址与Worker(钱包地址.矿机名); 监控算力与温度; 收益自动结算至钱包"
)
if "scrypt" in mm:
return (
"准备Scrypt ASIC(挖LTC/DOGE合并挖矿); 选择矿池(F2Pool/AntPool); 配置矿池URL、钱包地址与Worker; "
"优化散热与功耗; 查看合并挖收益在矿池面板"
)
if "kheavyhash" in mm:
return (
"安装GPU矿软(BzMiner/Gminer); 选矿池(KaspaPool/Herominers); 示例: bzminer -a kheavyhash -o stratum+tcp://pool:port -u 钱包地址; "
"确保显卡驱动与超频稳定; 收益打到Kaspa钱包"
)
if "randomx" in mm:
return (
"CPU挖矿安装xmrig; 选矿池(支持XMR的池); 生成Monero钱包地址; 运行: xmrig -o pool:port -u 钱包地址 -k; "
"调优HugePages与内存频率以提升性能"
)
if "equihash" in mm:
return (
"安装miniZ/GMiner等Equihash矿软; 选矿池(ZEC/ZEN池); 运行示例: miner -a equihash -o stratum+tcp://pool:port -u 钱包地址; "
"调整显存时序/功耗曲线以稳定收益"
)
if "kawpow" in mm:
return (
"安装T-Rex/NBMiner; 选Ravencoin矿池; 命令示例: t-rex -a kawpow -o stratum+tcp://pool:port -u 钱包地址 -p x; "
"确保电源足够并优化显卡风扇曲线"
)
if "autolykos" in mm:
return (
"安装lolMiner/BzMiner; 选Ergo矿池; 示例: lolMiner --algo AUTOLYKOS2 --pool pool:port --user 钱包地址; "
"使用高显存效率显卡并优化核心频率"
)
if "blake2s" in mm:
return (
"准备Kadena ASIC; 选择KDA矿池(如PoolFlare); 在矿机面板配置矿池地址与钱包; "
"监控算力与设备温度; 收益结算至Kadena地址"
)
if "blake2b" in mm:
return (
"CKB可用ASIC或GPU矿软(NBMiner适配Blake2b); 选矿池(如F2Pool); 命令示例: nbminer -a blake2b -o stratum+tcp://pool:port -u 钱包地址; "
"保持稳定网络与散热, 收益至钱包"
)
if "存储" in mm or "plot" in mm or "硬盘" in mm:
if "chia" in chain_name.lower():
return (
"安装Chia客户端; 创建钱包与农场; 使用Plotter(BladeBit/MadMax)生成Plot文件; 挂载Plot目录并启动farmer; "
"加入矿池以稳定收益; 定期维护硬盘健康"
)
if "filecoin" in chain_name.lower():
return (
"参考官方文档部署lotus/boost; 配置存储矿工(硬件: 大容量HDD/带宽/计算); 完成密封与证明流程; "
"对接交易市场提供存储服务; 收益结算至FIL钱包"
)
return (
"部署存储型节点; 按官方文档准备大容量硬盘与稳定带宽; 运行矿工进程并完成证明流程; 加入矿池或市场以获取稳定收益"
)
if "gpu" in mm or "asic" in mm or "cpu" in mm:
return (
"选择对应矿软/设备; 在矿池创建账户; 配置矿池地址与钱包/Worker; 保持稳定供电与散热; 监控算力与收益"
)
# 默认情况
return "不适用"
def add_tutorial_column(csv_path: str) -> None:
"""
读取 CSV, 在末尾新增列挖矿部署教程并对可挖链填充部署步骤
参数:
csv_path: CSV 文件路径
"""
rows = load_rows(csv_path)
if not rows:
return
header = rows[0]
if "挖矿部署教程" not in header:
header.append("挖矿部署教程")
for i in range(1, len(rows)):
row = rows[i]
# 兼容行长度不足的情况
while len(row) < len(header):
row.append("")
chain_name = row[1] if len(row) > 1 else ""
mine_flag = row[5] if len(row) > 5 else ""
method = row[6] if len(row) > 6 else ""
row[-1] = tutorial_for(chain_name, method) if mine_flag == "" else "不适用"
save_rows(csv_path, rows)
def main() -> None:
"""
执行列新增与填充
"""
csv_path = "chain/top_100_chains.csv"
add_tutorial_column(csv_path)
if __name__ == "__main__":
main()