区块链学习(一)比特币和区块链的原理
比特币诞生的背景
08年发生了全球性的金融危机,引发了货币贬值,金融行业爆出了严重的信用问题,导致了民众对政府发布的法币失去了信任,比特币在这个时候横空出世,作为发行总量恒定的币种,对抗法币的存在,可以说是一个非常理想的工具。
什么是数字货币
一般来说我们提到的数字货币主要是密码货币,支付宝,银行卡可以被称为电子货币,对应的事法币,跟数字货币有本质的区别。
以下从几个方面对比数字货币和电子货币:
- 定价方式
电子货币由主权货币定价,数字货币由自身价值定价,价格波动较大
- 发行
电子货币由央行决定发行,数字货币由算法决定发行总量,算法确定的情况下,币是无法超发的。
- 价值属性
电子货币受到货币政策的影响,数字货币由供需关系决定价值
- 记账
电子货币需要多个账本进行对账,数字货币的账本只有一份
- 流通性
电子货币信息和资金分离,采取的是先记账,再分配资金的方式,数字货币信息和资金合一
涉及数字货币的核心难题:防伪和双花
防伪主要指身份的真实性,和载体的真实性,比如在纸质的货币中,需要鉴别纸质钞票是否是伪造的
双花主要是指同一个货币被同时支付给不同的对象,这个在使用纸质货币中就不会存在这个问题,在电子货币中,有中心化的记账机构–银行来冻结交易的资金,保证同一笔钱不会被支付两次,但是在去中心化的世界里,并不存在一个中心化的机构,解决这样的问题就比较复杂。比如a给b支付了一笔数字货币,在系统没确认前没办法组织a把这笔钱支付给c。如果系统设计的不好就会出现灾难性的问题。
比特币的技术原理
几个名词的介绍:
1.节点
代表的是安装了比特币客户端的计算机,也叫矿机
2.旷工
以挖矿为目的的参与比特币网络的叫做旷工
3.用户
只有转账需求的叫做普通用户
比特币的原理
-
防伪方案
比特币采用非对称加密算法,私钥只有本人知道,公钥是公开的,一段加密信息,只有通过对应的公钥才能获得对应的原文,利用这种特性,一个用户要发送转账消息时,其他节点得到这个消息,就可以用该用户的公钥进行解密,如果能够解开,则证明这个消息确实是这个用户发送的。因为只有他有这个私钥。所以在区块链系统中,这个私钥非常重要,一旦丢失,则你就不是你自己了。就会丢失这个私钥对应的所有资产。
-
记账方案
在传统的金融系统中,用户首先要在银行开一个账户,资金的转入转出都需要和账户关联
在比特币系统中则使用的是utxo交易模型,翻译为中文是未消费的交易输出
简单解释下这个utxo的交易模型,我有2个比特币,给张三转了0.2个比特币,则使用utxo记账模型,输出为三个部分,张三得到0.2个比特币,我剩余1.7个比特币,旷工得到0.1个比特币(这部分不会在区块链网络中显示),在整个比特币区块链网络中,源头都来自挖矿奖励,末尾则是当前未消费的交易输出。所有的未消费的交易输出,即整个网络的utxo
-
区块结构
单个区块(block)是由以下部分组成
1.版本信息
2.随机数
3.前一个区块的hash
区块是以链式结构存储,这就表示,如果有一个区块被篡改,他后面的所有区块都需要被改掉,而且,在所有节点中的记录都需要被修改才能做到,这几乎是不可能的事情。
4.时间戳
5.merkle
这个值是这个区块里所有交易的hash,他的运算过程是一个树状图, 最底层叶子节点代表所有交易的hash值,每两个hash在进行运算得到一个hash,再运算,依次往上得到最后一个根节点hash就是merkle的值。
这种特性就表示任何一个交易记录被篡改,都会导致最终的根节点hash值改变。
这种树形结构的好处就是在每个子树种都可以验证交易的真实性
6.交易数据列表
-
挖矿原理
节点收到用户的交易信息后,会放入自己的memory pool中,验证交易的真实性后就会把交易打包成区块,如果打包成功,就会把这个区块发送给其他节点,其他节点在收到这个区块后也会进行验证,如果确认没有问题就会将区块加入到区块链中,并从自己的memory pool中删除。就能获得奖励。
(pow工作量证明)
通过调整hash函数前面的0000000的数量来达到算力和挖矿的平衡,动态的调整挖矿的难度。
比特币存在的几个问题
1、资源消耗严重
因为采取了pow机制,这些算力被用来做工作量证明来保证比特币网络的安全性,有些人觉得纯属浪费,并没有实质性的价值。
2、算力垄断
如果有组织拥有庞大的算力,理论上超过51%,那么他就可以操纵主链,因为没有其他算力比他大,他的链是最长的。
3、分叉问题
由于网络延迟原因,区块链可能在不同节点上存在同一个节点后连接着不同区块的可能性,但是大部分情况下,这不是问题,在一段时间后,比特币网络会采用较长的链作为主链,各自节点会回到主链上挖矿。