问题标签 [merkle-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
137 浏览

binary-tree - 比特币默克尔树总是二元的吗?

比特币默克尔树总是二元的吗?

(1) 我想知道 Merkle 树的查找效率。

(2) 我没有发现任何证据表明 Merkle 树是强制二进制的,这将允许 O(log2 n) 查找算法。

(3) 如果一个节点可能有任意数量的子节点,那么查找函数将有一个 O(logK n * K),其中 K 是允许的最大子节点数(据我所知)。

0 投票
1 回答
3163 浏览

java - java中一个简单的merkle-tree实现

我正在尝试用 Java 编写一个非常简单的 merkle-tree 实现。

我正在使用比特币区块链上第 170 块中的 txid 值作为参考,因此我可以看到正确的结果应该是什么。

该区块对应的 txid 如下:

据我了解,比特币的默克尔树实现方式如下:

  1. 将块中的交易分成对
  2. 字节交换 txid
  3. 连接 txid
  4. 双散列连接的对

需要注意的是:

我的代码在一个 switch 语句中,如下所示:

我写的 swapEndianness 方法不是真正的“字节级”交换,而是只是改变了字符串的顺序,它看起来像这样:

这两个 txid 的 merkle 根的预期结果是:

但是,我最终得到的结果是:

我没有得到我期望的结果是因为我在进行字节交换时作弊,是因为我错过了一个步骤,还是因为我的代码中有错误(或这些错误的某种组合)?任何帮助,将不胜感激!

0 投票
1 回答
68 浏览

javascript - Chainpoint 存在证明

我正在尝试使用链点收据(版本 3)证明哈希的存在。使用他们的 API,我提交了一个哈希并收到了收据,但我不知道如何执行哈希操作来获取 merkle 根。

这是我的收据:

默克尔树的默克尔根,如果我做得对的话,就是地址https://b.chainpoint.org/calendar/3277842/hash

我写了一个简单的脚本来证明我的哈希的存在:

我找不到我的错误在哪里,任何帮助将不胜感激。

0 投票
2 回答
164 浏览

rust - 如何从底层的子树中获取 roothash 或证明?

根据此处的示例,我看到可以使用srml_support::storage::childAPI 从任意数据中创建一个 merkle 子树。但是我们如何使用它来获得 merkle 根或特定叶子的证明呢?我看到API没有提供任何这样命名的函数。

0 投票
0 回答
201 浏览

kotlin - 数据同步:根据对象的更改创建 Merkle 树

我正在做一个项目,我必须同步来自多个用户的离线数据,这些用户以安全的方式处理相同的数据,我已经开始研究如何去做。

第一个想法当然是在需要同步的每一行数据上保存时间戳和脏标志,但是当三个以上的用户处理相同的数据时,依靠这个是有风险的。因此,经过一番研究,我遇到了Merkle Tree的概念,它用于各种解决方案以避免数据退化。

但我想知道你会怎么做呢?我了解如何散列字符串的值,但是如何创建对象的散列?您是否会获取每个参数并将其相互连接并从该连接中创建散列?

考虑这个组成的对象。您将如何创建它的 sha1-hash 并将 Merkle Tree 解决方案应用于此?

这是Syncable界面:

提供接口实现的Task委托。SyncEntitySyncable

希望这个问题有意义吗?

0 投票
1 回答
608 浏览

hyperledger-fabric - 如何计算超级账本结构中的默克尔根?

如何计算超级账本结构的默克尔根?我很难在 Fabric 中找到 merkle 根。

区块头包含 number、prefix_hash、data_hash。以上三个相关数据中的任何一个与默克尔根有关吗?

或者我可以手动计算默克尔根吗?

当我将数据提交到分类帐时,我已经对我使用的数据进行了哈希处理。但是在块头中找不到它...

如何计算超级账本结构的默克尔根?

0 投票
1 回答
83 浏览

c - Merkle 树 - 设置数据并比较结果

此代码适用于 Merkle 树,完整代码可在此链接上访问https://github.com/weichaguo/merkle-tree/blob/master/merkle_tree.c

让我感到困惑的部分是在这些代码块中:

所以我想知道为什么还有(1 << a->tree_height)-1所有其他包含 << 的行。<< 这里是干什么用的?

0 投票
1 回答
272 浏览

distributed - Amazon Dynamo:使用默克尔树的反熵副本同步

背景:我正在尝试实现 Amazon Dynamo 的副本同步,它使用默克尔树来检测副本之间的分歧。

如本文的网络版本中所述,

Dynamo 使用 Merkle 树进行反熵,如下所示:每个节点为其托管的每个键范围(虚拟节点覆盖的键集)维护一个单独的 Merkle 树。这允许节点比较键范围内的键是否是最新的。在该方案中,两个节点交换与它们共同托管的键范围相对应的 Merkle 树的根。随后,使用上述树遍历方案,节点确定它们是否有任何差异并执行适当的同步操作。

我不明白“适当的同步操作”是什么意思。通过使用适当的遍历,假设我们发现两个默克尔树的根节点之间存在差异——我们如何知道哪一个是正确的?我们是否总是根据其逻辑时钟时间戳获取更新较多的那个?

0 投票
1 回答
625 浏览

python - 计算块的 Merkle 根的代码

我想使用下面的代码来计算块的 Merkle 根。详细链接在这里 这是我想使用给定代码生成其 Merkle 根的块。

我有这个错误:

*

文件“merkle.py”,第 126 行,在 print(merkle(txHashes))

文件“merkle.py”,第 10 行,在 merkle newHashList.append(hash2(hashList[i], hashList[i+1])) 文件“merkle.py”,第 18 行,在 hash2 a1 = a.decode('十六进制')[::-1]

AttributeError:“str”对象没有属性“decode”

*

当我尝试在 python 3.8.2 中执行此代码时:

注意:我是“python 中的区块链、编码和解码”的新手

0 投票
1 回答
309 浏览

mysql - 货币交易的 SQL 模型解决方案?

我正在创建一个应用程序,用户可以将钱存入他们的帐户并转移给其他用户。我想知道 Markle Tree 是否是 SQL 转账交易的理想解决方案。我已经阅读了这篇文章,并提出了在我的应用程序中实现这种“安全性”以防止有人更改某些值的想法。

那么,如何成为在我的数据库模型上实施的最佳解决方案,有人可以帮助我吗?目前,我的数据库如下所示:

在此处输入图像描述

主要思想是创建一个交易,因为有支付,并且只有当用户所有交易的价值总和等于他账户中的金额时才会发生交易。这是一个好方法,还是可以更好?