module
Version:
v0.0.0-...-12a9a0b
Opens a new window with list of versions in this module.
Published: Jul 10, 2025
License: GPL-3.0
Opens a new window with license information.
README
¶
ml_chain
shardchain for FL
流程设计
1. 分片链设计

通讯设计
1、go-python交互接口
- 全局模型导入,训练一轮后,取得加噪后的局部模型以及训练参数
- 输入:全局模型
- 输出:加噪后的局部模型、训练参数
- 使用模型根据自己的测试集计算损失值
- 输入:模型
- 输出:损失函数
- 模型聚合
- 输入:局部模型
- 输出:全局模型
2、分片链节点间通信消息类型
-
区块信息
- 数据:Block
- 发送:通过区块hash得到该轮miner,收集期间局部模型,生成全局模型后,生成区块发送给其他节点
- 处理:
- 判断区块是否匹配hash,prevHash是否匹配上一个区块(因为是同步训练,我们就不考虑孤块的情况),区块是不是该轮miner创建的,这一步其实就是consensus做的
- 将区块加入区块链中,将区块中的全局模型导入到python中,开始训练
-
局部模型信息:
- 数据:加密模型+训练参数+VRF结果证明
- 发送:在一轮迭代完毕后,给新模型加噪声,并使用VRF生成验证委员会,发送给miner节点
- 处理:
- 如果自己不是miner,转发给miner
- miner收到后,验证验证委员会是否合理随机,发送局部模型给验证节点
-
局部模型验证请求信息:
- 数据:局部模型
- 发送:验证验证委员会是否合理随机,发送局部模型给验证节点
- 处理:验证者导入局部模型,使用自己的验证集计算损失函数,生成验证结果给miner
-
局部模型验证响应信息:
- 数据:损失函数 + 签名
- 发送:验证者导入局部模型,使用自己的验证集计算损失函数,生成验证结果给miner
- 处理:根据所有的验证结果,计算出该局部模型的影响系数;
-
节点注册信息:(√)
- 数据:remotePeer
- 发送:节点启动后,发送该消息给所有可能的节点
- 处理:把该节点注册到发现服务中
3、区块内交易类型
- 任务初始化交易
- 数据:初始模型 及 超参数,以及论文中任务链的创世区块中的数据
- 处理:将初始数据导入到python中,初始化roleManager等
- 任务迭代交易
- 数据:对应论文中的一个区块
- 处理:作为新模型导入python
- 任务创建交易
- 数据:主链上的一个区块,用于创建一个分片链
- 处理:对于主链而言只是存储,对于一般节点可以根据该交易生成一个任务链的创世区块
- 主链是否需要特殊的创世交易(?)
go代码模块设计
- bccsp:负责提供所有加密功能
- block:区块链相关
- chain:区块链定义
- consensus:共识的接口
- manager:区块链的管理器,区块链对外接口,查询区块,区块增加,触发区块、交易监听器等
- comm:通信模块
- comm:通信相关,负责对外通信
- crypto:信息加密
- discovery:节点发现服务
- node:通信节点,该通信模块对系统内部的接口
- mainchain:主链
- trainer:任务链节点
- message:定义各种通信消息的监听器
- role:定义角色管理器,用于选取和管理网络中各个节点的角色
- trainer.go:trainer对象本身
- model:
- aggregate:聚合模块
- 处理收到的局部模型
- 聚合模型
- 生成一轮迭代的交易,发送给挖矿者(就是自己吧,但是依旧推荐走comm,而不是内部依赖)
- train:训练模块
- 配置一个txhandler,将新一轮迭代的交易发送给该模块
- 发送模型验证请求和处理模型验证响应
- 管理训练任务
- validate:验证模块
- python:与python交互
- consensus:实现trainer使用的共识算法
- proto:所有通信要用的协议对象
- message.go:定义所有消息类型
- model.go:定义模型相关的类型
- block.go和transaction.go:定义区块和区块内交易
- common.go:定义一些通用的类型
Click to show internal directories.
Click to hide internal directories.