主页 > imtoken钱包app官方下载 > 比特币协议是如何工作的(第 2 部分)

比特币协议是如何工作的(第 2 部分)

imtoken钱包app官方下载 2024-01-13 05:15:10

@H_301_4@比特币

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

要使用比特币,您首先必须在计算机上安装一个。 为了让您更好地理解,下图是一个名为 的钱包的屏幕截图。 可以在左上角看到比特币的余额——0.06555555比特币,按照截图当时的成交价,接近70美元。 屏幕截图的右侧显示了他们存入 0.06555555 BTC 的最近两笔交易。

比特币合约单位_比特币合约期货交割日_比特币合约机器人

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

比特币合约期货交割日_比特币合约单位_比特币合约机器人

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

现在准备付款的人需要创建一个新的交易。 让我们看一下 0.319 比特币的真实转账。 下面差不多就搞定了,这里有3个变化:1)数据没有序列化; 2)为了更好理解,添加了行号; 3) hash数据中省略了一长串数字,只保留前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... 同样这两个都是16进制的

这里的输入部分值得注意的是,并没有说前一笔交易中的多少比特币会转给后一笔交易。 事实上,上一笔交易中n=0输出中的所有比特币都被转移了。 例如,如果前一笔交易的第一个输出(n=0)包含 2 个比特币,那么这两个比特币都将在新交易中花费。 这看起来很不方便,就像花 20 美元现金买一条面包一样。 解决方案是提供一种进行更改的机制,这可以通过多个输入和输出来完成,如下一节所述。

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

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

我们总是可以顺着交易链往回看。 归根结底,有两种可能性。 首先,您可能会看到第一笔比特币交易,它存储在一个区块中。 我们称这个块为“(初始块)”。 这是一笔特殊的交易,没有输入,只有 50 个比特币的输出。 换句话说,它是最古老的比特币供应。 比特币客户端对创世块的处理方式不同,这里不再赘述。

沿着交易链一直往回走的第二个结果可能是你到达了一个叫做“coinbase”的交易。 除了 Genesis 块之外,每个块都以特殊的 coinbase 交易开始。 该交易用于奖励验证该区块交易的矿工。 它使用的数据格式与上面类似,这里不再赘述。 如果你对 coinbase 交易感兴趣比特币合约机器人,可以阅读。

从上面的描述中不太清楚的是第 11 行中正在对什么进行数字签名。最明显的方法是让付款人对整个交易进行数字签名。 现在它不这样做了,一些交易被忽略了。 这使得部分交易具有可塑性,即它们可以在以后修改。 但是,这个可延展的内容不包括交易金额、发送方和收款人。 可塑性的问题在比特币社区讨论的比较多,也有人想取消,这里就不赘述了。

@H_301_4@ 具有多个输入和输出的交易

在上一段中,我们谈到了只有一个输入和一个输出的交易数据。 事实上,大多数比特币交易都有多个输入或多个输出。让我们来看看交易

1. {"hash":"993830...",2. "ver":1,3. "vin_sz":3,4.  "vout_sz":2,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"}]}

和之前一样,我们逐行解释,大部分和之前一样。

第一行,交易的哈希值,作为本次交易的唯一标识。

第 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 行,格式与上面相同。

奇怪的是,虽然每个输出都记录了比特币的数量,但输入却没有。 当然,每个输入可以从其上次交易中获得多少比特币。 在一次普通的比特币交易中,所有输入值的总和大于任何输出(除了刚刚提到的Genesis block和coinbase交易),如果输入的总和大于输出,那么超出的比特币将是作为交易手续费提供给本次交易所在区块的矿工。

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

@H_301_4@结论

描述了比特币背后的基本概念。 当然,我也忽略了很多细节——这毕竟不是一本正式的手册。 但我想描述的是普遍使用比特币背后的概念。

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

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

你能用比特币致富吗? 也许,Tim O'Reilly 曾经说过“金钱就像你车里的汽油——你需要集中注意力,否则你会被困在路边——但生活不是围绕着加油站转的!” 兴趣似乎来自那些生活目标只是找到一个大加油站的人。 我必须承认,这个令人困惑。 我相信将比特币或其他数字货币视为塑造新的人类合作行为的工具会更有趣、更愉快。 它具有理性魅力,并为创新提供了巨大的可能性。 有社会价值,也可能赚点钱。 但如果赚钱是你的主要目的,那么我相信还有其他更容易成功的方法。

我遗漏的细节:虽然本文描述了比特币背后的主要概念,但有很多细节我没有提到。 其中之一是协议中一个很好的节省空间的技巧,它基于一种名为 . 这是一个细节,但它是一个精彩的细节,如果您喜欢数据结构,非常值得一试。 您可以大致了解情况。 其次,我几乎没有提到——其中一些问题,比如这个网络如何处理被拒绝的服务器攻击、节点如何等等。这是一个有趣的话题,但有很多细节,所以我在这里忽略它。 您可以通过上面的一些链接阅读更多相关信息。

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

如果觉得对你有帮助,建议你给本文原作者打赏,他的地址是17ukkKt1bNLAqdJ1QQv8v9Askr6vy3MzTZ,你也可以关注他。 或者关注他即将出版的关于神经网络和深度学习的新书。

文/杨烁(简书作者) 原文链接:版权归作者所有。 转载请联系作者授权,并注明“简书作者”。