区块链教程

Chapter 1 Ledgers

| 关于   «  0.3. 区块与节点   ::   目录   ::   2.1. 默克尔树  »

1.1. 公共账本

1.1.1. 简介

大多数企业都维护着一本"账本",记录发生的重要事件(交易)。 公共账本是区块链概念的常见应用。 事实上,支持公共账本最初就是区块链技术的主要动机。 公共账本的理念是使系统中的所有交易公开,以便应用程序上的所有操作(所有交易)对各方都是透明的。

公共账本的典型目标是:

  • 保持交易双方的身份安全和匿名,同时确认他们是谁。 (如果这看起来自相矛盾,请重新查看公钥密码学部分。)

  • 保留参与者之间所有真实交易的记录。

  • 基于已发生的交易保持所有参与者的状态。

考虑一群人之间债务的使用场景。 债务不是立即偿还,而是被记录下来以在未来的某个时间点结算。 账本将跟踪所有交易。 这使得系统可以通过加减参与者的资金余额来更新参与者的状态(账户余额), 并使用公钥/私钥对来验证参与者 (顺便说一句,这保持了参与者的真实身份安全)。 由于账本是公开的,任何时候,所有交易都是公开可知、可验证且不可篡改的。

1.1.2. 账户余额

当区块链用于维护公共账本时,它是一个很长的交易序列。 让我们重复一遍:区块链是一个 大 、 长 的交易序列。 可能是数百万笔交易,占用数百 GB 的完整账本空间。 这个信息量太大,无法顺序处理以找到参与者的账户的所有增减,以了解其当前账户余额。

幸运的是,即使在存储一系列交易的范式内,也有相当简单的方法来跟踪账户余额。 这就是 未花费交易输出 (UTXO)模型。 在这种模型下,你的总账户余额由你的交易输出反映。 例如,如果你目前总共有 10 枚硬币,你想购买一个价值 2 枚硬币的产品,你的交易必须花费 所有 10 枚硬币。 所以,你的交易实际上会将 2 枚硬币发送给卖家地址,并将剩余的 8 枚硬币(返回)发送回你的账户。 使用 UTXO 模型,你不必追溯多笔历史交易来查找参与者的总余额,因为他们的总余额存储在最新的交易中。

1.1.3. 分布式公共账本

基本的 公共账本 可能由某个中心化实体维护。 使用区块链来保证之前的交易未被篡改。 只要区块链的当前起始哈希是公开已知的,即使是控制更新账本的中心化实体也无法在每个人察觉到出了问题之前修改账本内容。 但是,这并不能阻止账本的中心化保管者添加他们想要的任何交易。 如果每个人都信任中心化保管者,那没问题。 但有些应用中,系统的用户不希望有一个中心化的账本保管者。

分布式账本 是没有一个负责向系统添加区块的中心化控制者的公共账本。 分布式账本拥有所有公共账本的目标。 然而,在节点网络中,账本(区块链及其内容)有多个副本。 实际上,任何人都可以保留自己的副本。 挑战在于:当没有受信任的一方来做这件事时,如何向区块链添加新数据。 这就是共识算法发挥作用的地方。 它们很复杂(除了密码学原语功能之外, 它们是区块链技术中唯一复杂的部分)。 我们将在后面的模块中详细讨论这些。 现在,你可以接受存在一个商定的方式,通过这个方式社区的一些成员可以提议向区块链添加新区块,以及社区共同接受更新的机制。

   «  0.3. 区块与节点   ::   目录   ::   2.1. 默克尔树  »

关闭窗口