主页 > 苹果手机如何下载imtoken > 比特币协议的工作原理(第 2 部分)

比特币协议的工作原理(第 2 部分)

苹果手机如何下载imtoken 2023-09-09 05:07:03

比特币协议的工作原理(第 2 部分)

比特币

现在,让我们离开Infocoin,转向真正的比特币协议。比特币与我们刚刚一步步构建的Infocoin并没有太大区别,只是有一个明显的变化。

要使用比特币,你首先必须在你的电脑上安装一个钱包。为了让大家更好的理解,下图是一个名为 Multibit 的钱包的截图。你可以在左上角看到比特币余额 - 0.06555555 个比特币,按截图时的交易价格计算,差不多是 70 美元。屏幕截图的右侧显示了两个最近存入此 0.06555555 比特币的交易。

假设你是一个商人,你有一个在线商店,你决定允许客户用比特币支付。您需要做的就是使用您的钱包程序生成一个新的比特币地址。它会自动生成一对公钥和私钥,然后对你的公钥进行哈希处理以形成你的比特币地址。

然后,您将您的比特币地址发送给想要付款给您的人。您可以使用您的电子邮件,也可以将其直接放在您的网站上。这是安全的,因为您的地址只是一个散列公钥,您可以安全地发布给任何人(没有人可以通过它获取您的私钥)。稍后我将解释为什么比特币地址使用公钥的哈希值而不是公钥本身。

现在要付款的人需要创建一个新交易。我们来看一个 0.319 个比特币的真实交易数据。以下几乎是原始数据。这里有三个变化: 1)数据不连续;2)添加行号以便更好地理解;3)Omitted hash data 一长串数字,只保留前6位。

比特币是从哪里来的

1.  {"hash":"7c4025...",
2.  "ver":1,
3.  "vin_sz":1,
4.  "vout_sz":1,
5.  "lock_time":0,
6.  "size":224,
7.  "in":[
8.    {"prev_out":
9.      {"hash":"2007ae...",
10.      "n":0},
11.    "scriptSig":"304502... 042b2d..."}],
12. "out":[
13.   {"value":"0.31900000",
14.    "scriptPubKey":"OP_DUP OP_HASH160 a7db6f OP_EQUALVERIFY OP_CHECKSIG"}]}

让我们逐行解释。

第 1 行,交易哈希值(十六进制),这是用于表示该交易的唯一令牌。

第 2 行告诉我们,该交易使用的是比特币协议的第一个版本。

3、4 行,告诉我们这个交易有一个输入和一个输出。(一个交易可以有多个输入和多个输出)

第5行,是一个锁定时间(lock_time),可以用来控制事务何时完成。现在大多数比特币交易的锁定时间为 0,这意味着交易立即完成。

第 6 行,告诉我们这个事务的大小是多少字节。请注意,这不是交易资金。

比特币是从哪里来的

第 7 到 11 行,这部分定义了这次交易的输入部分,准确的说,第 8 到 10 行告诉我们,要转移的钱的输入值是从上一次交易的输出值中获得的。那2007ae...是上一笔交易的十六进制哈希值,用来指向上一笔交易。n=0 表示它是最后一个交易中的第一个输出,我们稍后会看到多个输入和输出的样子,所以暂时不要担心。第 11 行是汇款人的数字签名:304502... 空格后是他的公钥:04b2d... 同样都是十六进制

值得注意的是,这里的输入部分并没有说明之前交易中的比特币有多少会流向后者。实际上,之前交易中 n=0 的输出中的所有比特币都被转移了。例如,如果上一笔交易中的第一个输出(n=0) 里面有 2 个比特币,那么这两个比特币都会花在这个新的交易中。这看起来不太方便,就像用20 美元现金。解决方案是提供一种改变机制,可以通过多种输入和输出来解决,这将在下一节中介绍。

第 12 到 14 行,这部分定义了交易的输出。具体来说,第 13 行告诉我们货币输出量,在本例中为 0.319 个比特币。第 14 行比较复杂,值得注意的是字符串 a7db6f... 是接收比特币的地址。这一行其实是比特币的脚本语言,脚本语言的细节这里不讨论。您只需要知道 a7db6f... 是要接收的地址。

现在,你可以看到比特币是如何解决我们前面提到的“序列号从何而来”的问题的。首先,比特币不是一个单独的“硬币”,而是存在于区块链中的一长串交易。通过保留交易分类账来实施比特币是一个聪明的主意。其次,通过这种方式,我们不需要中央机构来发布序列号。序列号可以通过哈希交易本身获得。

我们可以一路回到交易链。归根结底比特币是从哪里来的,有两种可能性。首先,您可能会到达第一笔比特币交易,该交易存储在一个区块中,我们称之为“创世区块”。这是一个特殊的交易,没有输入,只有 50 个比特币的输出。换句话说,它是最早的比特币供应。比特币客户端对创世块的处理方式不同,所以我不会在这里详细介绍。

往回看交易链的第二个结果可能是你到达了一个叫做“coinbase”的交易。除了创世区块,每个区块都以一个特殊的 coinbase 交易开始。该交易用于奖励矿工验证该区块中的交易。它使用与上面类似的数据格式,我不再赘述。如果您对 coinbase 交易感兴趣,可以阅读。

从上面的描述中不太清楚的是第 11 行中数字签名的具体内容。最明显的方法是让付款人对整个交易进行数字签名。现在它不这样做了,一些交易被忽略了。这使得部分事务具有可塑性,也就是说,它们可以在以后进行修改。但是,这种可塑性内容不包括交易数量、付款人和收款人。可塑性的问题在比特币社区已经讨论过很多了,也有人想取消,这里不再赘述。

比特币是从哪里来的

具有多个输入和输出的事务

在上一段中,我们讨论了只有一个输入和一个输出的交易数据。事实上,大多数比特币交易都有多个输入或多个输出。我们先来看看这个交易的原始数据

1. {"hash":"993830...",
2. "ver":1,
3. "vin_sz":3,
4.  "vout_sz":2,
5.  "lock_time":0,
6.  "size":552,
7.  "in":[
8.    {"prev_out":{
9.      "hash":"3beabc...",
10.        "n":0},
11.     "scriptSig":"304402... 04c7d2..."},
12.    {"prev_out":{
13.        "hash":"fdae9b...",
14.        "n":0},
15.      "scriptSig":"304502... 026e15..."},
16.    {"prev_out":{
17.        "hash":"20c86b...",
18.        "n":1},
19.      "scriptSig":"304402... 038a52..."}],
20.  "out":[
21.    {"value":"0.01068000",
22.      "scriptPubKey":"OP_DUP OP_HASH160 e8c306... OP_EQUALVERIFY OP_CHECKSIG"},
23.    {"value":"4.00000000",
24.      "scriptPubKey":"OP_DUP OP_HASH160 d644e3... OP_EQUALVERIFY OP_CHECKSIG"}]}

和之前一样,我们逐行解释,和之前大体相同。

第 1 行,交易的哈希值,用作该交易的唯一代币。

第 2 行,比特币协议的版本,版本 1。

3、4 行表示本次交易有 3 个输入和 2 个输出。

比特币是从哪里来的

第5行,锁定时间(和之前一样)。

第 6 行,事务的大小(以字节为单位)。

第 7 到 19 行定义了所有输入,每个输入对应于前一个交易的输出。第一个输入是第 8 到 11 行。它的内容格式和之前一样。第二个输入是第 12 到 15 行,第三个是第 16 到 19 行。

第 20 到 24 行定义了所有输出。第一个输出是第 21 和 22 行。和之前一样,第 21 行表示其中有 0.01068 个比特币。第 22 行是比特币的一段脚本语言。字符串 e8c30622... 是收件人的地址。第二个输出是第 23 行和第 24 行,格式与上述相同。

奇怪的是,虽然每个输出都记录了比特币的数量,但输入却没有。当然,每个输入可以从之前的交易中获得多少比特币。在普通的比特币交易中,所有输入值之和大于多个输出(除了刚才提到的创世区块和coinbase交易),如果输入之和大于输出,则多余的比特币将用作交易费用,提供给交易所所在区块的矿工。

多个输入和输出的作用是提供变化。假设我想给你 0.15 个比特币。我可以花掉我之前收到的 0.2 个比特币。当然,我不想给你全部0.2,所以解决办法是,我给你发0.15个比特币,然后把0.@发到我自己的另一个比特币地址> 05 比特币。所以,0.05 是我的改变。这个概念与您在真实商店中获得的更改并不完全相同,这更像是您自己付钱。但大致意思是一样的。

结语

比特币是从哪里来的

甚至描述了比特币背后的基本概念。当然,我也遗漏了很多细节——这毕竟不是官方手册。但我想描述的是比特币背后的一般使用概念。

虽然比特币背后的规则简单易懂,但这并不意味着这些规则将产生的所有可能结果也很容易理解。关于比特币还有很多可以说的,我将在以后的文章中讨论。但现在,让我做一些零碎的总结。

比特币有多匿名?很多人说比特币可以匿名使用。这种说法是在丝绸之路等黑市中形成的。然而,这种说法是虚构的。区块链是公开的,这意味着任何人都可以看到所有比特币交易。虽然比特币地址并不直接对应于现实世界的身份,但计算机科学家已经做了大量工作来破译“匿名”社交网络。区块链对他们来说是一个很好的目标。在不久的将来,如果大多数比特币用户的身份无法相对自信地识别出来,我会感到非常惊讶。这种识别不一定会被完全确认,但提供一个高概率的目标就足够了。此外,身份将是可追溯的,这意味着 2011 年在丝绸之路上贩卖毒品的人在 2020 年仍然可以在区块链上找到。这些反匿名技术为计算机科学家所熟知,甚至可以说是 NSA(国家安全局)。如果 NSA 或其他机构取消了许多用户的匿名性,我不会感到惊讶。比特币被吹捧为匿名的想法有点滑稽。它不是匿名的,相反,比特币可能是迄今为止世界上最开放、最透明的金融工具。

你能用比特币发财吗?也许,蒂姆·奥莱利(Tim O'Reilly)曾经说过“金钱就像汽车里的汽油——你需要注意,否则你会被困在路边——但生活不会围绕加油站转!” 兴趣似乎来自那些生活目标只是找到一个大加油站的人。我必须承认,这个令人困惑。我相信将比特币或其他数字货币视为塑造新的人类合作行为的工具会更有趣和令人愉快。它在智力上令人着迷,它提供了巨大的创新潜力,具有社会价值,而且还可以赚钱。但如果赚钱是你的主要目的,那么我相信还有其他更简单的方法可以成功。

我遗漏的细节:虽然本文描述了比特币背后的主要概念,但我没有提到很多细节。其中之一是协议中节省空间的巨大技巧,基于称为 Merkle 树的数据结构。这就是细节,但如果你喜欢数据结构,这是一个非常棒的细节,非常值得一试。您可以从比特币白皮书中获得概述。其次,我几乎没有提到比特币网络——一些问题是,例如,网络如何处理被拒绝的服务器攻击、节点如何加入和离开网络等。这是一个有趣的话题,但也有很多细节,所以我在这里忽略它。您可以通过上面的一些链接了解更多信息。

比特币脚本:在本文中,我将比特币解释为一种在线电子货币。但这只是一个更大、更有趣的故事的一小部分。正如我们所见,每笔比特币交易中都有一段比特币脚本语言。本文将脚本简化为“我,Alice,想给 Bob 10 个比特币”。但是脚本语言也可以用来表达更复杂的事务。换句话说,比特币是一种可编程货币。在以后的文章中,我将解释这个脚本系统以及如何使用比特币脚本作为平台来支持各种令人惊叹的金融产品。

如果觉得有帮助,建议给本文原作者 Michael Nielsen 打赏比特币是从哪里来的,地址为 17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ,也可以关注他的 Twitter。或者关注他即将出版的关于神经网络和深度学习的书的第一章。

文/杨烁(简书作者)

原文链接:

版权归作者所有,转载请联系作者授权,并注明“短书作者”