引谈 | 如何跨平台使用IPFS Lite?

IPFS Lite是一个用来创建新数据和获取现有数据的库,想在不同平台上尝试它么→

引谈 | 如何跨平台使用IPFS Lite? IPFS 第1张
本文由IPFS原力区收集译制,版权所属原作者
 
引谈 | 如何跨平台使用IPFS Lite? IPFS 第2张
 
摘要
IPFS Lite是一个仅提供与IPFS网络交互的基本功能的库:创建新数据和获取现有数据。   对于希望直接在其代码、应用程序中嵌入IPFS功能的应用程序来说,IPFS Lite是一个不错的选择。   Textile越来越依赖IPFS Lite,因此我们希望提供一些新的IPFS Lite库,以在Textile运行的所有平台(JavaScript,Android和iOS)上启用相同的API。   我们将继续开发并围绕这些库来构建,但也希望尽早开放它们,以便其他人可以尝试,并提供反馈,帮助我们使它们变得更好,更快,更轻巧。
 
Textile,我们已经在移动端和浏览器端的基础设置中研究IPFS有一段时间了…并且我们与许多开发人员进行了合作,试图优化人们如何在IPFS和Textile之上构建。我们一次又一次注意到的一件事——99%的时间里,在IPFS上构建的开发人员希望通过最少的设置或工作从网络添加和获取文件。他们希望IPFS像一个简单的本地数据库。大多数情况下,浏览器或移动DApp仅需要能够通过IPFS网络,添加和获取少量的数据。即,输入IPFS Lite。
 
IPFS Lite从Go库开始,为基于IPLD的应用程序能与IPFS网络进行交互提供了最低限度的功能。就如同HéctorSanjuán,SamuliPöyhtäri和Pedro Teixeira的论文以及IPFS Cluster项目中所描述的一样,它是基于Merkle-CRDT的分布式数据库的核心组件。该API很简单,也易于在其他应用中使用/嵌入(默认情况下只有少数方法)。我们发现自己越来越多地寻求IPFS Lite,并决定让更多的开发人员可以使用它。
 
今天,我们发布了一组新的IPFS Lite库。现在,你可以在浏览器,Android,iOS或桌面上(通过原始的Go库)尝试IPFS Lite 。我们从简单开始,希望以此跨平台版本来评估兴趣并早日获得反馈。我们的目标是当“完全加载”可以支持大多数默认的IPFS核心API时,能提供一种可高度扩展的IPFS实现,。如果你对应包括和不应该包括的内容有任何意见,请让我们知道或发送PR!
 
  • 浏览器/ Nodejshttps://github.com/textileio/js-ipfs-lite
  • Androidhttps://github.com/textileio/android-ipfs-lite
  • iOShttps://github.com/textileio/ios-ipfs-lite
  • gRPChttps://github.com/textileio/grpc-ipfs-lite/
 
库在行动
 
为了让了解如何在自己的应用中使用这些新库,下面每个库的汇总同时还附带一些简单的跨平台示例。你可以通过这些了解API。
 
Javascript
 
Js-IPFS-lite以原始Go实现的直接端口开始完全用Typescript来书写。它后续已经发展到某种程度,但是动作域上仍然非常相似。默认情况下,一个lite Peer要求开发人员提供一个数据来存储本地IPLD块(这可以是用于临时对等体的内存,可以是基于leveldb的持久性存储等等),以及一个Libp2p主机/客户端。实际上,该库提供了许多帮助功能(例如setupLibP2PHost),初始化数据库,以及使Libp2p主机变得更加容易,其默认值适用于Nodejs或浏览器(基于js-ipfs的默认值)。
 
这个库的大小已经不到js-ipfs的一半,而且大多数核心API都没有公开……其中很多都是在后台提供的。我们将迅速努力进一步减小尺寸(我们尚未应用许多优化措施),也会将更多这些核心API公开,作为单独可插入模块。同时,我们已经发现减少加载时间可带来更出色的浏览器体验。如果热衷于贡献但不精通Typescript,没什么大不了的话,只要提交PR,我们将为提供帮助!
 
构建

let { Peer, BlockStore, setupLibP2PHost } = require(‘@textile/ipfs-lite’)

// Use any interface-datastore compliant store

let { MemoryDatastore } = require(‘interface-datastore’)

 

let store = new BlockStore(new MemoryDatastore())

let host = await setupLibP2PHost() // Accepts all libp2p config options

let lite = new Peer(store, host)

新增文件

// Simple Nodejs example using async/await

let fs = require(‘fs’)

 

let source = [{

path: ‘secret_plans’,

content: fs.createReadStream(‘secret_plans.txt’)

}]

let cid = await lite.addFile(source)

获取节点
也可以获取文件或浏览网络上的IPLD节点。在这里,我们可以探索Project Apollo Archives:

// Mostly end-to-end browser example using Promises…

let CID = require(‘cids’)

let cid = new CID(‘QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D’)

setupLibP2PHost().then(host => {

let litePeer = new Peer(store, host)

litePeer.start().then(() => {

litePeer.get(cid).then(block => {

block.Links.forEach(link => {

console.log(link.Name + ‘: ‘ + link.Hash.toString())

})

})

})

})

输出

README.txt: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9

_Metadata.json: QmWXShtJXt6Mw3FH7hVCQvR56xPcaEtSj4YFSGjp2QxA4v

albums: QmUh6QSTxDKX5qoNU1GoogbhTveQQV9JMeQjfFVchAtd5Q

apolloarchivr.py: QmU7gJi6Bz3jrvbuVfB7zzXStLJrTHf6vWh8ZqkCsTGoRC

build_frontend_index.py: QmRSxRRu9AoJ23bxb2pFeoAUFXMAdki7RZu2T7e6zHRdu6

frontend: QmeQtZfwuq6aWRarY9P3L9MWhZ6QTonDe9ahWECGBZjyEJ

Android
 
对于android-ipfs-lite,它几乎是相同的API,有从IPFS添加和检索文件的简单方法。当前的实现不需要开发人员提供自己的数据库,而是使用简单的嵌入式数据来管理一个应用的数据和节点。
 
新增文件

// Synchronous

File file = openFile(“secret_plans”);

byte[] bytes = Files.readAllBytes(file.toPath());

String cid = litePeer.addFileSync(bytes);

 

// Asynchronous

litePeer.addFile(bytes, resultHandler);

获取节点

String cid = “QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D“;

litePeer.getNode(

cid,

new Peer.ResolveNodeHandler() {

public void onNext(Node node) {

List<Link> links = node.getLinksList();

for (int i = 0; i < links.size(); i++) {

String name = links.get(i).getName();

String address = links.get(i).getCid();

logger.log(Level.INFO, name + “: “ + address);

}

}

}

);

输出

README.txt: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9

_Metadata.json: QmWXShtJXt6Mw3FH7hVCQvR56xPcaEtSj4YFSGjp2QxA4v

albums: QmUh6QSTxDKX5qoNU1GoogbhTveQQV9JMeQjfFVchAtd5Q

apolloarchivr.py: QmU7gJi6Bz3jrvbuVfB7zzXStLJrTHf6vWh8ZqkCsTGoRC

build_frontend_index.py: QmRSxRRu9AoJ23bxb2pFeoAUFXMAdki7RZu2T7e6zHRdu6

frontend: QmeQtZfwuq6aWRarY9P3L9MWhZ6QTonDe9ahWECGBZjyEJ

iOS
 
iOS的实现类似于Android。你可以在IPFS上添加和获取文件,也可以从网络查询节点。还有一些遗留的工作需要去做,以允许将节点添加到网络并确保所有API在适用的情况下都使用有效的数据流和异步APIs。
 
新增文件

NSString *path = [[NSBundle mainBundle] pathForResource:@”test” ofType:@”jpeg”];

NSInputStream *input = [[NSInputStream alloc] initWithFileAtPath:path];

[IpfsLiteApi.instance addFileWithParams:[[AddParams alloc] init] input:input completion:^(Node *node, NSError *error) {

if (error) {

// handle the error

} else {

// node represents the file now that it’s been addded to IPFS

}

}];

获取节点

[IpfsLiteApi.instance getNodeForCid:@”QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D” completion:^(Node *node, NSError *error) {

for (Link *link in node.linksArray) {

NSLog(@”%@ : %@”, link.name, link.cid);

}

}];

输出

README.txt : QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9

_Metadata.json : QmWXShtJXt6Mw3FH7hVCQvR56xPcaEtSj4YFSGjp2QxA4v

albums : QmUh6QSTxDKX5qoNU1GoogbhTveQQV9JMeQjfFVchAtd5Q

apolloarchivr.py : QmU7gJi6Bz3jrvbuVfB7zzXStLJrTHf6vWh8ZqkCsTGoRC

build_frontend_index.py : QmRSxRRu9AoJ23bxb2pFeoAUFXMAdki7RZu2T7e6zHRdu6

frontend : QmeQtZfwuq6aWRarY9P3L9MWhZ6QTonDe9ahWECGBZjyEJ

 
—END—
本文由IPFS原力区编译,原文链接:
https://blog.textile.io/javascript-ios-android-grpc-ipfs-lite/
引谈 | 如何跨平台使用IPFS Lite? IPFS 第3张

IPFS原力区】

价值观:价值 共建 共享 荣耀

总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。

每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的IPFS咨询和技术支持,将生态中的爱好者转化为IPFS支持者和参与者,共建IPFS生态的健康发展。

引谈 | 如何跨平台使用IPFS Lite? IPFS 第4张

原创文章,作者:IPFSforce,如若转载,请注明出处:https://ipfser.org/2019/11/21/kuapingtaishiyongipfslite/

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:ipfsforce@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code