概念
比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
特征
优点
- 去中心化:比特币是第一种分布式的虚拟货币,整个网络由用户构成,没有中央银行。去中心化是比特币安全与自由的保证 。
- 全世界流通:比特币可以在任意一台接入互联网的电脑上管理。不管身处何方,任何人都可以挖掘、购买、出售或收取比特币。
- 专属所有权:操控比特币需要私钥,它可以被隔离保存在任何存储介质。除了用户自己之外无人可以获取。
- 无隐藏成本:作为由A到B的支付手段,比特币没有繁琐的额度与手续限制。知道对方比特币地址就可以进行支付。
- 山寨者难于生存:由于比特币算法是完全开源的,谁都可以下载到源码,修改些参数,重新编译下,就能创造一种新的p2p货币。但这些山寨货币很脆弱,极易遭到51%攻击。任何个人或组织,只要控制一种p2p货币网络51%的运算能力,就可以随意操纵交易、币值,这会对p2p货币构成毁灭性打击。很多山寨币,就是死在了这一环节上。而比特币网络已经足够健壮,想要控制比特币网络51%的运算力,所需要的cpu/gpu数量将是一个天文数字。
缺点
- 交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。
- 交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。
原理
账本如何验证
区块链中各个节点中账本的验证方式采用验证Hash值的方式(并不是采用交易记录,因为所有的交易记录是一个链条,验证的时候需要全部校验,验证的成本随着交易记录的增长会越来越高)。
Hash简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。Hash函数有几个特点:
- 同样的原始信息使用同一个Hash函数总能得到相同的摘要信息。
- 原始信息发生任何微小的变化都会造成摘要信息的面目全非。
- 摘要信息无法逆向推算出原始信息。
验证方式
- 最初,将序号为0的交易记录作为原始数据,使用Hash计算出hash值。
- 序号、时间戳、Hash值最为头部信息、序号为0的交易记录作为内容产生区块0。
- 当产生序号为1的交易记录之后,将序号为0的Hash值、序号为1的交易记录作为原始数据,使用Hash计算出序号为1的hash值。
- 使用同样的方式产生区块2,链接到区块0之后。
- 需要验证的时候,只需要验证最后一个区块的Hash值即可(原始信息发生任何微小的变化都会造成摘要信息的面目全非)。
交易正确性验证
交易的正确性基础是非对称加密,每一个账户对应一个公钥(也就是账户地址)、一个私钥(对应密码)。私钥通过运算可以计算出公钥,当公钥无法得到私钥。
交易记录格式只包含付款地址、收款地址和金额,并不含有任何个人信息。
验证过程
- 交易记录作为原始数据,计算交易记录的Hash值。
- 使用自己的私钥对交易记录的hash值进行签名,获取到签名信息。
- 将交易记录、签名信息广播到比特币网络中。
各个节点收到交易信息之后会进行验证,使用付款方地址(也就是公钥)对签名信息来计算得出交易记录的Hash值。
各个节点对交易记录进行Hash运算得到交易记录的Hash值,判断是否和之前的Hash值对比是否相等来判断交易的正确性。
矿机工作
- 收集广播中还没有记录账本的交易。
- 验证交易的正确性。
- 添加一笔给自己奖励的交易(挖矿奖励)。
- 计算Hash值。
- 将计算的Hash值广播出去,其他节点复制记账结果。
计算Hash值的过程中引入了随机数的概念,避免同一时间大量的节点计算出结果,增加工作量(计算出来的Hash值必须满足前几位为n个0)。
共识机制
解决问题:如果两个节点同时完成工作量证明(记账Hash操作),用谁的区块?
节点工作量只有在其他节点认同的情况下才是有效的。
规则:累计工作量最大的区块链(也就是延长最长链,最长链才是有效的)
举例说明:
- 节点A和节点B同时计算出#3458A和#2348B的交易记录Hash值,分别广播出去。由于网络延迟及其他问题可能会出现三种情况:1.只收到#3458A(A就是最长的链-主链)2.只收到#3458B(B就是最长的链-主链)3.#3458A和#3458B都收到(先收到的链为主链、另一条为备用链)。
- 当计算下一个节点的时候,再一次工作量验证,假如以B链作为主链的先计算出来,则会造成B链成为最长的链,广播出去进行同步。