BTD 项目用户进行文件存储时,需要使用 HDT 对 BTD 项目进行驱动。 BTD 项目文件系统使用 BDFS 分布式文件系统作为底层文件系统5.8.1 典型存储过程 BTD 项目用户 A 存文件时,先将所需存储的文件进行分片和冗余加密,并形成文件分片的 Merkle 树,然后向存储链广播相应的分片存储请求消息,内容包含任务序号、文件分片大小、Hash 值,以及所需存储的副本数量、节点向下广播跳数、广播有效期和所支付的 HDT 等相关信息。智能合约核实用户 A 的 HDT 后将其所支付的 HDT 进行冻结,然后广播消息才能对外发送,以防止 HDT 不足的用户浪费存储资源行为的产生。用户 A 在 BTD 项目上的临近节点和路由节点收到该任务广播后,先校验用户 A 的 BTD 项目地址是否真实,以及合约任务所输入的 HDT 是否充足,校验任务真实性后,决定是否响应本次存储任务。如果该临近节点决定执行本任务,则将该信息的广播跳数减 1 后继续向自己的临近节点进行广播。如果临近节点决定不参与执行本任务,则不减广播跳数,直接向临近节点进行广播。节点依次类推进行消息广播,直到跳数减到 0 时截止广播。所有决定参与该任务的节点,都直接与用户 A 建立连接。此时用户 A 将根据响应存储文件的节点个数 N 和所需存储的份数 M,决定下一步操作:如果 N>=M,则智能合约根据节点的响应时间次序和节点存储服务质量加权,选择 M 个节点执行本次存储,由最终所确定和验证存储服务完成的 M 个节点共享用户 A 对本次存储服务所支付的 HDT。如果 N将根据 Hash 值判断已执行而选择忽略本次存储任务,不减广播跳数直接向临近节点广播。依次类推,直到用户 A 的存储任务被完整执行并验证后,同时用户 A 向最终的 M 个节点完全支付本次存储服务所对应的 HDT。无恶意节点情况时,典型存储任务一般在最多 2 次广播内完成。 BTD 项目创造性地使用 HDT 的成功交易作为信任度判断。某个存储服务用户的信任度与该用户地址为存储所花费的 HDT 总数正相关,而某个存储节点的信任度则与该存储节点地址因为提供存储服务而获得的 HDT 总数正相关。因此正常完成的存储任务,在将用户 A 用于存储服务所支付的 HDT 转移到存储节点的同时,既增加了用户 A 的信任度,也增加了存储节点的信任度。