当我们谈论比特币时,它实际上在不同的场景中有不同的参考。
比特币首先是一种数字加密货币。用户可以通过比特币网络进行比特币转账或商品结算,就像传统货币一样:
然而,比特币是一种基于密码学技术的虚拟货币。它没有实体,仅隐含在从发送者到接收者的交易中。接收者必须使用他持有的密钥来消费收到的比特币。
对于技术从业者来说,比特币还有一层额外的意义:比特币对应的是一个划时代的数字加密货币系统,它包括通信协议、激励机制、实现代码和承载网络:
事实上,比特币是密码学技术、分布式计算等领域数十年的巅峰之作。它不是第一个出现的数字货币,但它无疑是最成功的、洞察人性的虚拟产品。
区块链结构
比特币是一种特殊的数据库,只保存一种数据记录——交易,比如张三给李四转了几个币,或者李四给王五转了几个币:
一旦涉及到钱,大家都会变得谨慎起来。因此,交易记录最好能在技术上保证不被篡改,这样万一出了问题,旧账户可以撤销,这就要求账本必须是值得信赖的。
比特币采用特殊的数据结构区块链来保证交易的不可篡改。每个包含一批交易数据的区块也包含前一个区块的指纹:
在比特币中,块的指纹是使用密码学中常见的哈希函数来实现的。哈希函数可以将大块数据压缩成压缩表示,并且可以保证如果压缩表示不同,则对应的原始数据也不同。
例如,上图中,如果块12#被攻击者篡改,那么它的哈希结果将与块13#中保存的原始指纹不同,这使得识别被篡改块的任务变得容易,换句话说,篡改非常困难——攻击者必须同时修改12#之后的所有区块,才能确保指纹验证成功。
另一方面,如果攻击者直接篡改区块14(我们假设这是最后一个区块),那么这显然是可行的,因为它缺乏后续区块的保护。这就引入了比特币中常用的一个概念:一笔交易的确认数/。
一笔交易一旦被确认并打包成区块,其确认数为1,后续的每个区块都会将确认数加1。例如,对于上图中标记的交易,当链增长到区块14时,确认数将增加1。交易确认数为 3。
显然,交易的确认越多,攻击者篡改交易的可能性就越小。在比特币应用中,交易的接收者通常需要六次确认才能认为交易成功。
去中心化机制
与目前流通的任何法定货币不同,比特币是去中心化的。没有中央组织来管理比特币的发行和流通。因此,比特币网络是一个典型的P2P网络,每个(全)节点都有完整的区块链数据:
在这样的分布式计算环境中,如何保证新的交易在每个节点的区块链中一致更新是一个经典的分布式一致性问题——每个节点都可能提交新的交易,而不同的节点提交的交易也可能不同。以哪个节点为准?
解决这个问题的经典方法是(动态)选举一个决策者,其他节点复制决策者的行为,以避免节点之间的不一致。比特币的解决思路是一样的,但它采用抢答机制来动态选择获胜节点,获胜节点负责生产区块和打包交易——所有节点同时解决同一问题,而第一个获得结果的节点获胜并获得生产区块的权利,其他节点转而解决生产下一个区块的问题:
比特币给出的问题无法通过分析方法来解决。节点必须暴力地尝试解决所有可能的结果。由于获胜节点可以获得比特币奖励,因此节点的动机和行为与西方淘金的牛仔颇为相似。因此这个求解过程称为挖矿/。
理论上,每个节点都有获胜的概率,但显然,在相同的时间内,拥有强大计算能力的节点会比其他节点有更多的机会尝试,因此获胜的概率也更大——在这种应答机制下,计算权力取代了智能,这种依靠暴力解决问题来实现节点一致性的共识算法被称为工作量证明(Proof of Work)。