区块链 | IPFS:IPFS 链接的类型

2024-05-04 08:36
文章标签 类型 区块 链接 ipfs

本文主要是介绍区块链 | IPFS:IPFS 链接的类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🦊原文:IPFS & Blockchain Networks
🦊写在前面:原文档还讲述了 NFT 相关的内容,但本博客仅关注 IPFS 链接的类型。



IPFS 链接的类型以及何时使用它们

IPFS 是一种为了使网络更加分布式、高效和持久而设计的协议和对等网络。在 IPFS 中,有几种不同的方式来引用数据,每种方式都各有其适用的场景。



1 CID (Content Identifier)

CID 用于唯一标识 IPFS 网络中的一个内容片段。CID 可以以紧凑的二进制形式在网络上存储和传输,但当它们显示给用户时,它们被表示为看似随机的字符串。例如:

bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

个人理解:CID 以二进制的形式存储,在供人们使用时转换为字符串形式,以增加可读性。

IPFS 使用两种版本的 CID 。上面的例子是 CIDv1 版本,相较于较老的 CIDv0 版本有一些优势,特别是在通过 IPFS 网关在网页上查看 IPFS 内容时。在标识 NFT 数据时,使用 base32 编码的 CIDv1 最为合适。

要在使用 IPFS 命令行时启用 CIDv1,请在运行 ipfs add 命令时添加 --cid-version=1 标志:

$ ipfs add --cid-version=1 ~/no-time-to-explain.jpeg
added bafkreigg4a4z7o5m5pwzcfyphodsbbdp5sdiu5bwibdw5wvq5t24qswula no-time-to-explain.jpeg

说明:在本文中,以 $ 开头的是命令,不以 $ 开头的是执行结果。

在 JavaScript 中,你可以为 ipfs.add 方法使用以下选项:

const cid = await ipfs.add({ content }, {cidVersion: 1,hashAlg: 'sha2-256'
})

其中,content 是数据内容,cidVersion 指定 CID 的版本,hashAlg 指定哈希函数的类型为 sha2-256,cid 用于存放生成的 CID 。

如果你已经有了一个 CIDv0 版本的 CID,同时又想获取新版本的 CID 格式,那么你不需要再次将其添加数据内容到 IPFS 中!你可以使用 ipfs 命令行工具,或者在 cid.ipfs.io 网页 上将 CIDv0 版本转换为 CIDv1 版本。如果你不知道自己拥有的是哪个版本的 CID,那么可以以这种方式来区分它们:CIDv0 的 CID 总是 46 个字符长,且以 Qm 开头。

NFT 相关:一旦你将数据添加到 IPFS 并获得了 CID,你就可以准备你的代币元数据,并在区块链上 “铸造” 代币了。为了从智能合约或 NFT 的元数据内部链接到你的数据内容,你应该将自己的 CIDv1 转换为 IPFS URI,具体方法如下。



2 IPFS URI

统一资源标识符(URI)用于在给定上下文中指定特定的内容。上下文由 URI 方案确定,URI 方案是指附加到 URI 前的字符串,后面跟着 :// 。IPFS 的 URI 方案就是简单的 ipfs

以下是一个完整 IPFS URI 的示例:

ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

IPFS URI 是 IPFS 链接的规范表示,因为 ipfs 方案清楚地表明 CID 指的是 IPFS 上的内容,而不是其他系统。要生成一个 IPFS URI,只需将静态字符串 ipfs:// 与 CID 字符串相结合。

你还可以在 IPFS URI 的路径组件中包含文件名。例如,如果您将您的代币元数据存储在 IPFS 上的一个目录中,您的 URI 可能如下所示:

ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json

个人理解:代币元数据是 metadata.json,存储在 baf...m 目录中。

我们建议你在智能合约中使用 IPFS URI 来链接任何通过 IPFS 存储的外部数据,这包括用于描述和提供代币背景信息的元数据。此外,你也可以在代币的元数据中使用 IPFS URI 来引用存储在 IPFS 上的图像和其他资源。



3 HTTP Gateway URL

内置了 IPFS 功能的用户代理,能够识别并使用原生 IPFS 协议来解析网关链接中的内容。

对于不支持原生 IPFS 解析的传统用户代理,它们将遵循链接到网关,由网关通过 IPFS 加载内容,并通过 HTTP 协议提供给用户。因此,HTTP 网关为自己无法解析 IPFS URI 的传统用户代理提供了互操作性。

如下是一个 HTTP 网关 URL 示例:

https://dweb.link/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi

虽然网关链接极大地促进了不同系统之间的互操作性,但它们不应当被视为指向 IPFS 上数据的首选或标准链接。IPFS URI 只要在 IPFS 网络中有人保存相应的数据,就会一直保持可用。相比之下,网关链接可能会因为网关服务器的离线而失效。

在使用网关链接的地方,开发者应确保网关遵循正确的 URL 约定。以下 URL 结构都是可以接受的:

https://<gateway-host>.tld/ipfs/<cid>/path/to/subresourcehttps://<cidv1b32>.ipfs.<gateway-host>.tld/path/to/subresource

在面向用户的应用程序中,开发人员应通过以下方式链接到 IPFS 内容:

  • IPFS URI(An IPFS URI)
  • HTTP 网关 URL(An HTTP gateway URL)

这将提供最佳的用户体验,直到更多浏览器支持 IPFS URI 方案的本机解析。请注意,这两种网关链接都可以根据需要轻松地从 CID 或 IPFS URI 生成。

个人理解:根据 CID 生成 IPFS URI 很容易,根据 IPFS URI 生成 HTTP 网关 URL 也很容易。



这篇关于区块链 | IPFS:IPFS 链接的类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958774

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla