Berty:gomobile + IPFS的发展历程

2020-07-06 16:21:50

gomobile-ipfs项目的成立,其演变以及沿途学习的一些经验教训

gomobile + IPFS的发展历程


  Gomobile IPFS

  灯泡熄灭已经快一年了:“嘿!大家!我们正在使gomobile + IPFS成为现实!”

  为什么要紧急?请继续阅读以了解gomobile-ipfs项目的成立,其演变以及沿途学习的一些经验教训。


  gomobile-ipfs创意的诞生


gomobile-ipfs创意的诞生


  在Berty v1(2018-2019)的开发过程中,我们使用LibP2P:Protocol Labs团队提供的基础IPFS库,可以轻松开发分布式应用程序。当时,我们选择开发一个与标准IPFS节点不完全兼容的自定义Berty节点。

  在2019年6月,我们在由Protocol Labs组织的黑客务虚会IPFS Camp期间认识了IPFS社区。这是与该领域的专家会面并就我们的技术和哲学路线图中的问题和解决方案开玩笑的绝佳机会。

  我们还遇到了著名的Textile项目背后的团队,该项目提供了一组开源工具,这些工具可以促进通过IPFS开发分布式移动和桌面应用程序。他们主动组织了研讨会,深潜和集思广益会议。

  其中一届会议的主题是“移动IPFS”,因此,鉴于我们在这一主题上的丰富经验,我们热切希望参加。与核心开发人员@ Textile.io的Carson Farmer进行了富有成果的讨论之后,我们意识到在移动设备上使用IPFS时遇到了同样的问题:

  大多数蜂窝连接太不可靠,太慢,并且使NAT穿越技术无效。我们唯一能够可靠地工作的是libp2p的类似TURN的协议(中继)。

  在蜂窝网络和wifi网络之间进行切换时,所有连接都将关闭(QUIC传输除外)。

  移动设备上的计算资源(CPU,电池,网络)相对有限。与数百个对等方建立连接对智能手机(甚至是高端智能手机)产生巨大影响。

  智能手机操作系统对应用程序生命周期的持续时间不容置疑。在后台运行我们的应用几秒钟后,IPFS节点被终止。这意味着必须在应用程序返回到前台时重新启动它,并且节点重新连接到大量对等节点需要数十秒,这使应用程序的使用非常痛苦。

  看到在移动设备上使用IPFS的巨大潜力(但充分意识到其挑战),我们提出了与感兴趣的社区成员一起启动gomobile-ipfs项目的想法。


  第一个PoC

  从IPFS Camp回来后,我们得出结论,是时候放弃v1并开始使用gomobile-ipfs作为v2的基础了,同时让任何人都可以使用它了。

  开发更通用的工具的另一个好处是将我们的工作带到了社区,并从他们的贡献中受益。

  我们首先制作了一个简单的PoC,用于使用UI的React-Native和使用gomobile编译的go-ipfs节点来显示IPFS WebUI。

  达到这个里程碑(

  适用于Android的Java

  适用于iOS的Swift

  适用于iOS / Android的React-Native


  gomobile-ipfs的体系结构

  在我们这边的一些架构会议上以及与Textile团队的一些交流中,我们考虑了几种解决方案,用于在golang软件包和本机软件包之间绑定coreAPI函数:

  通过gomobile手动

  使用Protobuf和gRPC

  使用现有的HTTP API

  与其他两种解决方案相比,使用HTTP API的主要优势在于,它意味着初始实现所需的工作量更少,并且随着coreAPI的发展而维护现有功能。

  另一个优点是HTTP API的完整文档已经存在。在预先存在的代码中使用它的开发人员将能够更轻松地移植其应用程序。

  最后,我们制定了计划的细节:go-ipfs节点将在Unix域套接字上提供其HTTP API,本机软件包将通过shell软件包的RequestBuilder访问它。

  您可以找到有关此问题的完整交流。


  初始版本

  在Protocol Labs 的Steven Allen的帮助下,我们迅速实施了gomobile-ipfs的第一个版本,他详细审查了我们的代码并帮助我们解决了许多问题。

  然后,我们的仓库迅速移至IPFS船厂并进行了开源。它当前包含以下组件:

  一个golang部分,它公开了节点初始化的基本功能以及与RequestBuilder相关的功能

  两个Swift和Java软件包,它们有助于节点管理并从这些本地语言发送请求

  两个使用gomobile-ipfs的Android和iOS演示应用程序,它们仅通过IPFS下载随机的XKCD


gomobile-ipfs演示应用程序

  

  从那时起,我们还建立了一个发布不同的Maven包(安卓)的CocoaPods包(IOS)和演示应用的CI Bintray。

  您之中的好奇者已经可以在项目中开始使用它们了。该项目的Github Pages上提供了最少的文档。

  您还可以在此处找到一个视频,该视频总结了要了解的基本知识:IPFS Weekly Call-04/27。


  下一步

0706-1-4.png

  该项目尚需完善几个要点,其中一些已经在进行中。

  让我们看看我们的待办事项清单!

  通过iOS和Android API 实现节点的生命周期管理。即:根据应用程序的状态(前景,背景等)管理节点的状态

  通过而不是字节数组与节点进行交互成为可能。Gomobile默认情况下仅支持简单类型,但是能够使用Streams来操作和访问大文件(例如,读取节点的日志)将非常有用。

  增加了与另一个对等方建立直接连接并为给定的protocolID实现处理程序的可能性。归结为绑定SetStreamHandler(protocolID, handler)和NewStream(peerID, protocolID)功能。

  进一步优化移动节点。无疑,这一“步骤”将更加艰巨,并且将需要实施先进的性能测试系统。

  最后,我们正在开发驱动程序,以建立直接BLE和Wifi连接,这些连接将直接集成到gomobile-ipfs中。

0706-1-5.png


最新推荐