IPFS官宣libp2p新版本,透露了哪些突破性改变?

2019-08-09

Libp2p是IPFS的底层核心,整个IPFS是由libp2p等模块构成,libp2p是一个模块化网络堆栈。近日IPFS官方发布js-libp2p 0.26.0版本啦,它有哪些新的功能呢?我们一起来研读吧!

IPFS官宣libp2p新版本,透露了哪些突破性改变?

libp2p

要闻

Gossipsub

非常感谢 ChainSafe 团队的杰出工作,Gossipsub是一个比Floodsub更高效的发布/订阅路由器(pubsub router)。Gossipsub是广播到一个受控的节点的子集,而不是向所有节点广播。有关Gossipsub是如何工作的,以及它与Floodsub有哪些不同之处,欲了解更多信息,欢迎通过以下链接查看。

https://github.com/libp2p/specs/tree/master/pubsub/gossipsub


IPFS官宣libp2p新版本,透露了哪些突破性改变?

Gossipsub


如果您使用的是Pubsub,现在可以切换使用Gossipsub,而不是Floodsub。你需要向之前的节点传输资料吗?别担心,对于不支持的节点,Gossipsub将自动撤回到Floodsub。欢迎参阅下面应用程序界面中已更改的信息,来了解如何迁移配置来使用Gossipsub。


Promisify

当我们迁移到async/await时,我们目前,几个较低级别的文件库正在利用libp2p进行测试。promisify libp2p应用程序界面对向async/await的过渡将有很大帮助。用 async/await 函数来处理异步,后面将取代Promisify函数方法,因为libp2p将在那时具有完整的async/await函数支持。请参阅下面的API更改以查看突破性的变化。


API的变化

突破性的演进

配置

切换选项

libp2p-switch的配置已经改变。blacklistTTL 和blackListAttempts已分别更改为denyTTL 和 denyAttempts。你可以按如下方式设置:

const libp2p = new Libp2p({
 switch: {
 denyTTL: 120e3,
 denyAttempts: 5,
 }
 ...
})

Pubsub

订阅: 为符合pubsub interface,libp2p.pubsub.subscribe的params顺序已重新排序。它们以前是topic, options, handler, callback,现在是topic, handler, options, callback。如果你执行时不使用 options,你应该可以忽略此更改。

配置: Pubsub以前是通过EXPERIMENTAL配置启用的。您现在必须指定pubsub执行(Gossipsub或Floodsub),并通过它自己的配置启用/禁用它。设置pubsub将自动启用它。您可以通过在配置中显式设置enabled为false来禁用它。

const libp2p = new Libp2p({
 modules: {
 pubsub: require('libp2p-gossipsub'),
 ...
 },
 config: {
 pubsub: {
 enabled: true
 },
 ...
 }
 ...
})

Promisify

所有libp2p公共方法都已被 promisify,因此可以省略回调以支持基于promise的使用,包括async/await。例如,start可以用作:

libp2p.start(onStart)
// or
await libp2p.start()

Gossipsub

Gossipsub被整合到现存的libp2p.pubsub 应用程序界面中。一旦Gossipsub被用于执行你的pubsub,你将能够像之前使用Floodsub那样使用Gossipsub。有关pubsub的配置变化,请查阅上文。


鸣谢

感谢以下朋友,是你们促成了此次新版本的发布。这38位朋友按字母顺序排列,你们为新版本共做出429个贡献:

● Abraham Elmahrek (1 PR, 1 issue, 2 comments)

● Alan Shaw (1 PR, 6 reviews, 5 comments)

● Alex Potsides (1 PR, 1 review)

● Cayman (4 PRs, 2 issues, 26 reviews, 10 comments)

● Cody Eilar (2 issues, 4 comments)

● David Dias (6 issues, 8 comments)

● dirkmc (4 reviews, 1 comment)

● Filip Š (1 PR, 1 comment)

● Gregory Markou (4 PRs, 18 reviews, 17 comments)

● hapsody (1 comment)

● Henrique Dias (1 issue, 1 comment)

● Hugo Dias (1 review)

● Isaac Jacobs (1 issue, 7 comments)

● Jacob Heun (14 PRs, 3 issues, 31 reviews, 37 comments)

● Jakub (1 PR)

● John_Suu (2 comments)

● Jorropo (2 PRs)

● Justin Maier (1 comment)

● kumavis (1 review)

● laubsauger (1 issue)

● Maciej Krüger (2 PRs, 1 issue, 2 reviews, 20 comments)

● Marcin Rataj (1 review)

● Marin Petrunić (1 issue, 5 reviews, 1 comment)

● Michael FIG (1 PR)

● Michiel De Backker (1 comment)

● Mikeal Rogers (1 comment)

● Mikerah (2 PRs, 7 reviews, 18 comments)

● Nate Foss (1 PR, 1 issue, 2 comments)

● ohager (2 comments)

● Pat White (1 comment)

● Qmstream (2 PRs, 2 comments)

● Raúl Kripalani (1 comment)

● Richard Schneider (1 comment)

● Saquib ul hassan (1 issue, 1 comment)

● Steven Allen (1 PR)

● Tapasweni Pathak (1 PR, 1 comment)

● Vasco Santos (17 PRs, 4 issues, 59 reviews, 36 comments)

● zthomas (1 issue)


你也想贡献自己的力量吗?

你是否想为IPFS项目做出贡献,但却不知道如何着手呢?你可以从以下几个地方开始:

● 在libp2p repo中点击help wanted标签。


IPFS官宣libp2p新版本,透露了哪些突破性改变?

libp2p repo


● 加入IPFS All Hands,介绍一下你自己并告诉我们你想在哪里做出贡献 https://github.com/ipfs/team-mgmt#all-hands-call。

● 测验IPFS,让我们看看你做了什么! All Hands call也是演示的完美场所,加入All Hands call并向我们展示你的成果。

● 加入http://discuss.libp2p.io/的讨论,帮助用户寻找答案。

● 加入Libp2p Team Sync并成为Sprint行动的一份子!


还有其他问题吗?

discuss.libp2p.io网站,是咨询关于libp2p问题的绝佳去处。我们也在Freenode的#libp2p栏目中提供支持。


IPFS官宣libp2p新版本,透露了哪些突破性改变?

discuss.libp2p.io