区块链入门
Bitcoin基础概念
区块链 = 区块 + 链
区块(Block)
首先需要了解一下区块的头部字段值含义:
Prev Hash
: 前一个块的 值, 如果是创世块,则为00000....00000
Merkle Hash
: 将一系列交易数据通过简单的算法变成一个汇总的Block Hash
: 区块哈希,一个区块的哈希没有记录在头部,而是对头部哈希,作为下一个块的Prev Hash
值Nonce
: 搭配POW,矿工通过不断猜测其值来使头部值(两次SHA256)的前缀达到几个
链(Chain)
可以发现,cur_block
通过头部的prev hash
来找到上一区块,进而找到第一个区块,我们把第一个区块称作创世块
如果攻击者想修改账本,例如如下图:
如果要篡改2
号块的信息,那么他需要修改3
号块的prev hash
,但是这又会导致 3
号块的block hash
改变,因此他又需要修改4
号块的prev hash
,以此类推…. 也就是他需要修改被篡改块的后继所有区块,但是由于采用**工作量证明(POW)**的方式来进行进行记账,这意味他需要掌握全网51%的算力才行。
交易
在比特币的世界中,假如 A 向 B 交易 2
个比特币,那么中间的两个问题:
- 怎么确定A有没有
2
个比特币? 这个好验证,大家一直查帐本呀,造不了假 - 怎么确定这个是
A
发的? 这就需要使用类似证书的公钥+私钥来解决了
私钥SK自己保存,通过私钥生成公钥PK(银行卡号),注意这个过程不可逆转。
即 : 公钥—– X —–>私钥 ; 私钥 ———-–> 公钥
A发送消息的时候,用私钥对信息进行签名,然后将公钥和签名消息发送给别人,那么接收方可以用公钥对信息解密验证,如果验证成功,那么就是成立的,大家也都认同这个转账消息。
挖矿原理
那么交易信息谁来记录呢?也就是谁来记账呢,也就是谁来打包新的区块并且接到前一个区块呢?
总不能白白干事吧,官方宣布:谁能记一笔账谁就有一笔奖金(bitcoin)~ , 这时候大家都踊跃报名成为记账者,那么产生有竞争,那么就必须挑选一名幸运儿记账了,怎么挑选呢?比特币使用了工作量证明(POW),具体原理:
- 用户打包好最近比特世界的交易记录,做成一个区块
- 不断尝试修改区块头部的
Nonce
字段,使得整个头部的哈希值前缀有X个0(X是官方规定的) - 谁先尝试出来,那么就说明
算力运气好。(这也解释了为什么会出现显卡难潮)
POW被称作共识机制,当然也有PoS共识机制,为了避免浪费计算机资源,通过保证金来对赌一个合法的块成为新区块,恶意参与者会没收其保证金,进而损失经济经济利益。这种全网1/3的资源才能左右最终结果
以太坊
待更新……