LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 技术解码 | 如何跨平台使用IPFS Lite?

技术解码 | 如何跨平台使用IPFS Lite?

2019-11-21 IPFS原力区 来源:区块链网络

1574306368703569.jpg

本文由IPFS原力区收集译制,版权所属原作者

1574306369556277.jpg

摘要

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/1574306370144032.jpg

【IPFS原力区】

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

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

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

—-

编译者/作者:IPFS原力区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...