如何使用IPFS存储应用程序状态(作为dApp的后端)?

时间:2018-10-30 17:33:23

标签: ethereum ipfs decentralized-applications

我只是从IPFS和以太坊开始。我们正在构建dApp(移动设备),并计划用IPFS和以太坊替换标准的API和DB层。因此,经过大量阅读后,我有以下问题,

  1. 使dApp直接与IPFS对话(通过IPFS API)以存储数据(应用程序数据或文件)并获取数据。即,用IPFS完全替换API层似乎是可行的,但是这种方法有什么问题吗?我们可以完全不用API吗?

  2. 如果第1点可行,则直接访问文件数据,但如何访问应用程序。 IPFS中的数据(例如:建议的存储和检索结构是什么,如何存储不同的用户数据等)?

  3. 我知道添加到IPFS的数据是公开可用的,我们如何保护这些数据并将其仅提供给特定客户端使用?据我了解,IPFS中没有公钥/私钥机制?

  4. 当我们将视频存储在IPFS中时,要在客户端中流传输视频,是否需要使用CDN,我不确定如何在分散式解决方案中做到这一点。

  5. 当某些事件被触发或由客户端应用命令时,IPFS中是否有任何选项可以自动执行任务(例如,运行脚本)?

  6. 从节点查找和获取数据时,IPFS是否存在任何已知的性能问题?

  7. 对实现上述方法的可用工具和框架有何建议?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

使dApp(通过IPFS API)直接与IPFS对话以存储数据(app。   数据或文件)并提取数据。即,完全替换API层   使用IPFS似乎可行,但是这种方法有什么问题吗?   我们可以完全不用API吗?

取决于您要做什么。但是使用内容寻址存储,IPNS和ipfs pubsub,您可以编写所有不使用任何集中式服务的非常复杂应用程序的所有组件。

尤其是pubsub仍处于实验阶段。但是最新版本的IPFS 0.4.18包含了一个新的pubsub实现,该实现应具有更大的可伸缩性。

  

如果可能出现第1点,则直接访问文件数据   但如何访问该应用。 IPFS中的数据(例如:建议   存储和检索的结构,如何存储不同的用户数据   等)?

您只需在您控制的IPNS密钥下发布您的应用即可。假设我们在这里讨论的是javascript / typescript应用程序,则可以像平常一样打包它们,使用webpack之类的工具,然后将最终工件放入IPFS并使用IPNS进行发布。

  

我了解添加到IPFS的数据是公开可用的,如何   我们可以保护这些数据并将其仅提供给特定的   客户?据我了解,没有公钥/私钥机制   在IPFS中?

每个IPFS节点都有一个公用/专用密钥对。您可以使用它来加密节点消息或对节点消息进行签名。在IPNS中使用。每个节点上可以有多个密钥对。

  

当我们将视频存储在IPFS中时,要在客户端中流式传输视频,我们   需要使用CDN,但我不确定如何在分散式环境中使用CDN   解决方案。

IPFS基本上是 CDN。因此,您不必使用额外的CDN。您也可以使用Cloudflare IPFS gateway

目前正在进行使IPFS非常有效地分发超大文件(例如视频)的工作。已经有一些应用使用了此功能,例如D.Tube

  

IPFS中是否有可用选项来执行任务(例如:正在运行   脚本)在触发某些事件时或触发时自动   由客户端应用命令?

不。 IPFS / libp2p基本上是分布式Web的网络堆栈。如果要使用功能(例如由事件触发的脚本自动执行),则必须自己在IPFS pubsub上编写它,或者使用更高级的中间件,例如Orbit DB

  

查找和查找IPFS时是否存在任何已知的性能问题   从节点获取数据?

是的。 IPFS还很年轻。例如。从许多对等方分发大文件currently being worked on时出现问题。许多公司在生产中使用IPFS,但是您将生活在最前沿,并且偶尔会遇到问题。

  

关于可用于实现以下目标的工具和框架的任何建议   以上方法?

在不了解开发人员的总体目标和技能水平的情况下很难回答。如果要获得最佳性能,则必须直接使用IPFS或libp2p。首先,建立像OrbitDB之类的东西可能很有意义。

JS-IPFS也有很多示例。