Skip to main content
 首页 » IPFS

ipfs超时

2021年07月10日17

「官方博客」js-ipfs 0.41.0 更新

我们已经完成了js-ipfs内部组件HU的巨大重构。我们已经转而使用 Promises 和基于回调的异步/等待,并使用异步可迭代对象代替 Node.js Streams 和 Pull Streams。其实不仅仅是js-ipfs里面,而是整个stack,包括libp2p、IPLD和multi-format,可以称之为完全重写。

请注意 - 此版本对核心 API 进行了重大更改,请参阅下面的“API 更改”部分了解所有信息。

这是一段漫长而激动人心的旅程,但这次重构为消费者、贡献者和核心开发人员带来了许多令人难以置信的眼前和未来的好处,这让所有的工作和努力都变得值得。

总结一下,我们有: 默认切换到流式 API 以减少内存压力。通过删除缓冲区,Node.js 和 Pull Stream API 减少了 API 表面积,减少了代码库中的代码量和我们依赖的依赖项的数量(对于更小的浏览器包和更快的安装时间)切换到使用异步迭代对象来流式传输数据以帮助使流式传输更易于访问切换到使用 async/await 这样我们将获得更好的错误堆栈跟踪并提高可读性和可维护性。在 JavaScript 中使用 async/await 在生态系统中得到了广泛关注,并且正在迅速成为编写惯用 JS 的实际方式。我们希望 js-ipfs 能够与时俱进,通过使用现代 JS 功能、技术和实践,继续为贡献者提供帮助。做出这些改变的主要思想是让代码比以往更容易贡献,更容易理解,更容易维护,更快更小。

这个变化是如此之大和如此重要,我们写了整篇博文来解释变化背后的动机!我们对这次重构有一些统计数据: 从 package.json 中删除了 27 个直接依赖项 我们在浏览器包中减少了 214 个模块 ● 轻量级 155 kB 浏览器包减少了 18%! ● 更轻的124 kB ipfs-http-client 浏览器包减少了60%! ● 净删约2600行代码 删除ipfs-http-client(net)约360行代码CI 运行时间缩短了大约 10 分钟……而且这些统计数据很多只适用于 js-ipfs 和 js-ipfs-http-client!对于 IPFS、libp2p、IPLD 和多格式之间的 60-70 依赖关系,我们看到了类似的变化。

UnixFS v1.5 证明包管理器保留文件元数据非常重要,尤其是最后修改时间(mtime)。文件 mtime 允许他们有选择地仅同步更改的数据。到目前为止,如果要在 IPFS 上托管大型数据集(例如包管理器的存储库),将很难更新。

最酷的是它完全向后兼容。只有当您选择添加元数据时,给定文件/目录的 CID 才会更改,否则 CID 将保持不变。

进行了一系列更改,为 CLI、HTTP 和输入和输出的核心 API 添加了元数据功能。还有两个新的 MFS 命令 touch 和 chmod,它们允许您随时更改元数据。有关所有新 UnixFS v1.5 内容的详细信息,请参阅下面的“API 更改”部分。

API 更改 核心 API 此版本中有主要的核心 API 更改。请参阅迁移指南。

●IPFS不是可以实例化的类——请使用IPFS.create。 IPFS 节点实例不是事件发送器。

● 如果设置为false,则传递给IPFS.create 的init 选项现在将不执行任何初始化步骤。如果存储库已经存在,它将被初始化。这已不再是这种情况。如果要初始化节点,但仅在存储库可用时,将 init:{allowNew:false} 传递给构造函数。

●instance.ready 属性已被删除。请改用 IPFS.create。

IPFS.createNode 已被删除,请改用 IPFS.create。

现在, add 接受输入上的 mode 和 mtime 选项,以允许为添加的文件设置 mode 和 mtime 元数据。有关更多信息,请参阅核心接口文档。

现在,加法结果包含一个 cid 属性(一个 CID 实例)而不是字符串哈希属性。

添加的结果现在包括 mode 和 mtime 属性(如果设置)。

addReadableStream、addPullStream 已被删除。请参阅迁移指南以获取更多信息。

addFromStream 已被删除。请改用添加。

addFromFs 已被删除。请使用导出的 globSource 实用程序并将结果传递给 add。有关更多详细信息和示例,请参阅 glob 源文档。

addFromURL 已被删除。请使用导出的 urlSource 实用程序并将结果传递给添加。有关更多详细信息和示例,请参阅 URL 源文档。

bitswap.stat结果已经改变——需求和值的列表现在是CID实例的数组,而peer现在是peer ID []的字符串。

bitswap.wantlist 现在返回一个 CID 实例数组。现在,block.rm 返回一个异步迭代。

现在,block.rm 生成 {{cid:CID,error:Error} 对象。

现在,block.stat 结果包含一个 cid 属性(它的值是一个 CID 实例)而不是一个键属性。

dht.findProvs、dht.provide、dht.put 和 dht.query 现在都返回异步迭代。

dht.findPeer、dht.findProvs、dht.provide、dht.put 和 dht.query 现在生成/返回一个对象 {id:string,addrs:Multiaddr[]} 而不是 PeerInfo 实例。

已添加 files.chmod。有关信息,请参阅核心接口文档。

files.flush 现在返回刷新路径的根 CID(默认为 /) files.lsPullStream 和 files.lsReadableStream 已被删除。请参阅迁移指南以获取更多信息。

现在,files.ls 返回一个异步迭代。

现在,files.ls 结果包含 cid 属性(其值为 CID 实例)而不是哈希属性。

files.ls 结果现在包括 mode 和 mtime 属性(如果设置)。有关更多信息,请参阅核心接口文档。

files.ls 不再需要很长的选项(在内核中)-默认情况下您将收到所有数据。

files.mkdir 现在接受 mode 和 mtime 选项以允许设置 mode 和 mtime 元数据。有关更多信息,请参阅核心接口文档。

files.readPullStream 和 files.readReadableStream 已被删除。请参阅迁移指南以获取更多信息。

files.read 现在返回异步迭代。

现在,files.stat 结果包含一个 cid 属性(它的值是一个 CID 实例)而不是一个哈希属性。

files.stat 结果现在包括 mode 和 mtime 属性(如果设置)。有关更多信息,请参阅核心接口文档。

已添加 files.touch。有关信息,请参阅核心接口文档。

files.write 现在接受 mode 和 mtime 选项以允许设置 mode 和 mtime 元数据。有关更多信息,请参阅核心接口文档。

get 现在返回一个异步可迭代对象。从迭代器生成的对象的内容属性值现在是一个异步可迭代对象,它生成一个 BufferList 对象。

ls 现在返回异步可迭代对象。

ls 结果现在包含 cid 属性(其值为 CID 实例)而不是哈希属性。

ls 结果现在包括 mode 和 mtime 属性(如果设置)。有关更多信息,请参阅核心接口文档。

pin.add 结果现在包含 cid 属性(CID 实例)而不是字符串哈希属性。

pin.add 现在接受超时选项。如果在超时窗口内没有接收到数据,此方法将导致 TimeoutError 被引发。它可以作为数字或字符串传递。如果传递了数字,则将其解释为毫秒;如果传递了字符串,则将其解释为人类可读的持续时间。

pin.ls 现在返回异步迭代。pin.ls 结果现在包含 cid 属性(CID 实例)而不是字符串哈希属性。

pin.rm 结果现在包含 cid 属性(CID 实例)而不是字符串哈希属性。

ping 现在返回异步可迭代对象。

refs 和 refs.local 现在返回异步迭代。

裁判现在接受暂停选项。如果在超时窗口内没有接收到数据,此方法将导致 TimeoutError 被引发。它可以作为数字或字符串传递。如果传递了数字,则将其解释为毫秒;如果传递了字符串,则将其解释为人类可读的持续时间。

repo.gc 现在返回异步迭代。

stats.bw 现在返回异步迭代。

swarm.peers 现在返回一个对象数组,其对等属性是字符串而不是 PeerId 的实例。

swarm.addrs 现在返回一个对象数组 {id:string,addrs:Multiaddr[]} 而不是 PeerInfo 实例。

HTTP API/api/v0/add 现在支持以下额外的多部分标头,以允许在单个文件上设置模式和 mtime 元数据:模式文件模式应用于创建的 UnixFS 条目 [string] mtime 修改时间(以秒为单位) , 从 Unix epoch 开始或之后到创建 UnixFS 条目的时间 [number]mtime-nsecs 以纳秒为单位的修改时间分数 [number]/api/v0/add 现在将返回文件 Mode、Mtime 和 MtimeNsecs(如果放 )。

/api/v0/file/ls 已被删除,请改用 /api/v0/ls。

新增/api/v0/files/chmod,支持如下查询字符串args: Apply the mode to the arg path of the file of [string] mode file mode to apply [string]/api/v0/files/ls现在将返回文件 Mode、Mtime 和 MtimeNsecs(如果设置)。/api/v0/files/mkdir 现在支持以下附加查询字符串参数: mode file mode to apply [string]mtime 修改时间(基于 Unix 纪元),以秒为单位。

/api/v0/files/stat 现在将返回文件模式、Mtime 和 MtimeNsecs(如果设置)。

新增/api/v0/files/touch,支持以下查询字符串args: arg path mtime 模式应用于[string]的文件的修改时间(基于Unix epoch),单位为秒。

/api/v0/files/write 现在支持以下附加的多部分标题:应用于创建的 UnixFS 条目的模式文件模式 [Number]/api/v0/ls 现在返回文件模式、Mtime 和 MtimeNsecs(如果设置)。

命令行界面 si jsipfs add [file...] 现在支持以下标志以尊重和应用从文件系统添加或显式设置的文件的模式和 mtime 元数据:--preserve-mode 自动将权限应用于从属文件系统 UnixFS 条目创建 [boolean] [默认值:false]--preserve-mtime 自动将修改时间应用于从文件系统创建的 UnixFS 条目 [Boolean] [默认值:No]--mode 文件模式适用于创建的 UnixFS 条目 [string] ]--mtime 要应用于创建的 UnixFS 条目的 Unix 纪元之前或之后的 Unix 纪元之前或之后的时间(以秒为单位)。要删除,请改用 jsipfs ls。

已添加 Jsipfs 文件 chmod [mode] [path]。

jsipfs 文件 ls 现在可以打印文件模式和 mtime。jsipfs 文件 mkdir 现在支持以下标志: --mode 文件模式适用于创建的 UnixFS 条目 [字符串] --mtime 修改应用于创建的 UnixFS 条目 jsipfs 文件的 Unix 纪元之前或之后的时间(以秒为单位) stat 现在显示文件模式和 mtime。

si 添加了 jsipfs 文件 touch [path],并支持以下标志: --mtime 修改 Unix epoch 前后的时间(以秒为单位)应用于创建的 UnixFS 条目 write jsipfs 文件写入现在支持以下标志: --mode 文件模式应用于创建的 UnixFS 条目 [字符串] --mtime 修改应用于创建的 UnixFS 条目的 Unix 纪元之前或之后的时间(以秒为单位)。 jsipfs ls 现在可以打印文件模式和 mtime。

想贡献?

报告/反馈

黑犇科技向官方贡献PoS优化代码,免测试直接写入源码

Filecoin 如何验证数据?要验证 Filecoin 网络上的数据存储,需要证明两件事。

证明正确的数据集存储在矿工提供的存储空间中;证明数据集在系统规定的时间内连续存储。

复制证明 (PoRep) 从密封开始。

矿工将部分可用存储空间称为扇区,用于存储客户数据。填充扇区后,密封它。密封是将扇区逐渐转换为原始数据的唯一副本的操作。该副本与 Filecoin 矿工的公钥相关联。为了执行最终的 PoRep,矿工将副本的加密哈希提交到公共 Filecoin 区块链。

通过 PoRep,矿工可以证明他们正在存储客户数据的唯一代码。只有拥有所有原始数据的矿工才能向 Filecoin 区块链提交正确的 CommR(对副本的链上承诺)。

时间和空间证明 (PoSt) 可以验证扇区是否随时间连续存储。

通过PoSt随机选择一个存储扇区,矿工需要为此扇区提供PoRep。这是通过程序完成的。向矿工发出密码挑战。只有直接咨询密封部门才能正确回答问题。矿工必须在规定时间内完成挑战。

每个矿工每天都必须证明他们的存储量,为了赢得区块,矿工也被随机选择来证明存储量。密封的计算难度保证了矿工必须随时访问密封区域并保持其完整性。

PoRep 和 PoSt 共同构成了 Filecoin 独特的证明系统,它是存储证明和空间证明的结合。

除了证明系统,Filecoin 网络还依靠博弈论的激励机制来防止恶意或疏忽行为。所有同意在 Filecoin 网络上存储数据的矿工必须在签署协议时以 Filecoin 代币的形式提供抵押品。

任何没有通过 PoSt 检查的存储矿工都会受到惩罚,一旦受到惩罚,部分抵押品就会丢失。

过度惩罚后所有抵押品将丢失,然后矿工将无法再次为客户提供存储。

PoSt 代码优化 Filecoin 系统将每天分为 48 个窗口期,矿工需要每半小时完成一次 WindowPoSt。一旦矿工出现区块同步不稳定、扇区计算时间不稳定、报文上传不稳定等情况,可能无法按时完成WindowPoSt,从而导致算力惩罚和抵押品被扣。

黑本科技技术团队提交的优化代码,可以大大减少官方时空证明的计算时间。

经过测试,使用优化后的代码可以将WindowPoSt计算时间减少到10分钟以内。

官方成员对海本科技表示赞赏,感谢海本科技做出的贡献,尤其是这种优化后的代码,通俗易懂,效果显着。

Filecoin生态建设抵押品不足,FIL流通率低,GAS费用高。这一系列的问题,在官网的运行中或多或少的出现至今。不过,海本科技并没有退缩。凭借雄厚的技术实力,主动解决问题,为Filecoin生态建设贡献力量!同时,黑本科技也建议部分厂商,IPFS产业刚刚起步,更应该遵守社会秩序,面对投资者时更应该遵守原则,共同维护IPFS&Filecoin的良好生态。海本科技与Filecoin从未停止发展,期待Filecoin更美好的明天!报告/反馈

强强联合,微软运用IPFS构建去中心化身份系统

近日,微软发布了去中心化身份验证系统ION的Beta版,该系统运行在比特币区块链上,并将交易数据存储在IPFS上。

据项目负责人丹尼尔·布赫纳(Daniel Buchner)介绍,ION 的总体愿景是为用户提供一个去中心化的标识符(DID),可以替代用户名的需求,大大提高互联网用户身份安全的在线保护。能力。

身份是我们所有人每天(甚至每时每刻)在 Internet 上相互交流的关键部分。有时当我们执行“忘记密码?”时,我们会在每一个生气的时刻再试一次。无论如何,为用户控制的在线身份建立一条前进的道路是 dweb 成功的必然要求。

但是,身份很难确定。对于可互操作的去中心化自我数据声明,没有简单的解决方案。必须考虑隐私、安全、有效性、访问控制、监控、GDPR、KYC 和匿名性。就像《盗梦空间》,但每一个嵌套的梦境都是同一个雷区,雷区里堆满了杂乱的堆放物,除了贴着笔记本慢慢盖住的贴纸,什么都没有。在下面。

多年来,去中心化身份基金会一直在应对这一挑战,像 Rebooting the Web of Trust 这样的组织也是如此。还有IP-ID、Nomios.io、IPFS IDM,以及最近的Ceramic Network,都在努力在IPFS上构建去中心化的身份系统。

今天我们将庆祝去中心化身份协议和服务的诞生,但它是由一个意想不到的组织推出的:微软。

过去几年,微软在开源工具和服务方面的地位越来越高,现在推出了基于标准的去中心化身份服务,名为ION。

ION已经开发了一年多。它是 Sidetree(一种与区块链无关的分布式 PKI 协议)的示例实现。它可以在比特币区块链上运行,并将交易数据存储在 IPFS 上。

与 HTTP 一样,IPFS 没有在协议中内置用户身份。但是,IPFS 提供了 HTTP 无法实现的灵活性、验证和未来校对功能:IPFS 的内容可寻址性意味着从区块链或其他底层公共网络中找到 CID 的 ION 节点不需要关心交易数据所在的位置。这意味着他们可以切换服务器或数据中心,或者新的存储节点可以在线,而无需任何代码或基础设施更改,或地址更改。

ION 节点也不必担心数据操纵或篡改,因为基于哈希的寻址意味着数据的密码验证内置于网络请求本身。

ION 中的 IPFSION 是使用 JavaScript(尤其是 TypeScript)实现的,因此使用 js-ipfs 作为 Node.js 服务是有意义的。 ION聚合一批身份识别交易,通过其IPFS节点发布,然后将这批交易的地址(CID)写入比特币区块链。

为了满足微软使用js-ipfs作为一个长时间运行的进程的需求,我们在所有API中添加了可取消的请求,以确保在堆栈上下创建的底层对象、内存、文件语句和其他资源被正确清理在提出和处理请求时。 .非常感谢 Alex Potsides (@achingbrain) 实现了这个长期需要的功能,该功能已在 js-ipfs 0.44.0 中提供。

对于开发人员来说,这看起来像是一个可以根据请求设置超时的函数:立即尝试 ION。这是 ION 的公开测试版,现在在比特币区块链上实时运行。

项目开源,基于开放标准,可以运行自己的节点,欢迎试用或贡献项目!报告/反馈

微信
登录
用户名
密码
注册
用户名
密码
确认密码
昵称
邮箱
QQ
找回密码
用户名
邮箱
※ 重置链接将发送到邮箱