如何在 IPFS 中重新创建多重哈希的哈希摘要

2023-11-21

假设我像这样向 IPFS 添加数据:

$ echo Hello World | ipfs add

这会给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u- CID,它是 Base58 编码的多重哈希。

将其转换为 Base16,告诉我 IPFS 添加的哈希摘要是 SHA2-256 哈希:

12 - 20 - 74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca
<hash-type> - <hash-length> - <hash-digest>

我知道 IPFS 不仅对数据进行哈希处理,而且实际上首先将其序列化为 Unixfs protobuf,然后将其放入 dag 中。

我想揭开神秘面纱,如何到达74410577111096cd817a3faed78630f2245636beded412d3b212a2e09ba593ca但我不太确定如何获取保存 Unixfs protobuf 和数据的创建的 dag。

例如,我可以将序列化的原始数据写入磁盘并使用 protobuf 解码器检查它:

$ ipfs block get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u > /tmp/block.raw
$ protoc --decode_raw < /tmp/block.raw

这将为我提供可读格式的序列化数据:

1 {
  1: 2
  2: "Hello World\n"
  3: 12
}

然而,通过 SHA-256 进行管道传输仍然会给我一个不同的哈希值,这是有道理的,因为 IPFS 将 protobuf 放入 dag 中并对其进行多重哈希处理。

$ protoc --decode_raw < /tmp/block.raw | shasum -a 256

所以我决定弄清楚如何获取该 dag 节点,自己对其进行哈希处理以获得我正在寻找的哈希值。

我希望使用ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u会给我一个可以解码的多重哈希,但事实证明它返回了一些我不知道如何检查的其他数据哈希:

$ ipfs dag get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
$ {"data":"CAISDEhlbGxvIFdvcmxkChgM","links":[]}

关于如何解码的任何想法data从这里?

UPDATE

data是原始数据的 Base64 表示:https://github.com/ipfs/go-ipfs/issues/4115


您正在寻找的哈希是输出的哈希ipfs block get QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u。 IPFS 对编码值进行哈希处理。

而不是运行:

protoc --decode_raw < /tmp/block.raw | shasum -a 256

赶紧跑:

shasum -a 256 < /tmp/block.raw

但事实证明它返回了一些我不知道如何检查的其他数据哈希

这是因为我们目前在 protobuf 内部使用 protobuf。外部 protobuf 具有以下结构{Data: DATA, Links: [{Name: ..., Size: ..., Hash: ...}]}.

In:

1 {
  1: 2
  2: "Hello World\n"
  3: 12
}

The 1 { ... }部分是Data外部 protobuf 的字段。然而,protoc --decode_raw *recursively* decodes this object so it decodes the数据`字段:

  • 字段 1(数据类型):2(文件)
  • 字段 2(数据):“Hello World\n”
  • 字段 3(文件大小):12(字节)

对于上下文,相关的 protobuf 定义是:

Outer:

// An IPFS MerkleDAG Link
message PBLink {

  // multihash of the target object
  optional bytes Hash = 1;

  // utf string name. should be unique per object
  optional string Name = 2;

  // cumulative size of target object
  optional uint64 Tsize = 3;
}

// An IPFS MerkleDAG Node
message PBNode {

  // refs to other objects
  repeated PBLink Links = 2;

  // opaque user data
  optional bytes Data = 1;
}

Inner:

message Data {
    enum DataType {
        Raw = 0;
        Directory = 1;
        File = 2;
        Metadata = 3;
        Symlink = 4;
        HAMTShard = 5;
    }

    required DataType Type = 1;
    optional bytes Data = 2;
    optional uint64 filesize = 3;
    repeated uint64 blocksizes = 4;

    optional uint64 hashType = 5;
    optional uint64 fanout = 6;
}

message Metadata {
    optional string MimeType = 1;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 IPFS 中重新创建多重哈希的哈希摘要 的相关文章

  • Ubuntu下源码安装IPFS环境

    一 安装配置Go环境 IPFS是基于GO语言的项目 xff0c 环境要求go version 1 12 43 安装过程及环境变量配置参考 xff1a https blog csdn net weixin 42310458 article d
  • 星际无限CTO张超:IPFS分布式存储将成为新一代存储方式

    8月9日 IPFS分布式存储技术圆桌峰会在昆明盛大启幕 本次峰会汇集了包括大数据 分布式存储 人工智能 云计算 数字资产管理等各路行业大咖 论坛启智慧 共享创价值为目的 得到今日头条 腾讯新闻 火星财经 金色财经 春城晚报 都市时报等诸多媒
  • IPFS星际文件系统下载及安装

    ipfs的下载与安装 ipfs星际文件系统是一个面向全球的 P2P的分布式文件系统 目标是补充 甚至是取代 目前通知互联网的超文本传输协议http 与传统的基于域名寻址的http协议相比较 ipfs的原理是基于内容寻址 也就是说用户寻找的不
  • ipfs使用二进制文件部署私有链

    注 此版本仅适用于ipfs go ipfs v0 4 18 版本 IPFS多节点 才能构建一个本地的分布式文件系统 在联盟链开发环境下 多数会使用到IPFS多节点私有网存储文件 一 IPFS二进制安装 1 1 下载ipfs二进制文件 wge
  • 基于Fabric+IPFS大规模数据上链方案

    基于Fabric IPFS大规模数据上链方案 更多区块链技术与应用分类 区块链应用 区块链开发 以太坊 Fabric BCOS 密码技术 共识算法 比特币 其他链 通证经济 传统金融场景 去中心化金融 防伪溯源 数据共享 可信存证 第一章
  • IPFS在Ubuntu中的安装步骤

    1 下载资源包 1 通过IPFS官网 https dist ipfs io go ipfs下载go ipfs 的预编译版本 需要挂Vpn 2 通过官方开放在GitHub上的源码仓库来获取最新发布的安装包 https github com i
  • ipfs-hdfs分布式文件系统

    HDFS hadoop项目的核心子项目 基于流数据模式访问和处理超大文件的需求而开发的 数据的分布式存储和处理 namenode 和 datanode 的内置服务器可帮助用户轻松检查群集的状态 namenode 管理维护着文件系统树以及整个
  • IPFS方得社区周欢:web3.0时代的分布式存储畅想

    链茶访是链茶馆新开辟的区块链项目报道专栏 每周会对一个项目团队进行专访 链茶馆将挖掘不同项目的闪光点 讲述区块链开发者的创业故事 为各位区块链同侪提供最新的项目资讯与行业动向 链茶馆今天采访了IPFS方得社区创始人周欢 该社区目前有4万用户
  • IPFS环境搭建和用ipfs-api访问ipfs网络

    ipfs是去中心化星际文件系统 本文介绍节点软件ipfs环境搭建和使用方法 学习ipfs api在nodejs代码中访问ipfs网络 一 ipfs节点安装与使用 1 1下载节点软件 到官网下载windows版的ipfs节点软件 32位 64
  • 【区块链】#区块链 ipfs介绍及环境配置

    需要在答辩之前做一点demo进行展示 好给评委老师展示我们的预期成果 组长最后挑选了IPFS作为初级的展示工具 我们的第一次在链上操作就开始了 区块链具有去中心化 不可篡改 智能合约的一些特性 其实大家都知道区块链是这几年因为比特币的火而赶
  • IPFS: NAT traversal(NAT穿越)

    IPFS是一个p2p网络 那么一定绕不开的一个问题就是NAT穿越 之前的文章里面也提到过IPFS网络连通性使用的ICE NAT穿越框架 本文简单介绍一下什么是NAT 为什么有NAT技术 NAT主要用来缓解全球的IPv4地址不够用的情况 IP
  • 今天我们来分享一下著名的分布式存储项目IPFS吧嘻嘻(最近在金融科技大赛,有相关的了解调用)

    我们先来了解一下HTTP的机制和原理吧 对于我们现在的网页协议来说 所有的HTML等前端的页面结构显示和文件都是通过HTTP请求来进行对中心化服务的访问 就像某一些时候 我们会发现自己的网页是不存在 是因为在服务器的中间无法的接受到我们的请
  • 星际文件存储IPFS是如何颠覆云存储的?

    一句话概括 IPFS The InterPlanetary File System 星际文件存储系统是一种点到点的分布式文件系统 它连接的计算设备都拥有相同的文件管理模式 从某种意义上来说这个概念跟Web的最初理念很类似 但是实际上IPFS
  • java-ipfs-api.jar的食用方法

    引入java ipfs api jar 从仓库引入 在pom xml中添加仓库
  • 如何在 IPFS 中重新创建多重哈希的哈希摘要

    假设我像这样向 IPFS 添加数据 echo Hello World ipfs add 这会给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u CID 它是 Base58 编码的多重哈希 将其转
  • 将字节数组转换为 Angular6 中的图像

    我已从服务器发送字节数组中的图像文件 现在我必须将其转换为jpeg文件并将其显示在网页中 Code app get getPhoto hash function req res console log req params hash inv
  • IPFS:如何将文件添加到现有文件夹?

    给定一个相当大的文件夹 它已经被推送到网络 并在本地删除 如何将文件添加到该文件夹 而不重新下载整个文件夹 你只能通过使用来做到这一点ipns再次下载后ipfs get 如果它仍然固定到本地存储 那么应该会很快 1 首先将您的文件夹递归添加
  • 将目录上传到 pinata ipfs API

    我正在尝试将 png 目录上传到 pinata 但我不断收到此错误 error Invalid file path C Users myname Documents Coding Projects nft art reveal 1 png
  • 如何在一台机器上运行多个IPFS节点?

    为了进行测试 我希望能够在一台机器上运行多个 IPFS 节点 这是场景 我正在 IPFS 核心库之上构建小型服务 遵循制作您自己的 IPFS 服务 https github com ipfs examples tree master exa
  • 如何从我的计算机中取消固定并删除所有 IPFS 内容?

    我通过添加了一堆文件ipfs add 如何立即取消固定并删除所有这些内容 取消固定所有添加的内容 ipfs pin ls type recursive cut d f1 xargs n1 ipfs pin rm 然后可以选择运行存储垃圾收集

随机推荐

  • 如何使用 HTML5 和 javascript 动态循环显示多个视频

    我尝试使用 html5 和 java 脚本一一显示多个视频 但它没有出现 我使用了下面的代码
  • 混合 Android 视图和 GLSurfaceView

    我目前正在开发一款游戏 我不想半途而废 发现我正在做的事情会导致错误 影响性能 这就是我正在考虑的设置方式 首先想要一个带有包含HUD的LinearLayout的LinearLayout 然后是一个GLSurfaceView 然而 我可能在
  • 如何将 URLSessionStreamTask 与 URLSession 结合使用进行分块编码传输

    我正在尝试连接到 Twitter 流 API 端点 看起来像URLSession支持流式传输URLSessionStreamTask 但是我不知道如何使用该 API 我也找不到任何示例代码 我尝试测试以下内容 但没有记录网络流量 let s
  • Xcode 验证无法在 iTunes Connect 中找到应用程序

    我在 iTunes Connect 中添加了一个新应用程序 其状态为 准备上传 并在 Xcode 中为其创建了存档 并使用指定 App Store 作为分发方法的分发配置文件 当我尝试验证它时 我得到 没有找到申请记录 应用程序必须先准备好
  • Xcode DerivedData 文件夹

    我有一个关于理解 Xcode 将我的程序的产品放在哪里的简短问题 我从项目文件夹中完全删除了 DerivedData 文件夹 第一个问题 DerivedData 的实际用途是什么 ModuleCache 到底是什么 但是 在编译时 我发现该
  • MySQL varchar 索引长度

    我有一个这样的表 CREATE TABLE products id int 11 unsigned NOT NULL AUTO INCREMENT name varchar 512 NOT NULL description text PRI
  • 使用 GitHub Actions 自动从远程拉取

    我在 GitHub 上有一个私有存储库 我的目标是每当有新提交时 我们都会在 VPS 上更新存储库 问题在于存储库是私有的并且需要身份验证 我尝试在全局 git 配置中设置我的用户名和密码 但即使这样做之后 它仍然需要身份验证 我自己想出了
  • SQL - HAVING 与 WHERE

    我有以下两个表 1 Lecturers LectID Fname Lname degree 2 Lecturers Specialization LectID Expertise 我想找到最专业的讲师 当我尝试这个时 它不起作用 SELEC
  • 是否可以将列表转换为键的嵌套字典*而不*递归?

    假设我有一个列表如下 mylist a b c d 是否可以从此列表中创建以下字典without使用递归 递归函数 a b c d 对于简单的情况 只需从末尾或开头进行迭代和构建 result for name in reversed my
  • Visual Studio 错误:单击项目并打开“属性”时“对象引用未设置到对象的实例”

    我的 Visual Studio 2013 和 2010 有一个奇怪的行为 我似乎无法修复 我知道这与编程没有直接关系 类似的问题通过代码实现相同的错误消息 所以我假设它是 VisualStudio 中的代码有问题 我的项目是C 每当我单击
  • 如何向 EKEvent 添加一些附加字段

    一种解决方案可能是 创建新模型EKEventExt并在它们之间添加一对一的关系 我不确定这是否可行 因为EKEventExt存储在我的一个 sqlite 中并且EKEvent存储在事件存储中 可以将自定义字段附加到日历格式 例如 iCal
  • “isync”是否会阻止 CPU PowerPC 上的存储加载重新排序?

    众所周知 PowerPC 的内存模型较弱 允许任何推测性重新排序 存储 存储 加载 存储 存储 加载 加载 加载 至少有 3 个栅栏 hwsync or sync 完整的内存屏障 防止任何重新排序 lwsync 防止重新排序的内存屏障 加载
  • MKLocalSearch 不提供与本机 Apple 地图应用程序中的搜索相同的结果

    当我使用相同的字符串在 MKLocalSearch 和 Apple 地图中搜索时 我会得到不同的结果 通常在 Apple 地图中我会得到很多不同的位置 但在 MKLocalSearch 中我只得到一个 苹果地图 我的应用程序使用 MKLoc
  • Quill 编辑器的全屏按钮?

    我正在与 Quill Editor 合作 到目前为止一切都很好 我的问题是 有什么方法可以通过工具栏中的按钮使 Quill Editor 进入全屏 某种无干扰模式 如果不是 我该如何继续自己实施呢 要全屏显示 我认为使用库是最简单的 例如
  • 在scala中访问java基类的静态成员

    我有一些用Java编写的代码 对于新课程 我计划用 Scala 编写 我在访问基类的受保护静态成员时遇到问题 这是示例代码 Java 代码 class Base protected static int count 20 scala 代码
  • 在Windows中转义curl命令

    我正在尝试运行curl我可以从 Windows 的命令行中执行命令 但我怎么也想不出如何逃脱它 我正在执行这个 C WINDOWS system32 gt curl anyauth user user password X POST d r
  • 我可以将本地 Github 存储库与 WAMP localhost 文件夹结合起来吗?

    I have C Users 我的 Documents GitHub对于我的本地 GitHub 存储库 以及C wamp www是我使用 Wampserver 在本地处理项目的地方 与他们一起工作的适当设置是什么 我应该告诉 Git 使用
  • 防止 Laravel 一键多次提交

    在我提出这个问题之前 我使用 javascript 方法来防止在我的刀片模板上进行多次提交 但我知道客户端仍然可能受到攻击 这是我的 JavaScript 代码
  • 在 Inno Setup 安装期间重命名/替换快捷方式

    InstallDelete 部分允许删除文件 但不允许删除图标 唯一支持的类型是文件 我希望它也支持图标 我需要更改与正在安装的程序关联的快捷方式 我可以通过向 Icons 部分添加适当的参数来添加新的快捷方式 例如 维护 但尚未找到删除旧
  • 如何在 IPFS 中重新创建多重哈希的哈希摘要

    假设我像这样向 IPFS 添加数据 echo Hello World ipfs add 这会给我QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u CID 它是 Base58 编码的多重哈希 将其转