肖臻《区块链技术与应用》第十一讲:比特币核心概念重温:一文读懂私钥、交易、挖矿与网络现状
摘要:
经过对技术细节的深入探讨,我们有必要通过问答的形式,回顾和巩固关于比特币系统的一些核心概念与常见误区。本文基于北京大学肖臻老师的课堂回顾,系统性地梳理了关于比特币交易生命周期、私钥安全、挖矿机制以及网络宏观数据的关键知识点。文章将解答“收款方不在线能否转账?”、“私钥丢失与泄露该如何处理?”、“矿工能否抄袭别人的挖矿答案?”等一系列经典问题,旨在帮助读者构建一个更清晰、更扎实的比特币知识框架。
1. 交易的生命周期:从发送到确认
1.1 离线也能收款?—— 理解去中心化广播
问: 如果我想给某人转账,但对方当时不在线,交易能成功吗?
答: 完全可以,对方是否在线对交易的成功与否没有任何影响。
比特币的转账并非点对点的直接通信。当你发起一笔交易时,你是将这笔交易广播到整个比特币网络中。网络中的全节点会验证并接力传播这笔交易。一旦交易被矿工打包进一个区块并上链,它就永久地记录在了全网共享的公共账本上。收款人何时上线、何时打开钱包,都只是同步并“查阅”这本公共账本的过程,他会发现自己的地址下多了一笔可用的UTXO。
1.2 地址的诞生与发现
问: 一个节点有没有可能收到一笔交易,其收款地址是该节点前所未见的?
答: 完全可能,而且这是常态。
比特币地址的创建是一个纯粹的本地、离线过程。任何人都可以随时在本地生成一个公钥/私钥对,并通过公钥计算出对应的地址。这个过程无需向全网“注册”或通知任何人。只有当这个新地址第一次接收到比特币时,这笔交易被广播出去,全网的其他节点才会“知道”这个地址的存在。
1.3 “覆水难收”:无法撤销的交易
问: 如果转账时写错了收款地址怎么办?
答: 没有办法撤销。
比特币的交易一旦被广播并得到区块确认,就是不可逆的。
- 如果转给了另一个人: 你唯一能做的就是联系对方,寄希望于对方的道德品质,请他将钱退还给你。但这完全取决于对方的意愿,协议层面没有任何强制手段。
- 如果转给了一个不存在的地址: 这个“不存在”通常指一个没有对应私钥的地址。例如,有人为了在区块链上记录信息,将一个文件的哈希值伪装成一个地址并发起转账。由于没人拥有这个“地址”的私钥,这笔钱就成了“死钱”,永远无法被花费。这种做法会永久性地增大全节点的UTXO集合负担,因此是不被提倡的。
2. 私钥:绝对主权与绝对风险
2.1 私钥丢失:永恒的告别
问: 如果我账户的私钥丢失了怎么办?
答: 没有任何办法,这笔钱将永远无法被动用。
这与传统银行体验截然不同。银行卡密码忘了,你可以凭身份证去银行重置。但在比特币这个去中心化的系统中,没有中央机构,没有人能为你验证身份并重置“密码”。你的私钥是你对资产拥有所有权的唯一证明,一旦丢失,神仙难救。
2.2 私钥泄露:与黑客的时间赛跑
问: 如果我发现私钥泄露了(例如账户出现可疑交易)怎么办?
答: 唯一能做的,就是和黑客赛跑。
你无法像冻结银行卡一样“冻结”一个比特币地址,也无法更改它的私钥。任何掌握私钥的人都可以随时发起交易。因此,一旦发现泄露,你必须立刻创建一个全新的、安全的地址,并以最快的速度(可能需要支付更高的矿工费以求尽快打包)将旧地址上剩余的所有资金转移到新地址。这是一场纯粹的速度竞赛。
2.3 交易所的“托管”:便利与风险的权衡
许多用户将比特币存放在中心化的交易所中。在这种情况下,私钥实际上由交易所保管,用户通过传统的用户名/密码(通常加二次验证)来登录和操作。如果忘记密码,可以联系交易所客服,通过身份验证来重置。
但这带来了巨大的中心化风险。历史上,交易所被黑客攻击(如著名的“门头沟”Mt. Gox事件)、监守自盗、卷款跑路等恶性事件层出不穷。用户必须清醒地认识到,“Not your keys, not your coins”(不是你的私钥,就不是你的币),将资产托管给交易所,是以牺牲部分主权为代价换取便利。
3. 深入挖矿与脚本的“疑难杂症”
3.1 矿工能否“偷答案”?—— Coinbase交易的巧妙设计
问: 挖矿是在尝试大量的nonce值。如果一个矿工A找到了正确的nonce并广播了区块,另一个矿工B能否直接抄袭这个nonce,然后声称是自己挖到的?
答: 不能。
因为每个矿工挖出的区块都是独一无二且与其自身利益绑定的。
- 区块中的第一笔交易是Coinbase交易,其中包含了收款人地址,这个地址必须是矿工自己的地址,用以接收区块奖励和交易费。
- 如果矿工B想“偷”矿工A的答案,他必须将Coinbase交易中的收款地址改成自己的。
- 地址一改,Coinbase交易的内容就变了,这会导致整个区块的**默克尔树根哈希值(Merkle Root)**发生改变。
- 默克尔树根哈希是块头(Block Header)的一部分。块头内容变了,原来那个正确的
nonce
对于这个新块头来说就完全作废了。矿工B必须重新从头开始进行哈希计算。
因此,挖矿的答案(nonce)是与矿工自己的地址牢牢绑定在一起的,无法被抄袭。
3.2 OP_RETURN之谜:为何一个“注定失败”的脚本能通过验证?
问: 我们讲过,OP_RETURN
脚本会无条件返回错误,这样的输出是无法花费的。那么,一个创建了OP_RETURN
输出的交易,本身是如何通过网络验证的呢?
答: 这是一个关于验证时机的精妙细节。
交易的验证过程,是执行当前交易的输入脚本与它所花费的上一笔交易的输出脚本。OP_RETURN
指令是写在当前交易的输出脚本里的。
在验证当前这笔交易的合法性时,它的输出脚本根本不会被执行。只有在未来,当有人试图去花费这个带有OP_RETURN
的输出时,这个脚本才会被执行,并因返回错误而失败。因此,创建一个OP_RETURN
输出的交易是完全合法的,只是这个输出本身是“注定”无法被花费的。
3.3 交易费的归属:一个无需指明收款人的“小费”
问: 我发交易时支付的交易费,是如何指定给某个矿工的?我事先并不知道谁会挖到下一个区块。
答: 无需指定。
交易费是一个隐式的值,等于 总输入金额 - 总输出金额
的差额。任何矿工在打包这笔交易时,都有权将这个差额在自己的Coinbase交易中“认领”,支付给自己。因此,你支付的交易费是对整个矿工群体的激励,最终由那个幸运的、成功挖出区块的矿工获得。
4. 比特币网络数据快照
肖臻老师课程中展示的数据(截至2018年底)揭示了一些趋势:
- 网络规模: 无论是区块链总大小还是UTXO集合大小,总体都呈增长趋势。
- 挖矿中心化: 挖矿算力高度集中于少数几个大型矿池。
- 交易活动: 每日交易量和交易笔数与比特币价格波动高度相关。
- 区块容量: 尽管社区对1MB的区块上限争论不休,但数据显示,当时绝大多数区块并未被完全装满,平均每个区块的交易数量(约1500笔)远未达到理论上限(约4000笔)。
这些数据为我们理解比特币网络的实际运行状态提供了宝贵的宏观视角。