区块链产生的初衷,即解决传统中心化金融系统中的信任问题,通过去除中介来增强交易的安全性和透明度。以比特币为例,深入探讨了区块链的工作机制,包括如何形成交易历史、去中心化和共识机制。
我对写这第一篇关于区块链的文章感到非常犹豫。主要是因为这是一个以光速发展的技术,创新层出不穷,随时都会冒出来。这个世界充满了酷炫而多样的想法——因此,仅用几篇短文就很难做到公正。
与此同时,这正是促使我开始写作的原因:需要吸收的信息量是巨大的,而且在大量特定和奇特术语中迷失方向也很容易。
我知道这至少是我的情况。
因此,尽管 密码学 101 系列还没有结束,我决定开始这条新路径,探索区块链技术背后的概念和思想。我的希望是为你提供一些工具,以便更好地在这片曲折的领域中导航——但大部分的探索和尝试完全由你自己来决定!
对于经验丰富的区块链老手来说,复习一下从来都不是坏主意!
不再多说,让我们踏上这段新冒险的旅程!希望你喜欢!
在我们甚至提到区块链是什么或它是如何工作的之前,我们应该花一点时间理解我们通常是如何处理金钱的,因为有几件事情可能会引发问题——而这些正是区块链开发的初衷。
金钱如何运作本身是一个惊人的话题,而且可能现在我们去探讨这个话题还为时尚早。我们目前关心的是,它可以是物理的或数字的。
物理货币有一个有趣的固有特性,那就是不能被花费两次——除非你在支付后以某种方式收回这笔钱,这显然是非常不道德的。
把那还给我,我想再花一次!
相反,采用数字途径需要某人来处理我们的交易。这个人还负责确保金钱不被重复使用,并且我拥有的金钱(称为余额)和接收者的余额能正确更新。
由于这个人——我们称他们为处理者——处理所有这些操作,这意味着我们需要信任他们能做好这项工作。哦,还要为他们的服务付费。
这些处理者通常是银行或与它们有关联。
不要误解我的意思,这在大多数情况下运作良好。但是有一些情况可能会给我们用户带来麻烦。
举几例:
好吧,最后一个可能有点极端——但我们不能排除意外发生的可能性!
通常会采取安全措施来避免这些情况的发生。但我想关注的是,以上所有问题都源于一个共同因素:中心化的,受信任的处理者。
我们可以问自己:去掉这个中间人能否解决这些问题?我们该如何做到这一点?
因此,在 2008 年一个命运多舛的日子 ,一篇毫无预兆地发表的论文——作者中本聪至今仍未知——将永远改变游戏规则:_比特币_论文 。
从本质上看,比特币所提议的非常简单:只要许多人能够就交易历史达成一致,那么每个人都知道现状如何。
为了更好地理解这一点,让我们做一个小练习。
假设Alice、Bob和Charlie想要创建一个没有中介处理者的现金系统。他们决定每个人一开始都有一些资金——也许100 coins——,而他们想要做的只是彼此之间交易。
这些硬币对他们来说才有价值。
例如,Alice可以给Bob付 10 个硬币让他帮她修打印机,而Bob可能会选择用 15 个硬币让Alice教他基础瑜伽。其实无论他们达成什么协议,都可以。
他们的做法是把余额保存在一个共享的 Excel 表中,并在想要向对方发送金钱时进行修改。超级安全,对吧?
当然,这里有几个问题。假设Alice想作弊,她在表中写下Bob给她发送了20个硬币。Bob并没有同意这一点。Bob对此不太满意。
他们之间展开了一场激烈的讨论,为了平息争论,Charlie提出了一个主意:如果每个人都签名他们的交易呢?
这里说的签名是指数字签名 。
这样,每个人仅在他们明确同意的情况下进行交易。数字签名有一个很好的特性——可验证——这意味着只有Bob可以为Bob签名,但每个人可以验证Bob是否签署了交易。
通过这种方式,任何人都可以在 Excel 表中输入他们的交易,这些交易结构如下:
任何人都可以通过检查签名来验证交易的有效性,因此余额可以安全更新。
这解决了一个问题!但还有其他问题——例如,试图花费超过你拥有的金额。这可以通过拒绝任何尝试移动超过我们余额的硬币的交易来轻松避免。
然而,有一个问题是非常棘手的。假设Alice有10 个硬币。她提交了两个交易:一个给Bob6 个硬币,一个给Charlie5 个硬币。她没有足够的资金来执行这两个交易——我们该如何解决这个情况?
答案非常简单:无论哪个交易先发生,哪个交易就是有效的,而下一个交易则无效。似乎我们只需给交易附上一个时间戳:
第二个将被视为无效,因为Alice没有足够的资金。
现在……一个电子表格仍然是一个单一失败点。在糟糕的一天,Bob可能会简单地抹去表中的信息,他们的小经济就会瞬间崩溃。
Charlie在这个例子中似乎是唯一的好人。
如果计划是创建一个供每个人使用的现金系统,我们需要一个更可靠的解决方案。那么,让我们来看看比特币提议了什么。
为了去除中介并提高系统的稳健性,比特币提议使用一个由节点组成的网络,这些节点有能力就共享交易历史达成一致,从而定义网络的当前状态。
我们将有时间更好地理解节点是什么。我们需要专注于他们如何就交易历史达成共识——他们是如何实现我们所称的一致性的。
剧透:这比电子表格要复杂一些。
要达成共识,我们首先需要有一个模型。比特币提议将其表示为区块。
乍一看,这会让人感到奇怪。我们真正想要的是给每笔交易加上一个时间戳,以确定哪一笔先发生。
问题在于,对于一个有多个参与者的网络来说,逐个达成时间戳的共识是非常低效的。我们还需要决定如何存储这些信息——我们知道它不会在电子表格上,但……在哪里呢?
让我们将其分为两部分。首先,我们可以同意一组交易,而不是单独的交易——我们称该组为区块。就像这样:
我们对区块的初步理解。
请记住,每笔交易都是由发送者数字签名的!
接下来,我们需要建立一个区块顺序。这很简单:我们需要添加一个引用到前一个区块。这样,我们就可以检查前一个区块发生了什么,再往前推,直到我们到达时间的起点。哇。
开个玩笑——我们只能追溯到第一个区块,通常称为创世区块。所以我们的链(因此得名区块链)看起来是这样的:
就这样,我们建立了一个排序交易的机制——它们可能没有明确的时间戳,但它们有相对的顺序。
也就是说,区块 #2 中的交易肯定发生在区块 #1 中的交易之后。但,你知道,我们也可以加上一个时间戳以作参考!
我们的基本模型开了个好头!我们还不知道那个区块 ID是什么,但我们很快就会知道——因为我们接下来要回答的问题是,大家如何达成区块的正确顺序的共识?
回顾一下,我们提到这些节点想要彼此之间进行通信,并以某种方式达成共享历史。让我们简化一下,想象一下这些节点是人,在一个群聊中交谈。
Alice想要将一个区块添加到链中。于是她抓取了一些交易(来源是我们将在后续文章中讨论的问题),构建一个指向链的当前末端的区块,并将其发送到群聊中。
当然,大家需要检查提议的交易是否有效——但我想关注另一个问题。假设Bob想要报复Alice,他同时发送了另一个区块。
总是一群和平的人。
我们面临一个难题:我们应该包含Alice的区块还是Bob的区块?它们都是有效的,并且都指向链的末端。我们如何达成共识选择其中一个?
比特币提出了一个有趣的解决方案,现在称为工作量证明(或简称PoW)。简单来说,提议一个区块并不像我们之前的例子那么简单。我们将提议区块的能力锁定在一个数学难题后面。
这里有个想法:如果我们能以某种方式随机化谁能够提议一个有效的区块,那么我们就可以避免这种并发问题(也就是Bob的捣乱)。而在密码学中,有一种工具具有这种伪随机行为:哈希函数!那么我们为什么不利用它呢?
我假设你知道什么是哈希函数。如果不知道,我强烈建议你阅读这篇文章 !
所以现在,提议一个区块有两个步骤:选择一组交易,然后哈希区块的内容。
哈希只是一个固定大小的比特序列,(再次简化)看起来是随机的。我们可以提出一个有趣的难题,要求哈希以若干个零开头。
比如说 000000000001011010101110……
哈希函数是不可逆的,这意味着我们不能提议一个哈希值,然后尝试恢复原始输入——所以我们所能做的就是试错。也就是说,修改输入,并希望得到所需的输出。这个难题的难度取决于哈希开头的零的数量——或前导零。当我们找到这样的获胜哈希时,难题就解决了。
这就像中彩票一样。
但这有点不切实际,不是吗?如果我们想要更改输入,我们需要选择一个不同的交易集来包含在区块中。创建区块的人可能不想这样做。我们能做些什么呢?
当然可以!我们可以在我们的区块中包含一个特殊值,称为随机数,我们可以随心所欲地修改它,直到得到所需的哈希:
通过这个,我们使得生成有效区块的过程变得随机,并有效地挫败了Bob的计划。这个过程被称为挖矿——我们将在未来回到这个话题。
野蛮。
总结一下,这使得每个人都可以保留整个区块链的副本,并且他们可以通过接受有效区块来扩展它,这些区块只会由偶然找到获胜哈希的用户以随机方式生成。这回答了信息存储在哪里的问题:无处不在。
还有一个小调整:我们故意避免谈论的区块 ID,被设置为计算出的哈希。这将产生有趣的影响,我们将在后面讨论。
现在是时候停下来,暂时结束了。我们还有许多细节需要覆盖,以全面理解比特币——这只是我们在本系列中将要讨论的众多区块链中的第一个,也是最简单的一个。
重要的是,我们已经介绍了一些重要的概念和术语,这些在我们的旅程中至关重要。我们知道区块链代表什么——交易的共享历史——,并且我们注意到一些密码学组件很重要,即 数字签名 和哈希函数。
我们也开始理解网络是如何达成共识的,区块链是如何演变的。不过这只是冰山一角,因为我们的哈希机制解决了一些问题,但也留下了其他问题未解决。
在我们学习共识机制之前,我们将专注于区块链的命脉:交易。这将是我们下次见面的主题!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!