本文由IPFS原力区收集译制,版权所属原作者 摘要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原力区】 价值观:价值?共建?共享?荣耀 总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS?的商业生态建设和社区发展。 每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS?爱好者,通过持续输出全面、精细、优质的IPFS咨询和技术支持,将生态中的爱好者转化为IPFS支持者和参与者,共建IPFS生态的健康发展。 —- 编译者/作者:IPFS原力区 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
技术解码 | 如何跨平台使用IPFS Lite?
2019-11-21 IPFS原力区 来源:区块链网络
- 上一篇:如何选择靠谱的矿场
- 下一篇:现在是低吸的好时候吗?十大主流币最全分析
LOADING...
相关阅读:
- MΛNTRΛDΛO受邀参加金色财经区块链周郑州峰会掀开中原地区区块链产业2020-08-02
- 如果不向勒索者支付比特币,日本市政厅将受到炸弹威胁。2020-08-02
- Pax Treasury在以太坊网络上销毁超过777万枚BUSD2020-08-02
- ETH 2.0的每个新阶段都会对以太坊产生积极影响2020-08-02
- 如何参与Defi奖励网络BDAO?目前Staking分红每日1%~2%2020-08-02