比特币和区块链
《比特币白皮书》是一篇很短的论文, 只有12小段。 Satoshi Nakamoto发表于2008年10月31日。其中蕴含的思想在后来发展出了区块链。 白皮书很值得一看,是这个领域经典中的经典。这篇笔记从比特币白皮书中的视角开始展开,加入了一些对比特币网络相关实现细节的理解。 1. 比特币和区块链原理 比特币方案的目标是要实现点对点的电子现金,允许在线支付直接从一方发送到另一方,无需通过金融机构作为中介。 它要在一个点对点网络,去中心化的环境中解决如下几个问题: 如何确定电子现金是谁的?你只能花自己的钱,不能花别人的。 如何防止双花(就是上面邮件中的Double Spending)?你的一笔钱只能被花一次,不能趁记账还没完成,同时发起两笔交易,把一笔钱花两次。 如何发行货币,如何驱动网络自发运转。 这些问题在有金融机构做中介时候是很容易解决的,例如: 银行给客户开通账户,记录这个客户有多少钱,并给客户配置支付密码。 客户通过自己的密码在银行做认证,证明是本人后,支付全部或部分金额。 花钱的时候,银行会实时变更客户的账户余额。这样越花越少,不存在一笔钱花了两次的可能。 货币发行和整个系统运转都是通过金融机构。 在比特币系统中: 针对第一个问题,使用传统的非对称加密机制解决。比特币系统中每一个账户都关联一个公钥,用户使用私钥签名自己的交易。系统通过验证交易的数字签名来确定交易的合法性。 针对第二个问题,比特币系统提出了一种新方法。把交易打包进区块,进行哈希摘要,按照摘要把区块链接成一个分布式的不断增长的链状结构,链状结构能让大家对账本里面的交易的先后顺序有共识(形成Single Source of Truth),如果前面有交易已经花过一笔钱了,后面的交易想要再花这同一笔钱就无法被大家认可,不能上链形成共识。这种机制在比特币白皮书中第一次被提出来,后来被称作区块链。区块打包上链的工作是所有参与者分布式竞争完成的,在比特币中,采用POW(工作量证明)做共识算法。关于POW,下文挖矿环节有详述。 针对第三个问题, 货币发行和整个交易系统的运行都是通过矿工的挖矿行为来驱动。 比特币使用公私钥系统来解决用户认证的问题。 这个方案具有很强的隐私保护能力。 举个极端的例子,一个人可以在小黑屋里,在完全离线的环境下,用笔和纸生成一对公私钥,然后用公钥导出一个比特币地址。 只要把这个地址(例如:1J7mdg5rbQyUHENYdx39AWISME7fsLpEoXZy)发布出去,他就可以接受汇款了。 入账后, 只有小黑屋里的这个人可以操作区块链上的那笔钱(因为只有他有该比特币账户对应的私钥)。如果刻意隐瞒,比特币网络上的钱很难追踪到对应的人。当然,隐私在比特币和法币的转换过程中有可能泄漏。 上图示意比特币的区块链。图中Block2的Header里面,保存着Block 1 的Header的哈希值。 哈希值起到了指向链表中父节点指针的作用。 根据上链的先后顺序,Block2中的交易比Block1中的交易晚, Block3中的交易比Block2中的交易晚。 每一个区块(Block)中记录的交易放在区块体中, 对区块体中所有交易也做一次哈希,得到的值放到区块头里面(在Merkle Root域)。 通过区块链,保证了交易的先后顺序,也保证了区块链中形成共识的交易不可篡改(因为交易的哈希也存在区块头中,改变交易的内容会导致区块头里面的Merkel Root哈希值对不上, 如果把Merkle Root的值也改了,又会导致区块头的哈希值变化,区块头哈希值变化就会让区块本身从链表里面移除)。 The network timestamps transactions by hashing them into an ongoing chain of hash-based proof-of-work, forming a record that cannot be changed without redoing the proof-of-work. The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they’ll generate the longest chain and outpace attackers. — 比特币白皮书 ...