区块链 | IPFS:CID

本文详细介绍了CID(内容标识符),它是IPFS等分布式系统的核心标识符,包括其结构、自描述特性、版本发展(CIDv0和CIDv1)以及多码前缀和多基数前缀的应用。着重讲解了如何通过哈希算法确保内容的安全和唯一性,并展示了CID版本之间的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🦊原文:Anatomy of a CID
🦊写在前面:本文属于搬运博客,自己留存学习。



1 CID

在分布式网络中与其他节点交换数据时,我们依赖于内容寻址(而不是中心化网络的位置寻址)来安全地定位和识别数据。

CID 规范起源于 IPFS,现在以 Multiformats 形式存在,并支持包括 IPFS、IPLD、libp2p 和 Filecoin 在内的系统。尽管我们在教程中会分享一些 IPFS 的例子,但本教程实际上是关于 CID 自身的结构,它作为这些分布式信息系统的核心标识符,用于引用内容。

内容标识符(CID)是一种自描述的内容寻址标识符。

自描述是指,标识符能够自行表达其含义或者数据类型。例如 HTTP 中的 URL就是一个自描述的标识符,因为它包含了指向资源的信息(如文件路径),并且基于协议和结构,用户和系统可以理解其含义。

CID 不指示内容存储的位置,而是基于内容本身形成一种地址。CID 的长度取决于内容的哈希,而不是内容本身的大小。由于在 IPFS 中大多数内容都使用 sha2-256 进行哈希处理,因此大多数 CID 都具有相同的大小,即 256 位或称 32 字节。

例如,如果我们在 IPFS 网络中存储 土豚 的图像,它的 CID 将如下所示:

QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF

访问方式:https://ipfs.io/ipfs/QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF

创建 CID 的第一步是使用 加密算法 转换输入的数据。具体来说,是将任意大小的输入映射到固定大小的输出。如下图所示:

在这里插入图片描述
这种转换称为 加密哈希摘要(cryptographic hash digest)或简称为 哈希

个人理解:不管是文本、图片还是视频,它们在计算机中都是以二进制的形式进行存储的,即一个 01 字符串。而哈希函数要做的事,就是将不同文件不同长度的 01 字符串转换为固定长度的 01 字符串。

使用的 加密算法 必须生成具有以下特征的哈希:

  • 确定性:对于任何给定的输入数据,加密算法必须始终产生相同的输出哈希,确保一致性。
  • 抗碰撞性:即使输入数据发生微小变化,也应导致完全不同的哈希值,以保证数据的唯一性。
  • 不可逆性:从哈希值应当无法反推出原始数据,确保数据的隐私和安全。
  • 唯一标识:每份文件都应该有一个独特的哈希值,确保数据的不可篡改性和可追溯性。

当我们使用内容地址去获取数据时,我们可以保证看到数据的预期版本。这与中心化网络上的位置寻址有很大的不同,在中心化网络中,给定地址(URL)处的内容可能会随时间变化。

说明:在去中心化网络

### 如何利用区块链IPFS实现商品或信息的溯源 #### 方案概述 为了实现商品或信息的有效溯源,可以采用区块链与星际文件系统(InterPlanetary File System, IPFS)相结合的方式。这种方式不仅能够提供高效的数据存储解决方案,还能确保数据的安全性和不可篡改性。 #### 技术原理说明 区块链作为一种分布式账本技术,具备去中心化、不可篡改及可追溯的核心特性[^4]。而IPFS是一个点对点的超媒体协议,旨在补充甚至取代目前统治互联网的超文本传输协议(HTTP)[^3]。当两者结合时: - **IPFS负责存储实际的商品或信息内容**:由于IPFS采用了内容寻址机制,因此每一个上传至IPFS网络的内容都会获得独一无二的哈希值作为地址标识符; - **区块链记录这些唯一哈希值及其元数据**:每当有一个新的版本或者更新发生时,相应的变更会被打包成区块并追加到链上; 这样做的好处在于既保持了原始资料的真实存在证明,又实现了历史版本的永久保存和随时验证的可能性。 #### 实现步骤详解 以下是具体的技术实现流程: 1. 将待溯源的信息或文档上传至IPFS网络中,得到该资源对应的CID(Content Identifier),即唯一的哈希指针。 2. 创建一个新的交易请求,其中包含上述CID以及其他必要的描述性字段(如时间戳、地理位置等),并将此条目提交给基于区块链的应用程序接口(API)。 3. 应用程序接收到新交易后对其进行合法性校验,并将其广播给全网其他节点参与者的共识过程。 4. 经过一轮或多轮投票确认无误之后,这条带有CID的新纪录正式加入到了公共账簿之中。 5. 用户查询某件特定物品的历史记录时,只需输入其关联的身份编号或者其他识别码即可检索出对应的所有相关联事件日志列表。 ```python import ipfshttpclient from web3 import Web3 # 连接到本地运行的IPFS节点 ipfs_client = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001') def add_file_to_ipfs(file_path): result = ipfs_client.add(file_path) return result['Hash'] web3_provider = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID')) contract_address = 'YOUR_CONTRACT_ADDRESS' abi_definition = [...] # ABI定义应由智能合约编译器生成 contract_instance = web3_provider.eth.contract(address=contract_address, abi=abi_definition) def log_event(cid, metadata): tx_hash = contract_instance.functions.logEvent(cid, metadata).transact() receipt = web3_provider.eth.waitForTransactionReceipt(tx_hash) print(f'Transaction successful with hash: {receipt.transactionHash.hex()}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值