blockstackblockstack-Trans

naming-How to use BNS-BNS Forks

2019-08-06  本文已影响0人  空乱木

FROM : https://docs.blockstack.org/core/naming/forks.html

BNS有效地使用公共区块链来存储数据库日志。BNS对等点通过从区块链下载并重新播放数据库日志来引导自己,在这样做的过程中,它将计算与具有相同区块链视图的其他BNS对等点相同的名称数据库状态。

至关重要的是,BNS是建立在一个不知道BNS存在的公共区块链之上的。这意味着区块链对等点不验证BNS事务。相反,BNS对等方需要这样做,并且必须知道如何拒绝来自不诚实对等方(即不遵循相同一致规则的对等方)的无效事务和格式良好的事务。

BNS节点之间不直接通信——按照设计,BNS节点集是不可枚举的。BNS对等点之间唯一共享的通信媒介是区块链。

为了在没有区块链帮助的情况下识别和拒绝无效和恶意的事务,将嵌入到区块链中的名称操作日志构造为一个fork-一致的数据库日志。Fork-consistency是一个一致性模型,所有节点中的状态副本都具有以下属性:

这意味着与区块链不同,BNS数据库日志可能有多个长期冲突的分支。但是,由于fork-一致性,一个正确的BNS对等点只处理其中一个分支,并且会忽略来自其他分支中的对等点的事务。换句话说,fork-consistency将BNS对等点集划分为不同的fork集,其中一个fork集中的所有对等点处理彼此的事务,而其他fork集中的对等点则完全忽略。

BNS节点使用一致哈希来标识它们属于哪个分支集。共识散列是节点操作历史的加密摘要。每个BNS对等点在每次处理一个新块时计算一个新的一致哈希值,并为它处理的每个块存储一致哈希值的历史。

两个诚实的BNS对等点可以通过查询彼此对给定块的一致哈希值,快速确定它们是否在同一个fork集中。如果它们匹配,那么它们在相同的fork集中(assming no hash collision)。

BNS客户端通过在区块链事务中包含来自该叉集的最近共识散列,对特定的叉集执行名称操作。与此同时,BNS协商一致规则规定,只有包含最近有效的协商一致散列的事务才能被接受。这意味着客户端所需叉集中的所有BNS节点将接受该事务,而不在叉集中的所有其他BNS节点将忽略该事务。通过阅读事务线格式文档,您可以看到协商一致散列在区块链事务中包含的位置。

Fork-set选择

区块链对事务的历史进行了线性化,这意味着一般来说,对于每一组不同的BNS一致规则,都存在一个fork集。例如,Blockstack Core 2016 hard fork和2017 hard fork都引入了新的共识规则,这意味着在撰写本文时,有三种可能的fork集:2016年前的fork集、2016-2017年的fork集和2017年后的fork集。公共BNS节点总是在具有最新共识规则的fork集中运行。

BNS客户端被鼓励与使用最多的fork集中的对等端通信,因为这个fork集中的名称数据库将编码用户最广泛接受和理解的名称/状态绑定。为了识别这个叉集,BNS客户端需要学习它最近的一致哈希表。一旦它拥有一个最近的协商一致散列,它就可以查询一个不受信任的BNS节点,以获得其名称数据库的副本,并使用协商一致散列来验证是否使用名称数据库来生成它。

BNS节点如何确定一致哈希是否对应于最广泛使用的叉集?有两种策略:

这两种策略都依赖于这样一个事实:共识哈希是作为一个Merkle跳转列表计算的,该列表覆盖BNS节点接受的事务。客户机可以使用一致哈希来确定事务T是否被具有O(log n)时间和空间复杂度的节点接受。我们将协商一致散列解析为特定事务简化名称验证(SNV)的协议称为协议。有关SNV如何在引擎盖下工作的详细信息,请参阅我们关于这个主题的论文。

如果客户端有一个共识散列,并且知道广泛使用的fork集中有一个特征事务,那么它可以使用SNV来确定一个节点是否属于接受它的fork集中。

如果客户知道多个冲突的一致哈希值,他们仍然可以使用SNV来确定哪个值对应于最常用的叉集。为此,客户端将使用区块链explorer查找烧毁加密货币令牌的事务列表。这些事务中的每一个都将被视为潜在的特征事务:客户端将首先选择格式良好的BNS事务的子集,然后使用SNV来确定它们中哪些与哪些一致散列相对应。客户端选择一致的散列,该散列对应于累积烧损最高的fork集。

目前正在进行自动化这一过程的工作。

上一篇下一篇

猜你喜欢

热点阅读