简介比特币的底层是区块链技术,而区块链也因比特币而广为人知。与其他区块链技术相比,比特币的区块链有哪些特点?作为区块链的鼻祖,有哪些鲜明的特点?快来和我们一起看看吧。比特币的网络比特币使用的是P2P(点对点)网络,这个P2P不是另一个P2P,这里是点对点的网络架构,不是个人对个人的借贷模式。P2P是指同一个网络中的每一台计算机都是平等的,各个节点共同提供网络服务,没有“特殊”的节点。每个网络节点以“扁平”拓扑相互通信。P2P网络中没有服务器、中心化服务和等级结构。传统的网络结构是客户端-服务器模型。所有客户端都与服务器交互以获取信息。只要服务器挂了,客户端就没用了。在P2P网络中,没有服务器的概念,每个节点都可以作为一个服务器。相比之下,P2P网络在稳定性方面要比C-S架构系统稳定得多。既然网络发现和同步是一个P2P网络,那么问题来了,这个P2P网络是如何建立起来的呢?如何发现节点?做过P2P下载的同学应该都听说过种子的概念,里面存放着其他活跃节点的地址。通过下载种子,可以连接到相应的节点。并且每个节点都保存了最近连接或活跃的节点,从而形成了一个庞大的P2P网络。比特币的P2P网络也是如此。新节点如何发现网络中的对等节点?虽然比特币网络中没有特殊的节点,但客户端会维护一份长期稳定运行的节点列表。这样的节点被称为“种子节点”。节点必须不断地做两项工作:在失去现有连接时发现新节点,并在其他节点启动时帮助它们。正如我们之前介绍的,SPV节点在比特币世界中既没有账户也没有余额,只有散落在区块链中的UTXO(UnspentTransactionOutputs)。那么,如果要对这笔交易进行验证,就需要从历史交易中找出与该交易相关的所有交易,从而进行完整、全面的验证。这样做的问题是,如果下载所有的历史记录,需要几百G的硬盘空间,这对于手机或者其他轻量级客户端来说是不可想象的。于是SPV出现了。SPV全称Simplifiedpaymentverification,简称简单验证支付。SPV保存的不是整个区块链,而是区块链的头部。因为每个区块链头只有80字节,所以即使把所有头都下载保存也不会很大。BlockchainHeader区块头由三组区块元数据组成。第一个是引用父块哈希的一组数据。这组元数据用于将这个块连接到区块链中的前一个块。第二组元数据,难度、时间戳和随机数,与挖矿竞争有关。第三组元数据是默克尔树根(一种用于有效汇总区块中所有交易的数据结构)。挖矿过程中使用Nonce、难度目标和时间戳,Merkle根用于索引和组织区块中的所有交易信息。上图是由区块链头部组成的一条链。MerkleTreeMerkleTree是树的一种(数据结构中提到的树),网上大多称为MerkleHashTree,因为它构建的MerkleTree的所有节点都是Hash值。MerkleTree有以下特点:是树,可以是二叉树,也可以是多叉树。无论它有多少叉树,它都具有树结构的所有特征;Merkle树的叶子节点上的值是你指定的,主要看你的设计。例如,MerkleHashTree会使用数据的Hash值作为叶子节点的值;非叶子节点的值是根据它下面所有叶子节点的值,按照一定的算法计算出来的。的。例如MerkleHashTree的非叶子节点值的计算方法就是将节点的所有子节点进行组合,然后对组合结果进行哈希计算,得到哈希值。有了MerkleTree,我们只需要知道其他MerkleTrees中与待验证交易相关的信息,就可以计算出整个MerkleTree的价值,这样就可以直接使用header信息进行验证了。这就是SPV的原理。比特币中的区块链是一种数据结构,其中包含交易信息的区块从后向前顺序链接。它可以存储为平面文件(包含没有相关关系的记录的文件),或存储在简单的数据库中。BitcoinCore客户端使用谷歌的LevelDB数据库来存储区块链元数据。它由一个包含元数据的块头组成,后跟一长串构成块体的交易。区块头80字节,平均每笔交易至少250字节,每个区块平均至少包含500多笔交易。区块标识符如何表示一个区块?我们使用块标识符。区块主标识是其加密后的哈希值,是通过SHA256算法对区块头进行两次哈希处理得到的数字指纹。得到的32字节哈希称为区块哈希,但更准确的名称是:区块头哈希,因为只使用区块头进行计算。识别区块的第二种方法是通过其在区块链中的位置,称为“区块高度”。第一个区块,其区块高度为0,与区块哈希值的不同之处在于区块高度不是唯一标识符。虽然单个块将始终具有确定的、固定的块高度,但反之则不然,块高度并不总是标识单个块。两个或多个区块可能具有相同的区块高度并竞争区块链中的相同位置。Genesis区块链中的第一个区块创建于2009年,称为Genesis区块。它是区块链中所有区块的共同祖先,这意味着如果你从任何一个区块开始追溯,最终都会到达创世区块。因为创世块被编程到比特币客户端软件中,每个节点都从一个至少包含一个区块的区块链开始,这确保了创世块不能被更改。每个节点都“知道”创世块的哈希值、其结构、创建时间以及其中的交易。因此,每个节点都将这个区块作为区块链的第一个区块,从而构建一个安全可信的区块链根。创世块的哈希值是:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f创世块包含一条隐藏消息。在其Coinbase交易的输入中包含一句话“TheTimes03/Jan/2009Chancelloronbrinkofsecondbailoutforbanks”。这句话是当天泰晤士报头版文章的标题。对出块时间的描述,也可以算是半开玩笑地提醒人们独立货币体系的重要性,同时告诉人们,随着比特币的发展,一场前所未有的世界范围内的货币革命将会发生。该消息由比特币创造者中本聪嵌入到创世块中。coinbase的值是:04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73解码方法如下:在pythonshell下:"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73".decode('hex')输出:'x04xffxffx00x1dx01x04ETheTimes03/Jan/2009Chancelloronbrinkofsecondbailoutforbanks'总结本文介绍了比特币TherelatedconceptsofthenetworkandtheblockchaininBitcoin,Ihopeeveryonecanlikeit.
