比特币简介2

         比特币是一种点对点实现的电子现金系统,是一种去中心化的互联网通行的数字火币。

         比特币的诞生,基于互联网,分布式,p2p,时间戳证明和密码学等技术,这些技术基础催生了比特币和他特殊的生态。

         如果比特币是我们手里的现金,区块链就是一个账簿。每个人都有一个这样的账簿,记录比特币诞生以来的所有交易。区块链式的账簿是去中心分布式账簿。跟传统银行不同,银行是中心化的记账体系;比特币去中心化的账簿保存在每一个比特币用户的本地,每一个矿工作为一个节点去参与记账。

         比特币依靠区块链,解决的问题是:如何在不泄露隐私的前提下,发生安全的交易。这种加密技术叫做链式hash。

         银行用户交易需要提供身份证,密码,手机号码等隐私信息,比特币用户需要提供比特币地址。比特币地址是由用户的私钥生成,用户真正需要保存好的是自己的私钥。所以比特币使得用户可以匿名交易了。

 

         比特币交易。

        比如用户A需要向用户B付款1BTC,用户填入付款地址和付款金额后,确认。这笔交易会向全网广播,消息内容如这种格式:“我要向B付款1BTC,付款地址:1xxxxxxx”。

         交易需要由互联网上所有收到此条信息的矿工确认它的有效性,就是算账。这些矿工拼命计算一个不可预测的hash值,计算这个值需要一定的算力和运气。

         矿工把一段时间内的所有交易放入一个新生成的区块,整个网络每两周调整一次计算hash的难度,把生成区块的时间控制在十分钟。即使挖矿设备升级了,挖矿整体的效率并不增加。互联网算力除了一小部分外,其他的都浪费了。

          区块hash是以N个0为前导的,网络计算难度值决定了hash前导0的个数。

           矿工把计算结果迅速广播扩散,让全网进行确认。网上其他节点对该新区块验证,矿工连续验证了六个区块后,第一个区块的交易便被认为是不可更改的,也就是说确认交易有效的时间是6*10=60分钟。

          为什么要做这样的等待呢?因为互联网上不全是诚实的人,有些人试图进行“双重支付”的攻击。矿工总是延长并维护区块链中最长的一条,短期内允许区块链出现两个有效的分支,任何一条分支都可能成为最长链,这个决断的结果通常出现在下一个工作量被证明。比如用户A向用户B支付了10BTC,但是用户A又向C支付了这10BTC。A的交易就出现了不同的分支,一支是指向B的,我们叫分支B,一支是指向c的,我们叫分支C。如果A在分支C继续交易,分支c的区块链条加长,会使得全网确认分支c的区块,对分支B丢弃,不承认用户B收到10BTC。这里是一个算力的比拼,如果攻击者的算力达到全网的51%,那么他就可以篡改账簿了。 运用手中的算力,从自己对外付款交易之前的区块开始,忽略自己所有对外的付款交易,重新构造后面的区块,利用算力优势与全网赛跑,当最终创建的区块长度超过原主分支区块,成为新的主分支,至此,攻击完成,用户A收回了自己之前支付的比特币。但是当前互联网算力空前增长,算力想要超过全网的51%几乎是不可能的,当区块进行6次确认后,之前最初的交易就被认为不可再逆了。

 

         为什么矿工愿意付出cpu算力和电力去挖矿呢?

因为通过挖矿生成有效的账簿后,矿工凭空获得了25BTC的报酬。比特币协议规定,每四年新币的开采量减半,矿工的报酬到时也会减半。2009年的报酬50BTC,2012年25BTC,2016年某个时间后12.5BTC。比特币随时间增长,数量达到2100万枚的时候,它的总量不再增加,矿工可以收取交易的手续费作为报酬。比特币一开始就设计成总量不变,消除了人为会造成的通货膨胀和通货紧缩的问题。

 

         区块链。区块链是一个总账簿,包含自创世块创建以来的区块,这是一个有序的不断续接的链条。特点是不可更改,不可伪造。除创世块以外,其他的区块的头部都内嵌了父区块的哈希值。从任意的区块都可向后回溯,查找到创世块的位置。用户A向用户B支付10BTC时,可以根据区块所含的父hash,验证用户A的前一次交易是否含有这10BTC,这样通过链条追溯比特币的交易方式就保证了每一枚比特币都有迹可循。父区块发生改变时,hash值改变,子区块hash也改变,子区块的子区块的hash也会改变,如此类推,需要改变的链足够长时,耗费的计算量足够大,以至于不能更改,这确保了区块链的历史安全。

 

         Merkle树。Merkle树用来快速验证大规模数据完整性,最终生成这个区块所有交易信息的一个统一的hash值。一个区块中包含N笔交易,对每一笔交易都进行二次SHA256,最终获得merkle root,假如这N笔交易做任何修改,merkle root的值都将发生改变,这就是校验机制。

 

 

                                                                                     Merkle root

                                                                                              |

                                                                                              |

                                                                                            /   \

                                                                                         /         \

                                                                                      HAB     HCD

                                                                                        / \               / \

                                                                                      /     \            /     \

                                                                                  HA     HB    HC   HD

 

hash伪代码如下:

def Hash(x):
          exchange= SHA256(SHA256(x))
return exchange

Merkle树算法复杂度为: log2(N)

 

         找零机制。比特币的交易中有两个现象。交易双方的一次交易,可能使用一个以上的地址进行付款收款,多个地址付款,多个地址收款。比特币交易100次以上后,应当重新备份钱包,否则恢复从前的钱包备份,可能遭受损失。

         这背后的原因就是找零机制的作用。找零机制规定,当前地址需要支付的金额不足时,可以选用其他地址发送差额。比特币客户端一开始只产生100个客户专属地址的私钥,在创建找零地址时会优先使用这100个地址中的某一个,但当这些地址都被使用之后,100个以外新的找零地址就会被创建。如果你只备份了一开始的100个地址的钱包,那么在上面这种情况下恢复钱包将丢失新的找零地址。

 

         无论是现金交易还是比特币交易,需要解决过程中的问题:交易发起人是真的吗?这笔钱真实存在吗?

         其实在前面都讲到了这两点。付款人A需要对账单用私钥签名,收款人B用A的公钥验证。签名机制保证A不能抵赖。

         验证交易的可行性,不是验证该次交易余额,而需要依次向后验证每一次交易。交易是有N个输入和M个输出。输出的比特币从前次交易的输入得来,利用交易的hash值追溯到没有输入的源头,就确定是否存在这一笔比特币。这个源头就是矿工挖矿所得的报酬。

 

 

 

你可能感兴趣的:(比特币简介2)