关于比特币

一、什么是比特币

          比特币是一种点子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出一种去中心化的点子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。

二、问题引入

          假设现在有4个人分别称之为ABCD,他们之间发起了3个交易,A转给B十个比特币,B转给C五个比特币,C转给D两个比特币。如果是传统的记账方式,这些交易会记录在银行系统中,我们相信银行不会随意添加、删除或修改交易记录,我们也不会关注到底有哪些交易,只会关注账户余额。但比特币的记账方式为ABCD每个人保存这样一份账本,账本上记录了上述交易内容,如果每个人的账本实时的一致,ABCD就不需要银行了。

          比特币是这样做的,每当有一个人发起一笔交易,他就要将一笔交易广播至全网,由全网中的某一个人,把一段时间内的交易打包好记录到一个区块上,再按照顺序把这些区块,一个一个的链在一起,进而形成了一个链条,这就是所谓的区块链。

                                                                    

          那么问题来了

          1、我凭什么要参与这个系统,我为什么要动用自己的计算机资源来存储这些信息呢?

          2、以谁的记录为准呢?比如上面的账单顺序,A用户可能是这个顺序,B可能顺序不一样,甚至可能B未收到C传给D转账                  的这个消息

          3、比特币如果做到支付功能,保证该是谁的钱就是谁的钱,而且只有所有者才能花。

          4、如何防伪、防篡改以及双重支付,防伪是验证每条交易的真的是某人发出的,如果B可能杜撰一条信息,说某某给我转了一笔钱,这就是一个假消息,或者B说我给某人转了多少钱,但是实际上他并没有转这么多钱,该怎么办。防篡改指的是B可能想从区块链上把自己曾经转给某人的钱的记录删掉,这样他的余额就会增加。双重支付是指,B只有10个比特币,他同时向C和D转10个比特币,造成双重花费。

三、为什么要记账

         因为记账有奖励,记账有手续费的收益,而且打包区块的人有系统奖励,奖励方案是,每十分钟生成一个区块,每生成一个区块会奖励一定数量的比特币,最开始是50个btc,过四年会奖励25个btc,再过四年再减半,以此类推。这样比特币的产生就会越来越少,越来越趋近于一个最大值,计算公式是:50*6*24*365*4*(1+1/2+1/4+1/8+...)≈ 2100万,其中最初奖励50个比特币,每个小时有6个区块,每天24小时,每年365天,前四年如此,之后没四年减半。

         此外,记账奖励还有每笔交易的小额手续费,每个交易发起都会附带一定的手续费,这些手续费是给记账的矿工的。

四、以谁为准?

          各个节点通过工作量证明机制来争夺记账权,他们计算一个很复杂的数学题,复杂到没有一个人可以用脑子算出来,他是基于概率的方法,矿工必须通过遍历、猜测和尝试的办法才能解开这个未知数。第一个计算出来的节点就是下一个区块的产生者。那么这个数学题到底难道哪里呢,下面详细介绍。

4.1 哈希函数

         哈希函数又被称为数字摘要活散列函数,它的特点是输入一个字符串,可以生成另外一个字符串,但是如果输入不同,输出的字符串就一定不同,而且通过输出的字符串,不能反推出输入。举个简单的例子,对1-100内的数模10,可以认为是一种哈希算法,比如98%10=8,66%10=6,98和66是输入,模10是哈希函数,8和6是输出,在这个模型中,通过6和8无法推断输入是66个98,因为还可以能是56和88,当然因为这例子比较简单,所以会出现哈希碰撞,即66和56的结果都是6,输出的结果相同。一个优秀的哈希函数,可以做到输出一定不同,哈希碰撞的概率几乎为0。常见的哈希需求有很多,比如MD系列和SHA系列等,比特币采用的是SHA256算法,即输入一个字符串,输出一个256位的二进制数。下面是程序运行的结果:

                                    

                                    

                                    

通过程序结果可以看出,输入的源信息不同,得到的结果也不同(为了方便,结果使用64位的16进制表示),即一个orange多了一个句号,也会产生截然不同的结果。同时,通过输出的十六进制字符串,也无法倒推输出。对于比特币,只要了解SHA256的功能即可。

4.2 挖矿原理

        首先介绍一下比特币每个区块的数据结构,每个区块有区块头和区块体两部分组成。

        区块体中包含了矿工搜集的若干交易信息,图中假设有8个交易被收录在区块链中,所有的交易生成一棵默尔克树,默尔克树是一种数据结构,它将叶子节点两两哈希,生成上一层节点,上一层节点再哈希,生成上一层,直到最后生成一个树根,称之为默尔克树,只有树根保留在区块头中,这样可以节省区块头的空间,也便于交易的验证。

        区块头中包含父区块的哈希,版本号,当前的时间戳,难度值,随机数和上面提到的默尔克树根。

                                                     

 

        假设区块链已经链到了某个块,有ABCD四个节点已经搜集了前10分钟内全网中的一些交易信息,他们选出其中约4K条交易,打包好,生成默尔克树根,将区块头中的信息,即发区块哈希+版本号+时间戳+难度值+随机数+默尔克树根组成一个字符串str,通过两次哈希函数得出一个256的二进制数,

        

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(关于比特币)