本文提供了比特币的全面概述,解释了提交交易的过程、区块的组织以及共识、内存池和默克尔树等概念的重要性。
这是关于区块链的一系列文章的一部分。如果这是你看到的第一篇文章,我强烈建议你从系列的开头开始阅读。
几年前,当我对区块链了解不多时,我记得觉得这些知识笼罩在某种神秘的面纱之下。我想原因在于,基本的理解涉及许多新的概念和术语,而对于更传统系统的用户来说,有些想法并不那么自然。
但是到现在为止,我们已经涵盖了大部分基本内容。我们知道什么是交易、它们是如何被签名以及如何分组到区块中,这些区块随后通过网络分发,得益于一种共识机制,每个人都可以在知道其副本与同行一致的情况下增长自己的区块链副本。
有了这些工具,我们现在应该对于术语的理解足够了(也就是特定的语言),可以继续进入其他区块链系统。
尽管如此,还有许多情节上的漏洞需要解决,以使这段比特币的故事完整。在转向其他技术之前,我想将这篇文章献给(希望能够)解决这些剩余问题。因此,这篇文章将是一种拼盘,以总结比特币的相关概念和讨论。
作为一个简短的免责声明——当然,我在这里不涉及关于比特币的_所有_知识。你在阅读完这前四篇文章后可能仍会有一些问题,这完全没问题。再说一次,区块链是复杂的系统——还有很多要学习。我只能说,没有比跟随自己的好奇心更好的学习方法了!
但是嘿,我也在这里提供帮助!随时问我任何你想要的问题!
好了,这个介绍有点长。让我们开始吧!
理论是很奇妙的——节点、共识,所有美好的东西。但是我们如何实际_使用_比特币呢?这个网络应该对任何人都可用,只要他们有一个钱包。
为了处理一笔交易,它必须被网络中的某个节点接收,然后通过我们已经讨论的嗓音协议广播。
这里有两种选择:
大多数人只想使用比特币,并不自己运行节点。第二种情况是最常见的。
我们如何将程序暴露于互联网呢?当然是通过API!
比特币节点可以配置为暴露一种称为远程过程调用(或RPC)API。通过这个API,用户可以提交一个调用(例如,“发送交易”),然后由节点执行。
一些平台如Quicknode甚至将此API作为服务提供。
所以,你刚刚向_单个节点_宣布了你的交易。在这一点上,这是网络中唯一知道你交易的节点。
但请记住,该节点找到有效区块的机会就像_中奖的彩票_一样少。换句话说,在这些条件下,你的交易很快被包含在区块中的可能性很小。
那么…比特币是如何成功包含我们的交易的呢?外星人吗?
当然,总是和外星人有关。
解决这个问题就像_交易的传播_一样简单,就像区块那样。一旦节点收到交易,它会将其放置于一个称为_交易池_或_mempool_的_袋子_中。
这是一种等待区。每个节点将决定要在区块中包含哪些交易,然后开始挖矿。
通常,他们会选择那些给他们提供更好激励的交易——记住每笔交易都有附加奖励。
最后,在接收到区块后,每个节点将_验证_和_处理_其中的交易,以达到网络的新状态。在此过程中,它将检查任何包含的交易是否存在于mempool中,并清除任何重复项。
这是一个重要的清理过程,避免了不必要的内存使用。
而正如他们所说,其余的就是历史。
到目前为止,我们对于_区块_的心理模型是一个包含许多交易、一个_nonce_和一个指向上一个区块的_hash_的盒子。虽然这与实际模型相去不远,但我们在某些点的定义上相当宽松。
我们来仔细看看。例如,我们能对区块中的那个_hash_说些什么?
从我们当前的角度来看,我们所关心的只是能够指向上一个区块,从而形成区块链本身。我们将这个哈希视为一个标识符(它确实是),这个标识符应该由一个区块中包含的交易唯一确定。
我们不太考虑的是读取效率。想象一下:你想检查自己几小时前发布的交易是否包含在区块链中。这就像读取区块并检查交易是否存在一样简单,对吧?
确实是的——但考虑到每个区块最多可以包含_几千_个交易,你可能会在读取一长串不感兴趣的交易上浪费一些不必要的时间!
有一种非常特殊的方式可以组织交易,以提供更高效的读取方式:使用梅克尔树。
利用梅克尔树,我们可以生成一个关于交易包含在区块中的简短证明。为此,我们首先需要从所有交易计算一个称为_梅克尔根_的值:
梅克尔根的计算是通过每次将两个叶哈希在一起来完成的,直到得到一个单一的哈希值。
梅克尔根就像是我们开始时交易的一种指纹——改变单一交易,根就会完全改变。但这并不是它所带来的唯一美妙之处:它还允许我们创建一个证明,表明某个交易与一个_根_相关联,而不需要提供所有起始交易。
再次,关于该过程的详细信息在这里!
我不知道这是否足以说服你,但没错,梅克尔根确实在提高区块读取效率方面很重要。它对节点的高效内存管理也很重要。
那么我们将其包含进来!但是_放在哪里_呢?
我们来稍微整理一下区块中包含的信息吧?我们至少想在区块中存储两种明显的数据类型:
因此,我们可以将区块分为两个部分:头部,其中包含其他数据,主体,包含交易。
现在这更接近于区块的实际样子。
请注意,头部中还有几个其他元素。别在意这些——只要记住它们对于网络正确运行是必要的!
这几乎涵盖了我想在这篇比特币短介绍中呈现的技术细节。作为一个转折点,现在让我们转向这项技术更哲学的方面。
作为一项技术,比特币无疑是开创性的,为众多新技术的出现铺平了道路,带来了新的多样化范式。
但是肯定存在疑虑。哎呀,目前周围仍然有许多问题。
我想,“比特币好吗?”这个问题可以从多种方式解释:这项技术在其诞生的头_15_年里经受住了时间的考验吗?与其他技术相比,它足够高效吗?作为传统中心化方法的替代方案,它_真的_值得吗?
我将尝试回答其中一些问题,但这些只是我的想法和观点(偶尔还有一些事实)。这些问题当然没有单一的答案——只需以放松的态度看待这篇文章的其余部分。
围绕区块链(尤其是_工作量证明_区块链)的主要讨论之一是,维护网络消耗大量能源。为了通过_尝试和错误_解决一个难题,需要巨大的计算努力,这意味着大多数能源被浪费在_失败的尝试_上。
这导致比特币消耗了_很多_电能。你可能想知道,具体有多少?根据某些来源这里和这里,足够为一个大约与波兰规模的国家供电。生成这些能量还导致了碳排放,这被认为对环境有害。
不过,务必要保持一个清晰的视角——全球航空业的碳排放足足高出十倍,但仍仅占全球碳排放的约3%。因此,如果我们关心的是环境,也许还有其他事情我们应该关注!
无论你是否在意我之前指出的那些事情,很明显,比特币在计算资源的分配上是_低效_的。天哪,甚至在纽约有一个浴室利用比特币挖矿的余热来加热他们的水!
不禁让人自问:我们能做得更好吗?其他区块链已经转变了范式,以尝试使其网络更高效,正如我们将在未来文章中看到的那样。
比特币的区块每_大约10分钟_生成一次。这是为了在新区块创建的速度与验证者接收、验证新区块并将其附加到区块链所需的时间之间努力寻求良好平衡。
如果我们想让包含我们交易的区块具有一定数量的确认,等待时间可能还会更长。
我想正确的问题是:比特币速度够快吗?老实说,答案是那要看情况。
当你为早晨的星巴克咖啡付款,你需要在POS机上刷卡并等待“批准”消息。这应该不超过几秒钟。比特币显然_不适合_这样做。
但是,跨境支付或可能需要几天的操作呢?等待半个小时和那些相比,似乎并不算太差,对吧?
我明白你在说什么。
而且我们不能忘记:即使这种延迟可以视为成本,但它伴随的是一种不可变的、_不可停止的_交易。这将我引向下一个点。
最后,问题是…我们真的在乎不可变性吗?我们在乎有没有人能阻止我们发送交易吗?我们想要那种权力吗?
再者…这得看情况。有时候,有个银行来处理涉及盗窃的情况是好的,或者我们想给他们打个电话,友好地要求撤销转账到错误帐户。
在比特币中,这是完全不可能的。你拼写错误了交易接收者吗?真不走运,朋友。你的密钥被盗了吗?和你的资金说再见。
对财务拥有如此大的权力是有代价的,正如蜘蛛侠向本叔所学:
权力越大,责任越大
甚至还有一个人曾经拥有7500 BTC,但失去了它们,因为他的密钥在一个被丢弃的硬盘里。而对此几乎无能为力。
简而言之:是否使用比特币的决定取决于你是否愿意承担你自身的风险来管理你的资金。有些人在这样做中茁壮成长,而其他人则希望有一个提供其他保障的解决方案。也有一些折中的选择,比如在银行存一些钱,在比特币中存一些钱。
但有些银行实际上并不喜欢像比特币这样的加密货币(我们将在未来的文章中讨论其他币种),如果发现可疑(加密)活动,他们可能会选择关闭你的账户。
这些内容的监管近年来经历了巨大的情绪波动,并因国家而异。很难说一切将会走向何方。只有时间能证明!
至此,我们几乎涵盖了我想要提及的关于比特币的一切。当然还有更多内容要学习,但我认为这是一个很好的停止点。如果你想全面了解比特币,我建议阅读《精通比特币》。
最初,比特币旨在解决一个单一问题:创造一个去中心化的_数字现金_系统。对此,它做到了。
实际上,我们可能希望创建其他类型的去中心化应用程序。在这个意义上,比特币缺乏多样性,因为它仅被设计用于表示现金。
如果我们想要,比如说,创建一个去中心化的投票系统?或者如果我们想要多个货币?或者如果我们想要进行链上借贷?
我们可以设计另一种针对这些目的的交易系统。但随着我们需要构建越来越多不同类型的应用,这种方法很快变得不切实际。
为了满足我们的需求,我们需要像_可编程区块链_这样的东西。一个解决共识同时允许我们根据用例创建多样化应用的系统。一个能够处理_综合状态_的系统。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!