DRFM模块(合集四篇)
篇1:一文了解MakerDAO的新货币政策工具:锚定稳定模块
锚定稳定模块 (Peg Stabilization Module) 是一种基于 Dai 的固定价格货币互换协议,目的是在市场外部冲击的情况下,给 Dai 的价格提供双边缓冲保护。
在一定的总额度下,用户可以将如 USDC 等稳定币 1:1 铸成新的 Dai。这部分转入的 USDC 会存入流动池中作为储备资产,市场上任何 Dai 也可以 1:1 换回流动池中的 USDC。
背景
近期 DeFi 的"流动性挖矿"让 Dai 成为最热门的资产选择,市场对 Dai 的旺盛需求推动 Dai 的价格高于 1 美元 (1 Dai = ~1.02 USD)。MakerDAO 作为 Dai 系统的治理方,第一目标是保证 Dai 与美元保持软锚定。
为此,Maker 治理开始推行进一步保证 Dai 稳定性的方案,目前「锚定稳定模块」是最合适、最易于实施的选项。
锚定稳定模块 (PSM) 的功能
「锚定稳定模块」可以直接向市场以 1:1 的价格注入新生成的 Dai,消除或减缓 Dai 的溢价,同时,资金池内的 USDC 可以在 Dai 出现折价时提供价格地板保护。
长期来看,「锚定稳定模块」 有助于用户通过抵押其它资产生成 Dai。该流动性窗口给金库持有者提供了 1:1 的法币兑换途径,在确定的价格下,人们将更有激励生成、交易和持有 Dai。
此外,『锚定稳定模块』可以成为稳定币交易的强大的中转站。Maker 治理可以在低费率的交易费用下添加更多的稳定币类型,用户可以通过 Dai 进行不同稳定币之间无滑点的兑换。这不仅将提高 DeFi 整体的流动性,同时可以为 MKR 添加收入来源。
与普通稳定币金库不同,「锚定稳定模块」不属于账户模式,是一个共享的资金池。这意味着背后资产无累计清算风险,资金两边的资产在长期将保持相对平衡。
时间表
在研究后,我们发现「锚定稳定模块」可以直接基于「Sai ->Dai 升级模块」代码调整并实现。鉴于该模块已经经过 6 个月的实际运行检验,因此 PSM 从技术上已经可以立即实施。
Maker 治理计划在7月底之前部署「锚定稳定模块」,同时收集社区内的广泛建议,包括起始额度、其它风险参数,并不断提高和完善该模块功能。
篇2:一文读懂 IRISnet 经济模型四大核心模块
提起跨链项目,通常大家立马会想到 Polkadot 和 Cosmos 两大体系。事实上,即便在Cosmos体系中,还有未被发现的璞玉。Cosmos跨链体系中的IRISnet就是一个值得关注的项目。IRISnet 的主网IRIS Hub是Cosmos生态中第一个上线的Hub,早于Tendermint 团队自己开发的「Cosmos Hub」。在广阔的Cosmos生态中,「IRIS Hub」和「Cosmos Hub」平行存在,各有独到之处。
IRISnet 不仅支持数据和复杂计算跨链操作,更是对亚洲市场和生态拓展进行了布局。IRISnet 通过 iService 已经完成了客户项目的最小可行性验证,并能开启对 defi 应用的支持。随着区块链生态的蓬勃发展、数据经济的爆发以及 IBC 的成熟发展,未来跨链带来的分布式商业将有更多想象空间。
2019 年俨然已被视为跨链元年,众多跨链项目不约而同在今年上线,希望解决独立公链间不具备互操作性的孤岛问题。
随着 Facebook 最近发布了 Libra 计划,将携超过 20 亿的用户,以联盟链的形式进军区块链领域,更预示着在未来,区块链的互操作问题不仅仅局限于公链之间,还会涉及到公链和联盟链之间。要知道,联盟链对传统商业世界及政府公共部门来讲极具现实意义,信息孤岛问题一样严重。因为信任问题,两家敌对的商业公司不能将数据放在一起,两个不同的政府部门或公司,按规定数据不一定能互通有无。而区块链,这个被经济学人杂志形容为信任机器的技术正在发展,有可能打开了数据世界的一扇大门。
提起跨链项目,通常大家立马会想到 Polkadot 和 Cosmos 两大体系。事实上,即便在 Cosmos 体系中,还有未被发现的璞玉。Cosmos 跨链体系中的 IRISnet 就是一个值得关注的项目。
首先,IRISnet 与 Cosmos 项目一样,都是依照 Cosmos SDK 建立的「Hub」,即 Cosmos 体系中的跨链中心,不仅具备与 Cosmos Hub 一样的功能,更有许多独到之处。
这是一个被众多人误解的关系。很多人对 IRISnet 的理解是,这是「Cosmos 的儿子」,是「Cosmos项目的下属项目」。但实际上,IRISnet的主网IRIS Hub是 Cosmos 生态中第一个上线的 Hub,早于 Tendermint 团队自己开发的「Cosmos Hub」。在广阔的Cosmos生态中,「IRIS Hub」和「Cosmos Hub」平行存在,各有独到之处。
IRISnet 是安全高效、架构灵活的去中心化基础链,不仅支持资产跨链,更创新的支持复杂的计算和服务可以被跨异构网络使用。这种「Cosmos/Tendermint + SOA」面向服务的设计,是更高层次的、面向应用层功能模块的架构体系,可以更好的与应用链协作、支持它们专注实现复杂应用场景的运营,节省基础设施的建设成本。
而从技术开发的角度看,Cosmos生态中各条链开发的Cosmos SDK,有很多关键部分其实由 Tendermint 团队和 IRISnet 团队共同开发。如果仔细翻阅白皮书及相关资料,IRISnet获得了Cosmos母基金会 Interchain Foundation的投资 , 在Cosmos 官网的自我介绍中,IRISnet 是唯一和 Cosmos Hub、 Tendermint 放在一起介绍的项目。
如果仔细阅读各跨链项目的白皮书,就会发现不同的跨链项目各有专长。Cosmos 致力于解决资产跨链问题,PolkaDOT 作为后起之秀,致力于创建更大的框架,不只是资产跨链,还包含数据及智能合约跨链。而 IRISnet 则不仅具备 Cosmos 资产跨链能力,其本身团队的过往经验一直聚焦于提供分布式商业服务,其开发出的 iService 涉及数据、复杂计算的跨链互操作服务。
IRISnet 经济模型的四个核心模块
优秀的项目不仅仅要具有技术顶尖的团队,团队具备高执行力,其通证经济设计如果能捕获到更多价值,才能被称为一个好的商业模型。太多的区块链项目并没有思考好自己的商业模式是什么,以及为什么需要发行通证,导致通证无法捕捉项目的价值。我希望通过该文章,简单为大家叙述一下 IRISnet 通证经济的四大模块,依照重要顺序及例证,详细说明一下 IRISnet 在经济模型中的特点,帮助中国区块链社区更好理解该项目的特点。
想更好的理解 IRISnet 的经济模型,不妨从这张图开始:
IRISnet 不仅支持数据和复杂计算跨链操作,更是对亚洲市场和生态拓展进行了布局。
IRISnet 通证经济的四大模块可以分 3 个层次:共识层的 BPoS 模块、治理层的链上参数治理升级模块,以及应用层的 DeFi 支持模块和 iService 服务模块。这些都值得细细研究:
BPoS 共识算法属于 PoS 共识的分支,PoS 共识里通证最主要的功能就是通过 Staking 来维护网路安全,越多的通证参与 Staking,则该网路就具备经济安全性,同时这些进行 Staking 的通证将会被锁定而不在外流通,达到了一个沉淀通证的效果。
IRISnet 的治理层可以支持多种治理形式:文本提案,自动链上参数修改,软件升级, 网络终止提案,Tax 收入分配提案。这些提案的治理过程都要消耗一定的 IRIS 通证以保证提案不被滥用,同时只有参与抵押的用户或节点能对提案投票。
应用层的 iService 服务是开发一个个分布式商业应用的构建模块,也是一个「超级适配器」,可以很好的串联起链上、链下的服务供给方与需求方。在经济模型的设计中,每一个服务供给方在发布自己服务时都需要质押数倍于服务价值的通证,来提供信用保证。
应用层另外一个模块则是火热的 DeFi 开放式金融。IRISnet 本身底层架构是经过验证的 Tendermint 算法及 BPoS 共识,并加上独立开发出来的多资产(Multi-asset)模块,具备了支持各种稳定币、资产通证化及去中心化交易所在 IRIS Hub 上发布或链接的能力。每一次多资产发布,都需要质押一定数量的 IRIS 通证,或消耗 IRIS 通证。此外,DeFi 场景只要通过 IRIS Hub 进行跨链操作,也会使用到 IRIS 作为消耗通证。
从以上四个模块可以看出, IRIS通证的用途广泛,随着未来万链互通,链上链下数据及计算整合并实现跨链 , IRISnet 有可能在未来成为一个相当大市场的媒介平台,将随着服务供给方及需求方的数量增多,而加强平台的网路效应。
与 IRISnet 团队的沟通中得知,IRISnet 团队的战略的主要方向为帮助服务供给方实现应用落地。IRISnet 团队表示,因为只有率先让大家看到在分布式商业中,服务供给方是可以落地的,而且需求方能方便的使用 iService 简易的逻辑调用服务,对 IRIS 通证的强需求就会形成,再加上 BPoS 共识中参与 Staking 维护网路安全需要大量的 IRIS,这样,在未来 IRIS 通证将会越愈发稀缺。
在了解了 IRISnet 通证经济模型中的核心模块之后,我希望通过以下更详细的分析,让读者了解这些模块所发挥的作用。
IRISnet 通证经济场景之一:BPoS,通证沉淀场景
BPoS (Bonded PoS)共识源于硅谷的 Tendermint 团队。Tendermint提供了一个高性能、一致、安全的 BFT(拜占庭容错)共识引擎,适合用于扩展异构区块链,包括公有链,以及注重性能的许可链 / 联盟链。而 IRISnet 基于Tendermint 之上建构了跨链系统。
在 BPoS 共识中,通证持有人将Token委托给网络中节点质押并参与网络验证。在「Bonded PoS」中,「Bonded」就是通过质押绑定权益的意思。如果我们套用近期非常火热的 Staking 经济来看,将Token 委托给节点质押参与网路的动作就叫做 Staking。
每个节点根据自己的投票权重(即自己加接受持币人质押的 IRIS 通证总额)排名,可以参与区块验证获得出块奖励;一般通证持有人作为委托人,可以按比例分享验证节点获得的出块奖励,Bonded PoS 带来的一个创新便是,通过让每个持币人质押通证参与网路共识,每一个持币人需要更谨慎选择节点,一旦节点作恶或做出不当行为,系统将对其惩罚并没收质押中的一些通证。需要说明的是,用户质押 IRIS 后进行解锁,需要 21 天恢复流动性。
一般情况下,PoS 共识的项目方会希望参与 Staking 的比例至少达到 50%,如果大家仔细看 IRISnet 的 Staking 数据,目前只有 26% 左右,这主要原因来自还有大量基金会及团队的币因为锁定并没有参与 Staking (目前在外流通量只有3.47 亿,总量是 20 亿),分开计算散户进行Staking比例其实相当高(有 1.6 亿参与)。
IRISnet 团队版本的 BPoS 又与 Cosmos 团队版本不太相同,IRISnet 团队经过仔细考量后决定简化通胀的计算逻辑,从依照 Staking Ratio 动态计算通胀逻辑改为依据初始总量的 4% 增发逻辑,随着后续总量不断上升,整个系统的通胀率会逐渐下降,IRISnet 版本的好处在固定通胀逻辑对于持币人可以更直观了解,同时大大提升每个块的计算效率。(未来如果项目方想拥有更快效率及更直观了解的模型,也可以直接使用 IRISnet 版本的 SDK 进行开发)
Staking 如上述所说本质是提供网路安全,底层的网路越安全才能够支撑后面两个应用场景,目前根据 IRIS 浏览器的数据显示,已经有 100 多位节点参与网路共识(但前期只有投票权重前 100 的节点才能代表出块,以每年多 13% 的比例逐渐开放)。
IRISnet 通证经济场景之二:iService,未来分布式商业应用场景
如果让我选一个IRISnet最突出、最具创新的元素,那我会选择「iService」作为代表。
iService 可以简单的解释为一个「超级服务适配器」。如果更通俗的解释,可以理解为一个京东商城,在这个平台上面同时存在着服务提供方及服务的需求方,双方通过 iService 智能地进行撮合,并链接彼此。
由于服务提供方和需求方因为所用的底层架构不尽相同,在商业对接上会产生复杂的技术沟通成本以及人力沟通成本,这将是 iService 的解决痛点。
全球知名的顾问公司麦肯锡曾经写过一篇文章,讲「区块链如何增进公共部门数据管理」,描绘了未来数据服务及分布式商业的场景。我借用了该文章里的一张图,并根据 iService 的实际情况做出对应修改,向大家描绘 iService 的现实应用场景。
可以设想这样一个场景:个人通过 iService 与医院或是保险机构进行互动。在未来,每个人可以将隐私的数据资料存储在区块链上,并用属于个人的公钥、私钥对进行加密,个人可以通过 iService 平台轻松选择不同的服务,并授权医院或保险机构来读取、写入存在区块链上或者链下的资料。
iService 作为一个平台,当个人的请求与服务提供方的服务对接上时,机构就可以取得个人数据资料的使用权,并通过用户的检查报告,试算最适当保费,最后返回用户结果。
此外,iService 还可以撮合机构与机构之间的数据服务调用。当然,不仅仅是数据,有了 IRISnet 跨链服务,各种应用可以不用自己去实现复杂的存储和隐私技术,数据可以存储在专注于分布式存储的区块链上,比如 IPFS,然后通过跨链服务,用提供隐私计算的区块链来完成代理重加密。
这样的医疗健康数据交换网络就可以专注于自己的业务流程,快速搭建,充分利用其他一些网络的能力,通过 iService 的终端用户完全不需要了解底层支撑的计算是来自其他的网络。
我们再通过 IRISnet 官方提供的一张介绍图,更清楚地理解一下「iService」的运行原理。
从这张图可以看到,IRIS SDK (开发工具包)除了具有 Cosmos SDK 模块外,其 iService 基础设施中还包括多个接口,让服务提供商可以更快地通过服务定义(Definition)、服务绑定(Binding)接入,同时服务需求方也能通过查询(Query)接口了解服务的能力和接口,然后可以通过调用(invocation)接口来使用服务。
IRIS SDK 打造的 IRISnet 是一个跨链枢纽,也可以叫做「 IRIS Hub」, 专注于支持跨链服务请求,可以看作是跨链服务的开放市场。
通过 iService,服务提供商可以方便的接入链上(包括异构的公有区块链和联盟链)资源,还可以接入各种云服务、企业应用提供的计算能力。
IRIS 通证在 iService 平台如何消耗?
如果某个项目觉得自己的技术服务还不错,在市场上也有应用价值,希望对外分享数据、服务来变现,可以按 iService 标准将其服务与定价发布在 IRIS Hub 上。这个过程中,需要质押服务本身费用数倍的 IRIS 通证。这样,需求方就可以在这个平台上检索并调用这套服务,服务成功完成后,费用的结算也就完成,供给与需求实现均衡。
最妙的是,如果一个项目是直接用 IRIS SDK 基于 iService 开发的,其业务服务可以部署在自己的网络上,灵活地设置其服务范围是「本地」,还是可以「被其他链调用」。如果是可以跨链调用的服务,其对应的服务定义和绑定信息就会通过 IBC 协议,自动同步到 IRIS Hub 上,为其他接入 IRIS Hub 的应用链所见。
接入 IRIS Hub 的应用可以方便地查询自己能见的服务,调用时,如果服务不在本链,IRIS Hub 会支持该服务请求,可以正确、透明地完成链间调用。虽然服务提供方可以要求用其他资产支付(比如稳定币,IRIS Hub 第三季度就会有稳定币了),但发布服务需要抵押 IRIS 通证完成。
此外,IRIS 通证还可以使用在服务调用发生纠纷的仲裁场景,就像我们在京东商城购物与卖家发生纠纷,平台方会协助处理,而去中心化世界里,可能是节点,也有可能是抵押一定 IRIS 通证的专业仲裁者,协助仲裁过程并获得一定报酬。
想象未来的世界,数据即是黄金,一切皆可计算,数据跨链、计算跨链,跨链服务将加速分布式应用发展的进程。
通过和 IRISnet 团队的沟通,我们得知 iService 正在进行一些落地场景的探索:
· IRISnet 核心开发团队正与复星健康云合作打造原型系统,利用 IRISnet 让未来各个医院的部分数据能在链上自由、安全,有激励机制地流动,让保险公司等机构也能参考医疗数据做出决策,使大数据发挥出更大的商业价值。
· IRISnet 项目在和提供隐私计算的公链项目 PlatON 合作,让隐私计算能方便地通过跨链服务为其他应用链所用。
· IRISnet 核心开发团队会在第三季度部署一些 DeFi 应用需要的基础服务,比如行情信息数据查询服务,随机数产生服务等
IRISnet 通证经济场景之三:去中心化金融(DeFi)
据 IRISnet 团队介绍,DeFi (去中心化金融)或 Open Finance (开放式金融)也是 IRISnet 即将支持的场景。
DeFi 领域的尝试目前被誉为区块链最快、最有价值落地的场景之一,该领域从以太坊兴起,许多公链都想分食这块蛋糕,IRISnet 计划在其中扮演什么样的角色?
据 IRISnet 创始人 Harriet 介绍, IRISnet 具有高性能、去中心化并能通过链上治理支持安全的网络升级进化,非常适合支撑 DeFi 应用。在即将到来的7月份网络升级完成后,IRISnet 将支持包括原生资产、网关资产和 IBC (跨链通讯协议)资产的发行。
Harriet 表示,有了这些基础以后,许多有趣的 DeFi 应用,包括稳定币、资产代币化、借贷、理财就可以落地了。IRISnet 官网上已经列出的生态合作伙伴包括 GDEX、Axonomy 也正在基于 IRISnet 进行相应功能的开发。
一个简单的例子是,DeFi 应用需要通证之间的汇率来支持理财和借贷这样的场景,IRISnet 的 iService 可以方便地让行情信息(比如像 Coinmarketcap 这样的中心化的系统) 以数据服务的形式发布在 IRIS Hub 上 , 这样,DeFi 应用就可以直接调用,而不必每个应用都去自己接这样的数据信息。
iService 还可以根据电商的信息提供有隐私保护的信用查询接口,让有 KYC 无抵押贷款的 DeFi 服务变成了可能。
据 IRISnet 团队介绍,iService 非常灵活,并不依赖 IBC (跨链通讯协议)。即便是 IBC 尚未开发完成时,服务也可以直接绑定在 IRIS Hub 上,通过 iService 的服务供应商来适配。链和链之间的可信交互通过 IRIS Hub来验证,其具体服务业务的逻辑是跑在服务供应商连接的链或中心化系统上的,并不会给 IRIS Hub 带来太大的计算负担。
在这些 DeFi 应用中,发行资产时必须抵押或消耗一部分 IRIS 通证 , 中间的资产交换消耗的手续费也可以是 IRIS。未来只要 IRISnet 建立一个稳定安全的底层网路并赋能更多 iService 及 DeFi 案例,就能吸引更多人参与进入 IRISnet 跨链网路中。
IRISnet 网络的经济前景值得期待
当然,区块链技术的发展尚属早期,众多公链的生态发展尚在探索之中。在这样的情况下,很多人觉得跨链尚早。不过相比其他跨链生态, IRISnet 通过 iService 已经完成了客户项目的最小可行性验证,并能开启对 DeFi 应用的支持。随着区块链生态的蓬勃发展、数据经济的爆发以及 IBC 的成熟发展,未来跨链带来的分布式商业将有更多想象空间。
篇3:人力资源六大模块知识
人力资源管理是现代企业资源决策和高核心竞争力的重要手段,其六大模块你了解多少呢?以下是由小编整理关于人力资源六大模块知识的内容,希望大家喜欢!
模块二、人力资源六大模块招聘和配置人才
人员招聘是一个企业人力资源管理的起点,也是人力资源的入口,它决定着一个企业人力资源的基本格局,是企业发展的活力源泉。因此,关键又于做好需求分析,首先明确企业到底需要什么人,需要多少人,对这些人有什么要求,以及通过什么渠道去寻找企业所需要的这些人。
人员任用讲求的是“人岗匹配”,“适岗适人”。找到合适的人却放到了不合适的岗位与没有找到合适的人一样会令招聘工作失去意义。招聘与配置不能被视为各自独立的过程,而是相互影响、相互依赖的两个环节,只有招聘合适的人员并进行有效的配置才能保证招聘意义的实现。
模块三、人力资源六大模块培训与开发管理
培训与开发是中小企业人力资源管理的重要环节,是帮助员工胜任工作并发掘员工的最大潜能的关键所在。尤其在现阶段整体人力资源水平相对较低及中小企业难以获得高素质人才的状况下,建立一套针对性强的培训制度能够有效地提高中小企业整体人力资源素质。
此外,培训工作必须做到具有针对性,要考虑不同受训者群体的具体需求。培训应该定期展开,培训内容应该根据企业的发展而不断得到更新,摆脱那种赶时髦的做法,使培训真正成为提高人力资源效率的一个有效途径。
模块五、人力资源六大模块重视绩效管理
绩效考核的目的在于借助一个有效的体系,通过对业绩的考核,肯定过去的业绩并期待未来绩效的不断提高。实施考核必须有一套科学可行的绩效标准,这套标准不仅要反映员工的工作成效,更重要的是要与整个企业的发展战略相结合,能够体现出企业家、管理层对员工发展方向的引导。其中反馈制度必须作为考核制度的一个重要的组成部分,为考核的顺利进行提供支持。
模块六、人力资源六大模块员工关系管理
员工关系管理是在企业人力资源体系中,各级管理人员和人力资源职能管理人员,通过拟订和实施各项人力资源政策和管理行为,以及其他的管理沟通手段调节企业和员工、员工与员工之间的相互联系和影响,从而实现企业的目标。
这种沟通更多采用柔性的、激励性的、非强制的手段,从而提高员工满意度,支持企业其他管理目标的实现。其主要职责是:协调员工与管理者、员工与公司、员工与员工之间的关系,引导建立积极向上的工作环境。
看过“人力资源六大模块知识“
模块四、人力资源六大模块薪酬与福利工作
现阶段中小企业中的员工来说,薪酬与福利还是最大的激励因素。薪酬福利与人们的生存与发展息息相关。薪酬水平要体现公平公正,不仅要做到按劳分配,还要体现出最终成果的差异,合理设定工资福利等级,按照一定的标准分配给相应的员工。
薪酬福利必须做到物质形式与非物质形式有机地结合,这样才能满足员工的不同需求,发挥员工的最大潜能。当然,薪酬福利要合理拉开差距,避免“大锅饭”的现象,对于表现突出的员工,应该有一套能够体现出其对企业贡献的薪酬制度,这样可以起到更大的激励作用。
模块一、人力资源六大模块规划。
人力资源规划是一项系统的战略工程,它以企业发展战略为指导,以全面核查现有人力资源、分析企业内外部条件为基础,以预测组织对人员的未来供需为切入点,内容包括晋升规划、补充规划、培训开发规划、人员调配规划、工资规划等。
要知道,人力资源六大模块规划的目的在于结合企业发展战略,通过对企业资源状况以及人力资源管理现状的分析,找到未来人力资源工作的重点和方向,并制定具体的工作方案和计划,以保证企业目标的顺利实现。
篇4:揭秘IPFS数据交换模块Bitswap
导 读
本文为IPFS系列文第4篇,详解IPFS的核心模块——Bitswap。
(之前的技术干货已为读者详细讲解了IPFS文件存储、文件系统等相关内容,精彩回顾详见文末链接)
星际文件系统(InterPlanetary File System,缩写IPFS)是一个旨在创建持久且分布式存储和共享文件的网络传输协议。
与传统的文件系统不同,它是一种基于内容寻址的点对点超媒体分发协议。
IPFS网络中的节点构成一个分布式文件系统网络,其中Bitswap是IPFS的核心模块,负责与网络中其他节点之间请求和发送数据块。
图1
IPFS将文件分解为称为block的数据块,这些块由内容标识符(CID)标识。
IPFS文件内容存储在不同的节点上,每个节点存储root block,少量节点存储完整文件数据,大部分节点存储部分文件block。因为block分散存储在不同节点,Bitswap协议解决了从多个节点高效获取全部数据块的问题。
图2 多节点文件存储示意图
总体架构
本文基于Bitswap v0.3.3版本进行分析。
IPFS向Bitswap获取block,Bitswap是IPFS exchange接口的具体实现,负责完成IPFS网络数据交换功能。
图3 Bitswap组件架构图
Bitswap协议内容比较繁琐,为了降低实现复杂度协议划分为block请求模块、block发送模块、会话管理模块、block提供者发现模块、网络模块等。
Bitswap模块负责接收新的消息并且提供对外数据交换接口。
session管理模块用来管理多个session,每个session管理一组文件的下载,来提高下载效率。
block发送模块负责管理向其它节点发送数据块。block请求模块负责管理数据块的请求。block提供者发现模块负责通过DHT网络发现网络中的数据块,通常session找不到已拥有所需block的节点时会调用此模块进行数据块发现。协议概述
为了完成节点间block交换,Bitswap定义了通信消息及通信协议。
图4
Bitswap消息处理流程:
1、IPFS请求文件区块,Bitswap发送want-have消息携带CID1信息到连接的所有节点。节点根据自己是否有CID1文件块返回have或dont-have消息。
2、client向拥有CID1的节点发送want-block消息,节点返回相应的block消息。
3、当没有节点有请求的block,Bitswap广播want-have到所有的连接节点,或者通过DHT查找拥有文件区块的节点。模块详解
▲ Bitswap模块
Bitswap模块负责接收新消息并且实现对外的数据交换接口。
当接收到新消息后,Bitswap处理流程:
1、记录有关消息的一些统计信息
2、通知发送模块wants消息,这样数据发送模块可以根据实际情况向需求节点发送响应消息。
3、通知发送模块任何收到的blocks,发送模块根据节点的需求列表可以将接收到的块发送给任何需要它们的节点
4、向SessionManager通知接收到的blocks,HAVEs和DONT_HAVEs消息,这样SessionManager可以通知消息相关的session。
Bitswap通过Facade Pattern 提高了模块使用的便利性,使得Bitswap子系统的用法变得简单,避免了IPFS和Bitswap的高度耦合。
▲ Session管理模块
session管理模块用来管理多个数据块下载session,每个session管理一组文件的下载。
当SessionManager收到新消息时,它将
1、通知BlockPresenceManager组件跟踪每个block。
2、通知对接收到的block感兴趣并想要的Sessions。
3、通知PeerManager组件收到的block,PeerManager检查是否有任何wants被发送到节点以接收已经收到的块。 如果是这样,它将向那些节点发送“CANCEL”消息,防止其它节点重复发送消息。
Session管理模块通过协调多个session的数据需求来提高数据交互的效率,避免数据块的重复请求、发送。
▲ Session模块
Session管理一组文件的下载,用来提高一组文件块,比如单个文件下载效率。当IPFS调用Bitswap时,Bitswap会创建一个新的Session并调用Session的相应方法,比如GetBlocks()获取blocks。Session会管理一个节点列表,数据获取过程只会向session中的节点获取数据,而不是所有的连接节点。当Session中的节点都没有某个block时,Bitswap才会通过DHT获取具有block的节点并加入session。
由于session刚开始没有任何节点,处于“discovery”模式。当IPFS最初从session请求block时,该session处理流程如下:
1、通知SessionInterestManager组件它感兴趣的block。
2、通知sessionWantManager 组件需要的block。
3、通知PeerManager组件向连接节点发送“want-have”消息,以发现哪些节点有需要的block。
4、查询ProviderQueryManager组件以发现哪些节点具有该block。
当session收到带有“ HAVE”或“ block”的消息时,它将通知SessionPeerManager组件。
当session收到带有“ block”的消息时,它将通知SessionInterestManager组件。
一旦session具有节点,就不再处于“discovery”模式。当IPFS请求后续block时,session将通知sessionWantSender组件。sessionWantSender组件通知PeerManager组件向会话中的节点发送“ want-have”和“ want-block”消息。
对于session所需的每个block,sessionWantSender组件通过与BlockPresenceManager组件核对哪些节点已为该block发送了“ HAVE”,来确定哪个节点最有可能拥有该block。如果多个节点发送过“ HAVE”,则会根据先前请求回复速度来选择节点。
由于DHT内容发现速度慢并且网络带宽消耗大,session通过向一组含有目标数据块可能性大的节点获取数据,从而大大提高了数据块获取的效率。
▲ Block发送模块
block发送模块负责管理向其它节点发送数据块,包含节点需求管理组件(Ledger)和消息发送任务队列(PeerTaskQueue)。
Engine是block发送模块的处理类,当Engine被告知有新的wants时
1、将want添加到Ledger,Ledger会存储每个节点的需求列表。
2、检查blockstore中的相应block,并将任务添加到PeerTaskQueue组件。如果block库没有想要的block,则添加“DONT_HAVE”任务;如果blockstore有block,对于“want-have”添加了“HAVE”任务,对于“want-block”添加了“block”任务。
3、当Engine收到新block的消息时,它会检查Ledger以查看是否有节点需要此block。对于发送“want-have”的每个节点向PeerTaskQueue组件添加一个 “HAVE”任务,对于为发送了“ want-block”的每个节点,向PeerTaskQueue组件添加一个“block”任务。
4、Engine会定期从PeerTaskQueue组件中取出任务,并创建带有“ blocks”,“ HAVEs”和“ DONT_HAVEs”的消息。
PeerTaskQueue组件通过对任务进行优先级排序,发送队列中数据量最少的节点方具有最高优先级,通过这种流控措施,提高数据块发送处理效率。
▲ 数据块请求模块
Block请求模块负责管理数据块的请求。PeerManager组件为连接到Bitswap的每个节点创建一个MessageQueue组件,记录了“want-have” 、“want-block”已发送到哪个节点,并将任何新的wants定向到正确的节点。并且MessageQueue组件通过合并多个want为一条消息,然后将该消息发送给节点,从而提高了消息发送效率。
▲ 内容发现模块
当Bitswap找不到已拥有所需block的节点时,它会使用DHT进行内容发现。Bitswap通过ProviderQueryManager组件管理这些请求,ProviderQueryManager组件对请求进行速率限制,并对进行中的请求进行重复删除处理。总结
Bitswap作为IPFS网络数据交换接口的具体实现,设计并实现了一套高效的节点间交换数据的协议。
协议主要关注点是如何快速、高效获取需要的block,其中包括节点选择策略,如何最大化利用每个节点的能力。
Bitswap通过Facade Pattern 提高了模块使用的便利性,在具体实现上解耦复杂依赖到各功能模块,从而降低系统实现的复杂度。