本文介绍了 Simperby 区块链如何使用 Git 作为底层存储和版本控制系统。Simperby 将区块链数据(包括交易、提案、区块等)存储在 Git 仓库中,并利用 Git 的分支、合并、版本控制等特性来实现数据的分布式存储、同步和验证。最终实现一个通用的分布式 Git 仓库,可以包含任何对组织有用的数据。
Simperby 最独特的特性之一是它对 Git 的使用。
你应该对以下内容有基本的了解:
finalized
分支。finalized
分支增长出来的多个分支的形式呈现。git fetch
Simperby 节点管理的本地服务器到他们自己的本地克隆,遍历历史记录,并使用任何 Git 客户端检查快照和差异。finalized
)上进行的提交都将以拜占庭容错和分布式的方式永久存储。以下是对应的关系:
finalized
分支finalized
分支Git 是一个分布式版本控制系统,在软件开发社区中被广泛使用。它是一项成熟的技术,已经使用了几十年。我们使用 Git 作为 Simperby 底层存储的主要原因有四个。
首先,Git 是一个版本控制系统。它提供了很棒的功能,如分支、合并、变基和差异比较。你可以检出到任何提交,并浏览该时间点的文件系统。它以线性或 DAG 结构管理仓库的整个历史记录。
这与 Simperby 非常吻合,因为…… TODO
Git 管理一个文件系统,用户可以通过主机操作系统直接浏览。由于 Simperby 是一个为组织服务的区块链,而不是一个合约平台,区块链状态的作用是作为通用数据存储。以下是为组织使用分布式文件系统的一些例子:
如果你想探索区块链状态的快照(包括过去的状态),你可以简单地检出到修订版本并浏览文件系统。
Git 本质上以分布式方式工作。一个 Git 仓库可以有多个“远程仓库”,可以自由添加、删除和从中获取。仓库没有“中央服务器”。基于这个原则,在 Simperby 中,每个节点都会添加他们发现的对等节点,并可能获取相关的远程分支,验证它们并更新他们的本地仓库。它可以通过验证传入的区块头来推进区块高度,从而移动本地的 finalized
分支。它还可以跟踪作为对等节点的远程分支提供的新观察到的议程或区块提案,反映在本地仓库上,并用自己的分支标记。
Git 是目前使用最广泛的版本控制系统。它拥有庞大的第三方工具和服务生态系统。
这里我们介绍 Simperby Git 仓库的规范。
提交的定义如下:
block
:用于提议或最终确认的区块的空提交tx
:对状态进行任意更新的交易(除了保留目录)。请注意,tx
提交是提交标题不是以其类型 tx
开头的唯一例外。 它可以是空的。tx-delegate
,tx-undelegate
:一个非空的额外议程交易,用于更新委托状态,该状态位于仓库的保留目录中。tx-report
:一个非空的提交,用于报告验证者的不当行为,并附带加密证明。这必须包括由罚没引起的状态变化。chat
:用于高度的聊天记录的空提交。agenda-proof
:用于议程的治理批准证明的空提交。TODO
以下是 Simperby 节点专门处理的分支名称。
finalized
:始终指向最后一个最终确认的区块。它受到强力保护;用户不能推送到此分支。p
:此节点的区块提案。节点Operator可以推送到此分支或强制推送到此分支。推送时,Git 服务器将检查分支的有效性。共识引擎将识别此分支并提议达成共识。它代表“区块提案”。a-<hash>
:从其他节点传播过来的有效议程(但尚未批准)。如果治理部门已经批准了议程,它将指向位于议程提交之上的 agenda-proof
提交。<hash>
必须是提交的哈希值,截断为前 8 位数字。b-<hash>
:从其他节点传播过来的有效区块(但尚未最终确认)。<hash>
必须是提交的哈希值,截断为前 8 位数字。fp
:一个非常特殊的分支,始终保存最后一个区块的最终确认证明。这是必需的,因为区块头不包含其自身的最终确认证明。因此,为了使仓库具有自验证性,必须以某种方式在某个地方保存该证明。此分支只有一个空提交,直接位于相应的区块提交之上,标题为 fp: <height>
。提交消息正文包含实际的证明。请注意,由于签名者的不同观察结果,fp
分支的提交可能在节点之间有所不同,但证明本身必须有效。标签不能由用户推送。它们始终由节点管理。
vote-<number>
:仅适用于议程提交;表示用户已投票支持该议程。<number>
由节点任意分配。veto-<number>
:仅适用于区块提交;表示用户已否决该区块。<number>
由节点任意分配。genesis
:创世区块。// 历史记录从底部到顶部增长。
// 每行代表一个 Git 提交。
block H+1 (branch: finalized)
chat H+1
[extra-agenda transactions]
...
agenda proof H+1
agenda H+1
[ordinary transactions]
...
block H
如果节点收到多个议程,它将呈现多个分支,这些分支由 ordinary transactions
和从 block
增长的单个 agenda
组成。
在 Simperby 中,区块链起源被定义为在现有 Git 仓库上创建第一个 block
提交。仓库可以处于任何状态,所有历史记录都将作为“起源前”时代保存。起源前时代中最后一个提交(创世区块的父级)的 Git 提交哈希(不是 Simperby 哈希)将贡献给创世区块头的 previous_hash
字段。
TODO
- 原文链接: github.com/postech-dao/s...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!