区块链由区块和链组成,没有中心机构,一个新区块在接到链上之前,需要每个节点确认(达成共识)这个新区块内容是否合法,这个确认规则就是共识机制,目前主流有PoW和PoS两种共识机制。
PoW
工作量证明(Proof of Work),一种经济手段,要求请求资源方提供一些“工作”来证明它没有恶意,该工作需要花费一定资源。
比特币采用的是hashcash的工作量证明,它最初用作邮件过滤,假设发一封邮件需要计算1分钟得出证明,发1w封就需要计算1w分钟,1w分钟的计算量和需要的资源很大,增加垃圾邮件成本。
在比特币中,hashcash用来产生区块,在一个区块上链前,矿工必须完成工作量证明,但最后完成工作量证明成功记账的矿工只有一个。(为什么有矿工愿意干这个事,因为有每笔交易的手续费以及打包奖励)
矿工在进行工作量证明之前:
1. 收集广播中的交易信息
2. 检查每笔交易是否合规(溯源)
3. 打包验证通过的交易信息
4. 添加一个奖励交易(新区块的首个交易):给自己的地址增加比特币的交易。
之后就开始进行工作量证明:
1. 把上个块的hash值与当前区块交易信息hash处理
2. 生成一个随机数
3. 当随机数与第一步的字符串hash后,满足前置N个0时,就是正确的随机数,就获得了工作证明。
4. 如果随机数与第一步的字符串hash后,前N个数不是N个0时,就不是正确的随机数,更改随机数再次hash,直到结果满足前置N个0。
基于PoW共识机制的货币有比特币、以太坊币、莱特币等。
优点:人人参与、权力均等、少数服从多数。
缺点:算力浪费,矿场导致算力集中,交易实时性不高(一笔交易10分钟才能确认),存在51%攻击(即某矿池联盟占全全网一半以上算力,根据少数服从多数,则可随意修改交易记录)。
PoS
持有量证明(Proof of stake),每个持币人选举出一个节点,由该节点创造新区块并接在链上。
如果把PoW比作地主,那么PoS就可以理解为合作社。
持币人将币质押,得到出块权利,指定时间内打包交易并广播,得到验证后,新区块生成。
PoS共识机制有7个步骤:
1. 运行节点
2. 注册成为验证人
3. 质押Stake(赌注)
4. 选举验证人
5. 打包交易
6. 广播交易
7. 验证人确认
运行节点
运行节点软件成为链上的一个节点,可用于资产管理,维护区块链以获得奖励。
以NULS平台为例,利用NULS平台提供的模块可以实现跨链价值互换,新建链等,是一个提供可定制化服务区块链基础设施,可以理解为是一个框架或者区块链引擎,使用这个框架可以实现区块链的很多操作。
下载钱包:https://github.com/nuls-io/nuls-v2/releases
新建或导入钱包
然后就可以参与到共识任务,把挖矿权益委托给其他全节点,其他节点出块后给我分奖励,有个风险就是全节点可能会跑路。
注册成为验证人
成为验证人有很多要求,当满足要求时即可注册成为验证人。质押Stake
通过下载的钱包或节点,操作把币进行质押,币转换为:Staking(赌注)选举验证人
系统会从候选验证人列表选择出块人,以DPoS为例,出块人由用户投票得出。打包交易
出块人从交易池挑选交易并验证(交易合法性、签名、),然后打包到区块内。广播交易
出块人打包完后,把新区块广播到其他节点,其他节点验证这个区块是否正确,如果正确就加上签名再次广播,不正确则不广播。验证人确认
网络所有验证人都确认这个块没问题之后,这个块就会接到链上。
若验证人长期不在线或有其他不利于链条稳定的行为都会扣除验证人在系统里交的押金。
优点:节省算力资源,交易确认时间短。
缺点:币越多,持有时间越长,则奖励越多,不利于币流通。
PoS中的矿工
PoS中的矿工不必具有特别大的算力,只要在合适的时间完成工作就可以获得奖励。
要求:24小时在线,不能随意分叉系统,代表委托人的权益,参与所有的治理(链、货币稳定性和未来发展)。
资格:持币量要很高、委托量要高(Staking)、要锁仓一定量的币、服务器配置要高、在社区要有知名度。
DPoS
代理权益证明(Delegated Proof of Stake),每位持币人有权投票选出代理节点,得票最多的若干节点负责生成区块(验证和记账)。
资料
PoW共识机制介绍:https://krazymud.github.io/2018/10/21/pow/
POW共识机制与优缺点探讨:https://palette25.github.io/2018/10/20/BlockChain-POW-Introduction-and-Discussion/
PoS持有量证明:https://zh.wikipedia.org/zh-cn/持有量證明
PoS共识:https://github.com/wetez-project/pos-book
NULS文档:https://docs.nuls.io/zh/Guide/#nuls的愿景