目录
1.2 比特币的来源
1.3 比特币是什么
1.4数字签名
1.5不能篡改的区块链
1、是以区块链为底层技术的网络
2、区块链网络创造出来的价值载体
比特币创建之初,就把比特币的总量规定为2100万枚。可以防止央行为了调控经济而增发货币带来的问题。
比特币如何创造出来
从2009年1月份开始,系统每隔十分钟左右就会产生出50枚比特币(相当于传统银行的货币发行)。每个四年时间,系统出来的比特币会减少一半。到2140年,所有的比特币发行完毕。
从2009年1月份运转起来以后,系统里每隔十分钟产生50枚比特币。2012年11月比特币进行了第一次减半,系统里每隔十分钟产生25枚比特币。从2016年7月开始,系统每隔十分钟产生出12.5枚比特币。2020年5月开始,进入了第三个减半期,系统里每隔十分钟产生6.25枚比特币。系统里产生的比特币是为了奖励那个维护账本,首先获得记账权的那个人,即:奖励那个能够在账本里新增一页记账的那个人。
截至2020年2月份,系统中一共产生出1800+万枚比特币。
区块链是一个链式结构,由很多区块组成,每一个区块是一个数据储存单元。区块链中的第一个区块格式如下(是中本聪发明的):
摘要:一些哈希值(以后讲)
交易:记录这个区块里记载的而所有交易(从一个地址向另一个地址转让,类似与传统的把钱从一个账户转到另一个账户)。
比特币的三个特征:
一、目的:支付
购买商品,转账(由一个人支付给另外一个人)
二、形式:点对点,不需要中间人
点对点的转账方式,不需要任何的中间人
三、支付手段:就是比特币
在系统中一个人能给另一个人转账所使用的工具就是比特币。
综上,比特币既是基于区块链技术的一个电子支付系统,同时也是一个支付工具。
比特币最突出的特点就是不同于传统的转账系统,它是点对点的,不需要任何中间机构参与。
比特币用密码的方式创建信任,确保两件事情:
一、我的钱只能我花出去(如何保证,请看1.4数字签名)
二、及时记好每一笔账,避免篡改,避免双花(双花:同一笔钱因不当操作被重复使用)(如何保证,请看1.5不能篡改的区块链)
对称加密:开锁和关锁用同一把钥匙
非对称加密:开锁和关锁用不同的钥匙,密码学中将这两把钥匙叫做公钥和私钥
私钥:只能自己看到
公钥:所有人都可以看到
总是成对出现,可以用公钥加密私钥解密,也可以用私钥加密公钥解密。
公钥加密私钥解密:主要应用的情况是“防止信息在传输过程中被别人看到”
私钥加密公钥解密:主要应用的情况是“用于验证交易是私钥的拥有者发起”(私钥类似于转账时候的密码)
比特币中的数字签名用的就是私钥加密公钥解密这个概念。
数字签名的三个步骤:
1、生成私钥和公钥:generatekeys
私钥:私密,用于签名
公钥:公开,用于验证签名
2、生成数字签名:sign
数字签名是以私钥以及要加密的消息、合同或概念的内容给它签上自己的名字。生成数字签名需要私钥和对应的消息。
数字签名=SIGN(私钥,MESSAGE)
3、验证签名:verify
需要三方面的信息来验证这个签名:签名用的公钥、被签的内容以及这个数字签名来验证签名是否是私钥拥有者签署的
VERIFY(公钥,MESSAGE,数字签名)
地址就是公钥
一、哈希函数
哈希函数就是利用一种计算方法把任意形式的数据通过计算得到一个固定长度的值。
如下图,哈希函数就像一个漏斗一样,可以将任何形式的数据,包括文字、合同、数字、照片等通过哈希运算得到固定长度的值。
哈希函数【F(x)=y】两大特征:
1、已知y,很难知道x
2、两个不同的x得不到同一个y
比特币网络采用的哈希函数是SHA256,也就是说,得到的哈希值的长度一定是256位,并且值一定位于0~2^256-1之间。
哈希函数如何保证比特币这个点对点的电子现金系统记得账不被篡改?
记账的储存格式:
区块链是首尾相连的数据结构,每个区块是储存数据的单元,按照时间的顺序连在一起,每个区块主要有两个方面的内容:区块头和区块体。
每个区块的区块头中包含了上一个区块里面的所有信息。
区块头中的信息:
version:版本(现在使用的版本)
Previous block header hash:前一个区块头的哈希值
Timestamp:时间戳(该区块产生的时间)
Difficulty:难度
Nonce:找答案!
MerkleRoot:当前区块交易信息的哈希值
区块体中的信息:
交易信息(就是十分钟内新产生的交易的信息)
为什么说使用哈希函数记的账不会被篡改?
区块头中两个非常重要的信息,分别是:Previous block header hash和MerkleRoot。
由于哈希值和原始数据有一一对应的关系,可以把哈希值就想象成里面的原始数据。相当于Previous block header hash是前一个区块头里面的内容,MerkleRoot就是当前区块里的交易信息。这样,每一个区块的区块头就不仅记录了当前区块里所有新发生的交易,还记录了上一个区块里发生的交易。同理,上一个区块的区块头又和再上一个区块的区块头相连。综上,每一个区块的区块头都是指向了上一个区块的区块头。
如果新建一个区块链网络,从第一天开始记账,每天记个区块:第一天需要记的交易信息的内容是A,那么这个内容A就会记录在区块头里面(其实是A的MerkleRoot);第二天记第二个区块,里面新增加的交易信息内容是B,那么B会进入到这个区块的区块头,同时这个区块头中又有前一个区块头的哈希值Previous block header hash(里边包含了交易A的信息),所以第二个区块头中就会同时有A和B两个交易的信息。第三天记第三个区块,里面新增加了交易C,交易C的信息会进入到这个区块的区块头,同时这个区块头中又有前一个区块头的哈希值Previous block header hash(里边包含了交易A和交易B的信息),所以第三个区块头中就会同时有A、B和C三个交易的信息。综上,这就是为什么如果某个人暗中把区块A的交易信息改了,就会实时反映到区块C的内容中,所以就不能在其他人都不知道的情况下篡改交易信息A,因为所以人都在维护同样一个账本。这就是为什么哈希函数能够保证区块链里面所记录的区块不会在其他人不知道的情况下被篡改。
如何让交易速度更快?
这个问题指向了比特币的一个核心技术指标:区块的大小。比特币在设计之初规定,一个区块的容量是1MB。区块中记录了比特币网络里每十分钟新产生的交易,那么这1MB的容量可以记录下这是分钟内所有新产生的交易吗?
区块的大小限制了比特币交易的处理速度。在比特币价格上涨的时候,很多人交易比特币,使得很多交易不能被记录在区块里,造成了区块链网络的拥堵。比特币的核心开发者、相关利益方和一些用户对区块扩容方案产生了争执。
支持者:认为比特币就应该用于频繁的交易支付
反对者:认为区块扩容会使得整个区块链网络不安全。认为安全的网络是人人都能参与的网络,区块扩容使得每个区块储存记录的交易量大大增加,而维护区块链网络的节点需要存储的数据量就非常大,对硬件的设备要求非常高,会增加成本,从而使很多人不愿意参与,进而导致比特币网络的安全性下降。
在这种争执之下,2017年8月1号,比特币第一次出现了硬分叉,硬分出来的币叫做BCH(Bitcoin Cash),
硬分叉:Hard Fork指区块链使用的技术进行永久更改之后,所有的新区块和原来的区块产生的方式就会不同,旧版本不接受新版本创建的区块,从而导致一条新的链的产生。网络中支持旧的区块链的节点会继续维护旧的区块链,支持新的区块链的节点会去维护新的链,这样就从原来的一条链变成新老两条链。(比如word升级后,使用新版本无法打开旧版本,这就是硬分叉)
软分叉:区块链网络进行技术升级改造后,所有的用户和所有的社区开发者还是持续接受这个旧版本,没有新老两条链。