区块链与挖矿
区块链是一种链式数据结构,由包含交易信息的区块通过哈希指针、根据时间顺序连接而成,也是一种分布式数据库。区块是区块链的主要组成部分,每个区块由区块头和区块内容数据构成。区块头主要由上一个区块的哈希值、区块体的哈希值、4 字节的随机数(nonce)等组成的。区块包含的交易数据,其中的第一笔交易是 Coinbase 交易,这是一笔激励矿工的特殊交易。
分布式在线记账 —— 每个国家的钱是由各个国家自己发行的,且不允许个人或企业伪造货币。由于国家的中心化管理,所以不会出现伪造货币的情况,从而保证了货币数目的稳定。而对于比特币这样去中心化的货币系统,为了维持货币数目和价值的稳定,必须要确保货币交易记录能被全部节点所认可,所以才有了共识算法。另外,比特币系统设置的总量 2100 万个比特币,并不是完全凭空出现的。
由于区块链记录了所有历史的交易,所以一个人也不能突然冒出来一笔横财,只能通过“挖矿”来赚取比特币。
“挖矿”的目的:
- 首先验证交易的有效性。当进行了货币交易时,需要所有节点认同,那么其他节点(或称为矿工)需要验证这个交易的有效性。若交易有效,才能创建一个区块将这个交易记录下来,也就是节点都认可这个交易。
- 共识算法与奖励机制。为了避免对交易的篡改和伪造,需要一个共识算法让大家同意。同时又为了提供激励制度(没钱赚为啥帮别人存交易记录,此处排除货币的升值价值),规定所有节点需要根据历史区块和当前区块等信息去解决一个复杂的数学问题,若某个矿工将问题解决出来,广播给其他节点,其他节点验证并认可这个解决答案,那么这个矿工就会获得一定的货币激励。
- 构建区块链。除此之外,矿工广播的时候也会将新区块进行广播,其他节点验证没问题后就会将区块存储下来。
区块链攻击有很多种,例如:
- 51% 攻击:当一个实体或一组合谋的实体控制了超过网络总算力的 50%,他们就可以对交易历史进行篡改,阻止新交易确认,甚至双花(双重支付)。
- 双花攻击:攻击者尝试将同一笔资金花费两次。在 PoW 系统中,这通常通过创建一个与主链竞争的私有分支来实现;而在 PoS 或 DPoS 系统中,则可能涉及贿赂验证者或其他形式的操纵。
- 自私挖矿:这是一种特定类型的 51% 攻击变种,其中一小部分矿工选择不立即公开他们找到的新区块,而是私下构建一条更长的链,然后再突然发布这条链以取代现有的公共链。可以理解为在某个时刻开始,这个矿工开了一个新 git branch,然后进行了非常多的 commit,然后在某个时刻这个矿工广播当前分支说这是 master 分支。根据区块链的约定,节点要接受更长的链,丢弃真正 master 分支中的数据。这种不需要 51% 的节点,攻击者就算 30% 算力,也可能连续计算出多个区块的哈希值,挖掘出更长的攻击链。
分布式共识意义
分布式共识就是解决例如比特币这种去中心化的共识问题。和 Raft 等算法不同的地方在于,节点或服务器里可能存在着恶意节点,需要避免恶意节点对于存储数据的篡改或伪造导致数据错误的情况,相似的情况有“拜占庭将军问题”。
分布式共识算法
PoW(Proof of Work)
- 算法原理
- 每个节点通过比较计算能力来获得其他节点的认可,即工作量证明机制的共识算法。
- 如何体现计算能力?
- 每个节点都去解一道题,谁能先解决谁的能力就强。对于比特币而言,这个难题要求矿工找到一个非负整数(称为“nonce”),使得当将这个 nonce 与当前待打包的所有交易信息以及前一区块的哈希值一起输入到哈希函数时,输出的结果必须小于一个预设的目标值(target)。目标值越小,难度越大。
- 达到共识的方式
- 广播新区块 + 计算结果,其他节点判断该节点找到的区块中的所有交易都是有效且之前未存在过的,则认为该区块有效,并接受该区块,达成一致。
- 奖励与激励
- 成功创建新区块的矿工会得到一定数量的新比特币作为奖励,这部分奖励包括区块奖励(新生成的比特币)和交易手续费(来自区块内每笔交易的附加费用)。
- 这种经济激励促使更多的人参与到挖矿活动中来,从而增强了整个网络的安全性和去中心化程度。
- 整个共识记账的过程
- 某个客户端产生新的交易,向全网进行广播,要求对交易进行记账。
- 每个记账节点接收到这个请求后,将收到的交易信息放入一个区块中。
- 每个节点通过 PoW 算法,计算本节点的区块的哈希值,尝试找到一个具有足够工作量难度的工作量证明。
- 若节点 A 找到了一个工作量证明向全网广播。当然,当且仅当包含在该区块中的交易都是有效且之前未存在过的,其他节点才会认同该区块的有效性。
- 其他节点接收到广播信息后,若该区块有效,接受该区块,并跟随在该区块的末尾,制造新区块延长该链条,将被接受的区块的随机哈希值视为新区块的随机哈希值。
- 缺点
- 每次达成共识需要全网共同参与运算,增加了每个节点的计算量;
- 如果题目过难,会导致计算时间长、资源消耗多;
- 如果题目过于简单,会导致大量节点同时获得记账权,冲突多;
- 因此共识达成的周期长、效率低,资源消耗大。
- 补充说明
- 比特币平台采用了 PoW 算法,属于区块链 1.0 阶段,其重心在于货币,比特币大约 10min 才会产生一个区块,区块的大小也只有 1MB,仅能够包含 3000 ~ 4000 笔交易,平均每秒只能够处理 5~7(个位数)笔交易。
- PoW 的容错机制,允许全网 50%的节点出错,因此,如果要破坏系统,则需要投入极大成本。
PoS(Proof of Stake)
- 算法原理
- 权益证明算法。由系统权益代替算力来决定区块记账权,拥有的权益越大获得记账权的概率就越大。
- 持币量决定权:在 PoS 系统中,节点(通常称为验证者或桩机持有者)通过质押一定数量的加密货币(即“权益”)来获得参与区块生成的权利。
- 随机选择:与 PoW 不同,PoS 并不要求矿工们竞争解决复杂的数学问题。相反,它根据每个验证者的权益比例随机选择一个或多个验证者来创建下一个区块。
- 达成共识的方式
- 不同的 PoS 实现可能采用不同的方法来选择验证者,常见的有以下几种:
- 随机数选择:基于区块高度或其他因素生成一个随机数,然后选择权益最高的验证者。
- 币龄选择:考虑每个账户中代币的持有时间(币龄),选择币龄较高的账户作为验证者。
- 组合方式:结合权益大小和随机因素进行选择,确保公平性和安全性。
- 不同的 PoS 实现可能采用不同的方法来选择验证者,常见的有以下几种:
- 奖励与惩罚机制
- 成功创建区块的验证者会收到一定的奖励,这些奖励通常来自新生成的代币以及区块内的交易手续费。
- 为了防止恶意行为,PoS 系统往往设有严厉的惩罚措施。如果验证者试图提交无效或欺诈性的区块,他们质押的权益可能会被部分或全部没收。
- 安全性与去中心化
- 抗 51% 攻击:由于需要大量的代币作为质押,发动 51%攻击的成本极高,这使得 PoS 网络更加安全。
- 降低中心化风险:相比 PoW,PoS 不依赖于专门的硬件设备(如 ASIC),因此理论上任何人都可以通过持有足够的代币成为验证者,从而促进了去中心化。
- 缺点
- PoS 算法中持币越多或持币越久,币龄就会越高,持币人就越容易挖到区块并得到激励,而持币少的人基本没有机会,这样整个系统的安全性实际上会被持币数量较大的一部分人掌握,容易出现垄断现象。
- 其他
- 以太坊平台属于区块链 2.0 阶段,在区块链 1.0 的基础上进一步强调了合约,采用了 PoS 算法。
DPoS(Delegated Proof of Stake)
- 算法原理
- 委托权益证明。股份制公司的董事会制度,股民投票选举代表(受托人)代他们做决策。
- 超级代表(Witnesses 或 Block Producers):在 DPoS 系统中,网络用户通过投票选出一组受信任的节点,这些节点被称为“超级代表”或“区块生产者”。超级代表负责生成新区块并验证交易。
- 权益质押:用户需要持有并质押一定数量的加密货币(即“权益”),以获得投票权。通常用户权益越多,投票权重就越大。
- 投票机制
- 持续投票:用户可以随时更改他们的选票,这意味着超级代表必须保持良好的行为和服务质量,否则可能会被投票出局。
- 动态调整:根据得票数的变化,超级代表的数量和具体成员也会相应地动态调整。这种机制确保了网络始终由最受欢迎和最值得信赖的节点来维护。
- 达成共识的方式
- 轮流生产区块:当选出的超级代表按照预定的时间表轮流生产新区块。每个超级代表都有固定的时间窗口(通常是几秒钟)来创建一个新区块。
- 快速确认:由于只有有限数量的超级代表参与区块生产,因此 DPoS 可以实现非常快速的区块时间和低延迟的交易确认。
- 最终性:在某些实现中,DPoS 还提供了即时最终性,即一旦某个区块被添加到链上,它就不会再被逆转或更改。
- 奖励与惩罚机制
- 为鼓励用户积极参与投票以及超级代表履行职责,会提供一定的经济激励,例如新生成的代币或交易手续费。
- 如果某个超级代表未能按时生产区块或表现出恶意行为,它可能会失去其地位,并且相关的权益也可能受到惩罚。
- 优点
- 高效节能:相比 PoW 和传统 PoS,DPoS 显著降低了能源消耗,因为它不需要大量的计算资源来进行挖矿。
- 高吞吐量:由于减少了参与区块生产的节点数量,DPoS 能够支持更高的 TPS(每秒交易处理量)。
- 更好的用户体验:快速的交易确认时间和较低的费用吸引了更多的普通用户参与到区块链应用中来。
- 缺点
- 中心化风险:虽然理论上任何人都可以成为超级代表,但实际上权力往往集中在少数几个大型持币者手中,这可能导致一定程度上的中心化。
- 安全依赖于投票过程:系统的安全性在很大程度上取决于投票过程的有效性和公正性。
- 无利害关系问题(Nothing at Stake Problem):类似于 PoS,DPoS 也面临这个问题,即验证者可能会尝试支持多个分叉以最大化收益。不过,一些实现已经采取了额外的安全措施来缓解这一问题。