跳转至

比特币

在前面的章节中,我们详细讨论了区块链、它的组件和它的结构。我们还讨论了密码学,区块链背后的机制,以及区块链如何革新网络世界。在这一章中,我们将讨论比特币的起源。

我们将讨论比特币的引入、它的历史,以及它如何在如此短的时间内成为金融史上最大的革命之一。我们还将深入研究比特币的其他方面,如其编码系统、交易流程、网络节点,我们将简要介绍比特币的挖掘。

我们将在本章中讨论的主题包括以下内容:

  • 比特币的历史
  • 为什么比特币不稳定
  • 钥匙和地址
  • 处理
  • 阻碍
  • 比特币网络
  • 钱包

比特币的历史

比特币是区块链技术的第一个,也是迄今为止最成功的应用。2008 年,中本聪在一篇名为《比特币:点对点电子现金系统》(https://bitcoin.org/bitcoin.pdf)的论文中介绍了比特币。

比特币是世界上第一种去中心化的加密货币;它的引入预示着一场革命,并且在短短十年内,它已经证明了自己的优势,拥有巨大的社区支持和广泛的采用。

从 2010 年开始,除了法定货币之外,某些全球企业已经开始接受比特币。许多货币交易所的建立是为了让人们用法定货币或其他加密货币兑换比特币。2012 年 9 月,比特币基金会成立,旨在通过开源协议的标准化、保护和推广来加速比特币的全球增长。

出现了很多支付网关,如 BitPay,以方便商家接受比特币作为支付方式。热门服务 WordPress 于 2012 年 11 月开始接受比特币。

比特币一直是全球支付,特别是企业对企业供应链支付中的首选支付选项。2017 年,比特币在金融公司和政府组织中获得了更多的合法性。例如,俄罗斯将包括比特币在内的加密货币的使用合法化,挪威最大的银行宣布开设比特币账户,日本通过法律接受比特币为合法支付方式。世界上最大的自由经济区迪拜已经开始向公司发放加密货币交易许可证。

2017 年 8 月 1 日,比特币分裂成两种衍生数字货币;一个保留了传统名称比特币,另一个具有 8 MB 块大小,被称为比特币现金 ( BCH )。在这之后,2017 年 10 月 24 日又发生了一次硬分叉,出现了一种被称为比特币黄金 ( BTG )的新货币。然后,2018 年 2 月 28 日,又一次硬分叉发生了,新货币被称为比特币私有 ( BTCP )。2017 年 11 月还有一个硬分叉,但由于社区缺乏共识,这一分叉被取消了。

然而,比特币的推广者有一个主要担忧,即由于批准交易需要大量确认,价格波动和交易速度变慢。

为什么比特币不稳定

当我们说比特币波动时,我们指的是比特币的价格波动。各个交易所的比特币即期汇率每时每刻都在变化,而且它是全天候运转的。因此,比特币的任何用户或社区成员都会对比特币价格的定期变化感到不安。下图显示了上一财年比特币的价格波动:

自从比特币交易所出现以来,比特币的波动性是讨论最多的话题,也是投资者、矿工和比特币支持者关心的问题。其主要原因如下:

  • 安全漏洞:这是过去比特币价格波动的一个主要问题;每当交易所端出现安全漏洞的消息时,比特币的价格就会受到冲击,因为这让投资者开始怀疑某个交易所或比特币网络。
  • 法律问题:全球立法者对比特币的价格做出预测,甚至试图给比特币贴上非法律实体的标签,这引起了很多质疑。政府的各种声明也抑制了价格。
  • 适应中的心理转变:尽管比特币很快被接受和支持,但它仍然是一种新的货币,与之前的任何货币都有很大不同;这导致人们对采用它持谨慎态度。此外,任何负面新闻都会直接影响比特币的采用,有时会造成价格螺旋下跌,直到围绕比特币的任何积极消息浮出水面。

上述几点只是导致比特币市场大幅波动的一些主要因素。还有各种其他因素时不时地在比特币的价格固定装置中发挥着至关重要的作用。

钥匙和地址

比特币是一种纯粹的数字货币,人们可以将它保存或存储在文件中或比特币钱包中。地址用于将比特币从一个钱包转移到另一个钱包,密钥用于保护交易。

比特币中的密钥是成对使用的。一个是公钥,另一个是私钥。私钥应该被安全地保存,因为它让你可以控制钱包。密钥由比特币钱包存储和控制。

地址是共享的字母数字字符串,用于从一个钱包向另一个钱包发送或接收比特币。这些地址大多编码为 Base58Check ,它使用一个 Base58 数字进行地址转录。比特币地址也编码在二维码中,用于快速交易和分享。

货币单位

比特币有一个广泛使用的面值公制系统,被用作比特币的单位。比特币的最小面值被称为一个 Satoshi ,以其创造者的名字命名。下表显示了比特币的单位,从最小单位*兆位:***

***

虚荣的地址

这些是包含可读地址的有效地址。例如:1BingoAuXyuSSoYm6rH7XFZc6Hcy98zRZz是包含可读字的有效地址(Bingo)。生成一个虚位地址需要创建和测试数百万个私钥,直到找到所需的 Base58 字母地址。

虚荣心地址用于娱乐,并提供与任何其他地址相同的安全级别。随着所需模式长度的增加,虚位地址的搜索时间也增加。

Base58 校验编码

这种编码采用二进制字节数组,并将它们转换成人类可读的格式。该字符串是使用一组 58 个字母数字字符创建的。

也可以使用 Base64 来代替 Base58,但这会使一些字符看起来完全相同,从而导致数据看起来完全相同。比特币中使用的 Base58 符号图是比特币特有的,在创建时只被比特币使用。下表显示了 Base58 编码中的值及其对应的字符:

| | 字符 | | 字符 | | 字符 | | 字符 | | 0 | one | one | 2 | 2 | three | three | four | | four | five | five | six | six | seven | seven | eight | | eight | nine | nine | A | 10 | B | 11 | C | | 12 | D | 13 | E | 14 | F | 15 | G | | 16 | H | 17 | J | 18 | K | 19 | L | | 20 | M | 21 | 普通 | 22 | P | 23 | Q | | 24 | 稀有 | 25 | S | 26 | T | 27 | U | | 28 | V | 29 | W | 30 | X | 31 | Y | | 32 | Z | 33 | a | 34 | b | 35 | c | | 36 | d | 37 | e | 38 | f | 39 | g | | 40 | h | 41 | 我 | forty-two | j | 43 | k | | forty-four | m | 45 | n | 46 | o | 47 | p | | 48 | q | forty-nine | r | 50 | s | 51 | t | | fifty-two | u | 53 | v | 54 | w | 55 | x | | fifty-six | y | 57 | z | - | - | - | - |

处理

这是比特币系统的首要部分。交易没有加密,因为比特币是一个开放的分类账。在区块链,使用任何在线区块链浏览器都可以公开看到任何交易。由于每笔交易的地址都是加密的,并且被鼓励是唯一的,所以追踪用户变得很困难。

比特币的区块是由在区块链浏览器中看到的交易组成的;每个块都有最近发生的事务。每一个新的街区都在区块链的顶端。每个积木都有一个高度数字,下一个积木的高度比前一个积木的高度大一。在区块链探索者号上,共识过程通常被称为确认

类型

有各种类型的脚本可用于管理从一个钱包到另一个钱包的价值转移。这里讨论了一些标准的事务类型,以便清楚地理解地址和事务之间的区别。

付费公钥哈希

支付公钥哈希 ( P2PKH )比特币网络上的大部分交易都是用这种方法进行的。脚本看起来是这样的:

OP_DUP OP_HASH160 [Pubkey Hash] OP_EQUALVERIFY OP_CHECKSIG

签名脚本如下所示:

[Sig][PubKey]

这些字符串被连接在一起执行。

付款至脚本哈希

Pay-to-Script Hash(P2SH)流程用于将交易发送到脚本 Hash。使用脚本哈希支付的地址必须从 3 开始。脚本看起来是这样的:

OP_HASH160 [redeemScriptHash] OP_EQUAL

签名看起来像这样:

[Sig]...[Sig][redeemScript]

与 P2PKH 一样,这些字符串也被连接在一起以创建脚本签名。

阻碍

交易数据被记录在文件中,这些文件被称为。这些块堆叠在彼此的顶部,最近的块在顶部。下表描述了块的结构和块中元素的大小:

比特币网络中的每个区块都有几乎相同的结构,每个区块都链接到最近的区块。这些是块的字段:

  • 神奇数字:这个数字是区块链网络的标识符。其值始终恒定在 0xD9B4BEF9 。它确认数据块的开始,并验证数据是否来自生产网络。
  • 块大小:表示块的大小。
  • 块头:头包含块的元数据。它包含多项数据,如比特币版本、之前的块哈希、Merkle 根、时间戳、挖掘难度和 nonce。
  • 交易计数器:该块中交易的计数。
  • 事务列表:存储该块中事务的哈希。

创世街区

创世纪区块是比特币区块链的第一个区块。创世纪区块的创建标志着比特币的开始。它是区块链所有区块的共同祖先。它被静态编码在比特币客户端软件中,不能被更改。比特币区块链中的每个节点都知道 genesis 块的哈希和结构、创建时间以及它包含的单笔交易。下面是比特币源代码中写的静态代码,描述了用静态参数pszTimestampgenesisOutputScriptnTimenNoncenBitsnVersion创建创世纪块。以下是比特币储存库中的代码片段:

static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward)
 {
 const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
 const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
 return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
 }

比特币网络

这个网络是基于一个点对点协议。在这个网络中,各种节点交换事务和块。这个比特币网络中的每一个节点都被平等对待。这样做的一个好处是,每个节点都可以选择扮演不同的角色,这取决于每个人对如何参与比特币网络的偏好。

节点类型

在讨论节点类型之前,我们先来讨论节点执行的一些主要功能:

  • 钱包
  • 采矿
  • 全区块链
  • 选择途径

比特币网络中主要有两种类型的节点。我们现在将对每一个进行一些简单的描述。

网络发现

比特币中的网络发现是任何节点刚启动时都需要的;节点必须发现网络中的其他节点才能参与区块链。在一个节点的开始,它必须与网络中至少一个现有的节点连接。

为此,节点通过 TCP 协议、通过端口8333或任何其他端口(如果有的话)建立连接。接下来,通过发送特定消息来执行握手。该消息被称为版本消息,其包含基本识别信息。

完整节点

一个完整的节点由钱包、矿工、完整的区块链和路由网络组成。这些节点维护区块链的完整的最新记录。完整节点验证区块链网络上的每一笔交易。

轻量级节点

轻量级节点在区块链上执行事务。它们并不包含整个区块链,而只是区块链的一个子集。他们使用一个叫做简化支付验证 ( SPV )的系统来验证交易。这些节点有时也被称为 SPV 节点

其他节点

比特币网络上还有各种其他节点,每个节点都执行比特币网络中所提供功能中的一组特定功能。一些节点仅包含区块链和路由功能。一些节点仅作为矿工工作,并且不包含钱包。

还有其他非标准节点叫做池协议服务器。这些节点工作在替代协议上,例如层协议。stratum 协议使用 TCP 套接字和 JSON-RPC 在节点之间进行通信。

寻找同伴

对等体主要通过两种方法在网络中找到。一种是通过使用 DNS 种子查询 DNS,这基本上是提供比特币节点 IP 列表的 DNS 服务器。另一种方法是比特币核心试图连接的 IP 列表。早期使用的另一种方法是通过 IRC 播种节点,但是由于安全问题,这种方法被中断了。

DNS 种子

DNS 种子是包含 IP 地址列表的服务器。这些种子是 Berkeley 互联网名称守护进程 ( BIND )的定制实现,并返回一个比特币节点收集的随机子集。大多数比特币客户端在尝试建立第一组连接时使用 DNS 种子进行连接。最好提供各种种子,以便客户端可以与网络上的对等端建立更好的连接。在比特币核心客户端中,使用 DNS 种子的选项由-dnsseed参数控制,默认设置为1。以下是 DNS 种子在比特币来源的chainparams.cpp文件中的表示方式:

 vSeeds.push_back(CDNSSeedData("bitcoin.sipa.be", "seed.bitcoin.sipa.be")); // Pieter Wuille
 vSeeds.push_back(CDNSSeedData("bluematt.me", "dnsseed.bluematt.me")); // Matt Corallo
 vSeeds.push_back(CDNSSeedData("dashjr.org", "dnsseed.bitcoin.dashjr.org")); // Luke Dashjr
 vSeeds.push_back(CDNSSeedData("bitcoinstats.com", "seed.bitcoinstats.com")); // Christian Decker
 vSeeds.push_back(CDNSSeedData("xf2.org", "bitseed.xf2.org")); // Jeff Garzik
 vSeeds.push_back(CDNSSeedData("bitcoin.jonasschnelli.ch", "seed.bitcoin.jonasschnelli.ch")); // Jonas Schnelli

先前的种子当前正在比特币核心中使用,用于与种子客户端连接,以建立与第一节点的连接。

静态 IPs

这些是 IP 地址的静态列表。如果比特币客户端能够成功连接到一个 IP 地址,它将能够通过共享该节点的 IP 连接到其他节点。命令行参数-seednode用于连接一个节点。在初始连接到种子节点后,客户端将使用该种子本身发现新的种子。

钱包

比特币钱包是比特币节点的重要功能;它们包含私钥和/或公钥以及比特币地址。比特币钱包有多种类型,每一种都根据需要提供不同级别的安全性和功能。

有一种普遍的误解,认为电子钱包可以包含比特币,但比特币钱包只会包含密钥。每个比特币都记录在比特币网络的区块链上。比特币钱包包含密钥,这些密钥授权使用与密钥相关联的比特币。用户或钱包所有者用钱包中的密钥签署交易,证明他们拥有比特币。实际上,这些比特币以表示为**txout**交易输出的形式存储在区块链上。

类型

首先,有两种类型的钱包,这是基于钱包中包含的密钥是否彼此相关。

确定性钱包

这是一种钱包,其中所有的密钥都来自一个主密钥,也称为种子。这种钱包中的所有密钥都是相互关联的,在种子的帮助下可以很容易地再次生成。在某些情况下,种子允许在不知道私钥的情况下创建公钥地址。大多数情况下,种子被序列化为人们可读的单词,称为助记短语。

确定性钱包中使用了多种密钥派生方法,这些方法将在以下小节中进行描述。

确定性钱包

确定性钱包持有从一个公共种子派生的私钥。为此使用了单向散列函数。在确定性 wallet 中,该种子对于恢复所有派生密钥至关重要,因此在创建时进行一次备份就足够了。下图描述了单个种子如何与 wallet 生成的所有密钥相关联:

高清钱包

HD 钱包是确定性钱包的最高级形式之一。它们包含从树结构中导出的密钥,因此主密钥可以具有多个 1 级密钥,1 级密钥可以进一步包含多个 2 级密钥,直到无限深度。下图描述了种子如何生成主密钥,这些主密钥进一步以分层形式创建多个密钥:

非确定性钱包

在这种类型的钱包中,每个密钥都是由一个随机数独立生成的。在此钱包中生成的密钥彼此不相关。由于难以维护多个不相关的密钥,因此定期备份这些密钥并保护它们以防止被盗或丢失非常重要。

摘要

在这一章中,我们讨论了比特币的基础知识、历史以及与法定货币相比的定价。我们还讨论了比特币地址、它们的编码、它们的交易类型和区块。最后,我们讨论了比特币网络以及该网络包含的节点类型。

既然我们在本章讨论了世界上第一种加密货币,那么在下一章,我们将讨论受比特币启发的各种其他加密货币,也被称为替代货币我们将讨论替代货币,有时也被称为替代硬币***


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组