|
| 1 | +# 08-工作量证明 |
| 2 | + |
| 3 | +## 1 工作量证明(PoW,Proof of Work) |
| 4 | + |
| 5 | +为防止恶意攻击,节点需完成复杂计算任务(即“挖矿”)来证明他们的工作量。这是一种共识机制,确保只有合法的区块可被添入区块链。 |
| 6 | + |
| 7 | +第一代共识机制,比特币的基础,即“按劳取酬”,你付出多少工作量,就获得多少报酬。 |
| 8 | + |
| 9 | +网络世界里,劳动就是你为网络提供的计算服务(算力x时长),提供这种服务的全过程就是“挖矿”,能力越强获得越多。 |
| 10 | + |
| 11 | +## 2 PoW机制 |
| 12 | + |
| 13 | +主要是通过竞争记账的方式来解决区块链网络中各个节点的一致性问题,其原理: |
| 14 | + |
| 15 | +- 区块链中的每个节点都能自由参与数据处理,即打包区块 |
| 16 | +- 为保证网络中的各个节点能达成一致,PoW就规定,当一笔交易产生后,每一个想要记账的节点都需要依靠自己的计算能力与他人竞争、争夺记账的权利 |
| 17 | +- 最终,获得记账权的人,他所打包的区块会连接到区块链的链上,同时他处理的数据,也会被全网的其他节点记入各自的小账本中 |
| 18 | + |
| 19 | +PoW算法中最基本的技术原理是使用哈希法。假设求哈希值Hash(r),若原始数据为r(raw),则运算结果为R(Result)。 |
| 20 | +$$ |
| 21 | +R=Hash(r) |
| 22 | +$$ |
| 23 | + |
| 24 | + |
| 25 | +哈希函数Hash()的特性是,对任意输入值r,得出结果R,并且无法从R反推回r。 |
| 26 | + |
| 27 | +当输入的原始数据r变动1比特时,其结果R值完全改变。在比特币的PoW算法中,引入算法难度d和随机值n,得到以下公式: |
| 28 | +$$ |
| 29 | +R_d=Hash(r+n) |
| 30 | +$$ |
| 31 | +该公式要求在填入随机值n的情况下,计算结果Rd的前d字节必须为0。 |
| 32 | + |
| 33 | +由于哈希函数结果的未知性,每个矿工都要做大量运算之后,才能得出正确结果,而算出结果广播给全网之后,其他节点只需要进行一次哈希运算即可校验。 |
| 34 | + |
| 35 | +PoW算法就是采用这种方式让计算消耗资源,而校验仅需一次。 |
| 36 | + |
| 37 | +## 3 PoW模型 |
| 38 | + |
| 39 | +token每一笔交易都会通过广播的方式,把交易内容发送到所有的节点。 |
| 40 | + |
| 41 | +我们知道计算Hash值的时候是包含Data数据的,总不能一笔交易就是一个Block,所以比特币还有一些其他的规定。如每个区块至少包含500笔交易,每笔交易至少以250字节,每一个区块的大小上限是2MB等。 |
| 42 | + |
| 43 | +所以挖矿的过程就是启动挖矿软件,成为一个节点,能够接收到系统中交易的广播消息,为了得到记账权当收到500笔交易的时候就开始执行上面工作量证明过程的计算。 |
| 44 | + |
| 45 | +当计算出满足条件的Hash值时就广播告诉其他节点,如果是第一个完成的就会获得记账权,也会获得奖励。 |
| 46 | + |
| 47 | +当然,其他节点也会做一下验证,因为Block中有Nonce值,所以只需要做一次Hash计算就可以了,这让验证变得非常容易。 |
| 48 | + |
| 49 | +## 4 优点 |
| 50 | + |
| 51 | +### 省资源 |
| 52 | + |
| 53 | +不需要挖矿,不需要大量耗费电力和能源。 |
| 54 | + |
| 55 | +### 更去中心化 |
| 56 | + |
| 57 | +相对于比特币等PoW类型的token,更加去中心化,相比PoW算法的51%算力攻击,PoS需要购买51%的token,成本更高,没有攻击意义。 |
| 58 | + |
| 59 | +### 避免通货膨胀 |
| 60 | + |
| 61 | +PoS机制的加密货币按一定的年利率新增货币,可以有效避免紧缩出现,保持基本稳定。 |
| 62 | + |
| 63 | +## 5 缺点 |
| 64 | + |
| 65 | +POS会面临发token的问题,起初只有创世块上有token,意味着只有这个节点可以挖矿,所以让token分散出去才能让网络壮大,所以早期采取的是POW+POS,即第一阶段POW挖矿,第二阶段POS挖矿,后来ERC20合约token出现后,可以只存在POS的挖矿形式。 |
| 66 | + |
| 67 | +开发者作恶:纯PoS机制的token,只能通过IPO的方式发行,这就导致“少数人”(通常是开发者)获得大量成本极低的token,很有可能造成大面积的抛售。 |
| 68 | + |
| 69 | +币龄其实就是时间,一旦挖矿者囤积一定的token,很久很久之后发起攻击,这样将很容易拿到记账权。 |
| 70 | + |
| 71 | +矿工可囤积token从而导致货币流通困难。 |
| 72 | + |
| 73 | +POS面临的最严重的一个问题就是无成本利益问题,在PoS系统中做任何事几乎没有成本,比如在PoS系统上挖矿几乎没有成本,这也就意味着分叉非常方便。 |
| 74 | + |
| 75 | +## 6 比特币钱包 |
| 76 | + |
| 77 | +关于比特币钱包,有两个概念,一个是指"钱包应用"丹一个是指"存放私钥的文件"。我们只需要知道钱包中有密钥就可以了。 |
| 78 | + |
| 79 | +钱包可分两大类: |
| 80 | + |
| 81 | +- 第一类是非确定性钱包,就是一对密钥,密钥之间没有关联性 |
| 82 | +- 第二类是确定性钱包,所有的密钥都是由一个密钥生成的,这个密钥被称为钱包的种子sed) |
| 83 | + |
| 84 | +使用确定性钱包只需要记住种子就可以,通过相同的种子会生成相同的密钥 |
| 85 | + |
| 86 | +通过种子生成密钥的方式也有很多种,最常使用的就是树状结构 |
| 87 | + |
| 88 | +通过这种方式生成的钱包就是我们常用的HD 钱包(分层确定性钱包) |
| 89 | + |
| 90 | +## 7 钱包原理 |
| 91 | + |
| 92 | +生成助记词: |
| 93 | + |
| 94 | +1. 生成一个长度为 128~256 位 (bits) 的随机序列(熵) |
| 95 | +2. 取熵哈希后的前n位作为校验和(n=熵长度/32) |
| 96 | +3. 随机序列+校验和 |
| 97 | +4. 把步骤三得到的结果每 11 位切割 |
| 98 | +5. 步骤四得到的每 11 位字节匹配词库的一个词 |
| 99 | +6. 步骤五得到的结果就是助记词串 |
| 100 | + |
| 101 | + |
0 commit comments