什么是工作量证明机制和权益证明机制(PoS)?

权益证明机制(PoS)是什么_百度经验
&&&&&&生活常识权益证明机制(PoS)是什么?听语音8821人看了这个视频返回暂停重播播放世界如此简单10条相关视频
百度经验:jingyan.baidu.com权益证明机制(Proof of Stake),简称POS,也称股权证明机制,类似于把资产存在银行里,银行会通过你持有数字资产的数量和时间给你分配相应的收益。同理,采用PoS的数字资产,系统根据你的币龄给你分配相应的权益,币龄是你持币数量和时间的乘积。比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。相较PoW(工作量证明机制),PoS存在2个优势。第一,PoS不会造成过多的电力浪费,因为PoS不需要靠比拼算力挖矿。第二,POS更难进行51%攻击。拥有51%币才能发起攻击,网络受到攻经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(0)已投票(0)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验00100热门杂志第1期房屋装修全攻略3377次分享第2期愚您同乐398次分享第9期实用房子装修攻略1579次分享第1期欢度春节 合家团圆278次分享第1期年货选购技巧589次分享◆请扫描分享到朋友圈PoS机制PoW背后的基本概念很简单:工作端提交已知难于计算但易于验证的计算结果,而其他任何人都能够通过验证这个答案就确信工作端为了求得结果已经完成了量相当大的计算工作。然而PoW机制存在明显的弊端。一方面,PoW的前提是,节点和算力是均匀分布的,因为通过CPU的计算能力来进行投票,拥有钱包(节点)数和算力值应该是大致匹配的,然而随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC矿机挖矿,节点数和算力值也渐渐失配。另一方面,PoW太浪费了。比特币网络每秒可完成数百万亿次SHA256计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值。当然,相对于允许世界上任何一个人在瞬间就能通过去中心化和半匿名的全球货币网络,给其他人几乎没有手续费地转账所带来的巨大好处,它的浪费也许只算是很小的代价。有鉴于此,人们提出了一些工作量证明的替代者。权益证明(Proof of Stake,PoS)就是其中的一种方法。权益证明要求用户证明拥有某些数量的货币(即对货币的权益),点点币(Peercoin)是首先采用权益证明的货币,尽管它依然使用工作量证明挖矿。PoS的应用点点币在SHA256的哈希运算的难度方面引入了币龄的概念,使得难度与交易输入的币龄成反比。在点点币中,币龄被定义为币的数量与币所拥有的天数的乘积,这使得币龄能够反映交易时刻用户所拥有的货币数量。实际上,点点币的权益证明机制结合了随机化与币龄的概念,未使用至少30天的币可以参与竞争下一区块,越久和越大的币集有更大的可能去签名下一区块。然而,一旦币的权益被用于签名一个区块,则币龄将清为零,这样必须等待至少30日才能签署另一区块。同时,为防止非常老或非常大的权益控制区块链,寻找下一区块的最大概率在90天后达到最大值,这一过程保护了网络,并随着时间逐渐生成新的币而无需消耗大量的计算能力。点点币的开发者声称这将使得恶意攻击变得困难,因为没有中心化的挖矿池需求,而且购买半数以上的币的开销似乎超过获得51%的工作量证明的哈希计算能力。权益证明必须采用某种方法定义任意区块链中的下一合法区块,依据账户结余来选择将导致中心化,例如单个首富成员可能会拥有长久的优势。为此,人们还设计了其他不同的方法来选择下一合法区块。
区块链共识机制浅谈
以太坊的POS共识机制(二)理解 Serenity :Casper
[区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得
Pow,Pos,Dpos共识机制比较
POS--权益证明机制
没有更多推荐了,讲讲工作量证明机制、权益证明机制讲讲工作量证明机制、权益证明机制每日币看百家号在区块链系统当中,没有一个像银行一样的中心化记账机构,保证每一笔交易在所有记账节点上的一致性,所以让全网达成共识至关重要。共识机制解决的就是这个问题。目前主要的共识机制有工作量证明机制、权益证明机制、授权股份证明机制和Pool验证池。工作量证明(Proof of Work,简称POW)是共识机制的一种,可简单理解为一份证明,证明你做过一定量的工作,即我通过查看工作结果就能知道你完成了指定量的工作。PoW通过评估你的工作量来决定你获得记账权的机率,工作量越大,就越有可能获得此次记账机会。比特币挖矿采用的就是工作量证明机制,比特币网络通过调节计算难度,保证每次竞争记账都需要全网矿工计算约10分钟,才能算出一个满足条件的随机结果,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储。工作量证明就是指,如果矿工找到了一个满足条件的结果,我们便可以认为全网矿工完成了指定难度系数的工作量。获得记账权的几率取决于矿工工作量占比全网的比例,如果占比30%,那么获得记账权的几率也是30%。所以提高工作量占比才能提高竞争力,才能获得更多新诞生的比特币!优点:完全去中心化,节点自由进出。缺点:目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用。权益证明机制(Proof of Stake,简称POS)也称股权证明机制,Pow的一种升级共识机制,类似于把资产存在银行里,银行会通过你持有数字资产的数量和时间给你分配相应的收益;PoS通过评估你持有代币的数量和时长来决定你获得记账权的机率。这就类似于股票的分红制度,持有股权相对多的人能够获得更多的分红。同理,采用PoS的数字资产,系统根据你的币龄给你分配相应的权益,币龄是你持币数量和时间的乘积。比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。相较PoW(工作量证明机制),PoS存在2个优势。第一,PoS不会造成过多的电力浪费,因为PoS不需要靠比拼算力挖矿。第二,POS更难进行51%攻击。因为拥有51%币才能发起攻击,网络受到攻击却会造成自己利益受损,显然很不划算。优点:在一定程度上缩短了共识达成的时间。缺点:还是需要挖矿,本质上没有解决商业应用的痛点。目前,有很多数字资产用PoW发行新币,用PoS维护区块链网络安全。股份授权证明机制,简称DPoS,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。为了激励更多人参与竞选,系统会生成少量代币作为奖励。比特股、点点币等数字资产都采用该方式。DPoS有点像议会制度或人民代表大会制度。如果代表不能履行他们的职责,比如轮到他们记账时,他们没能完成则会被除名,网络会选出新的节点来取代他们。DPoS的每个客户端都有能力决定哪些节点可以被信任。相较PoW(工作量证明机制),DPoS大幅提高区块链处理数据的能力,甚至可以实现秒到账,同时也大幅降低维护区块链网络安全的费用,从而使数字资产的交易速度接近Visa等中心化结算系统。概括来说,DPOS与POS原理相似,只是选了一些“人大代表”。 与PoS的主要区别在于节点选举若干代理人,由代理人验证和记账。优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。缺点:整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。Pool验证池,基于传统的分布式一致性技术,加上数据验证机制;是目前行业链大范围在使用的共识机制。Pool验证池的概念被广泛的应用在服务器端软件的开发上。使用池结构可以明显的提高你的应用程序的速度,改善效率和降低系统资源的开销。所以在现在的应用服务器端的开发中池的设计和实现是开发工作中的重要一环。我们可以简单的想象一下应用运行时的环境,当大量的客户并发的访问应用服务器时我们如何提供服务呢?我们可以为每一个客户提供一个新的服务对象进行服务这种方法看起来简单,在实际应用中如果采用这种实现会有很多问题,显而易见的是不断的创建和销毁新服务对象必将给造成系统资源的巨大开销,导致系统的性能下降。针对这个问题我们采用池的方式。池可以想象成就是一个容器保存着各种我们需要的对象。我们对这些对象进行复用,从而提高系统性能。从结构上看,它应该具有容器对象和具体的元素对象。从使用方法上看,我们可以直接取得池中的元素来用,也可以把我们要做的任务交给它处理。优点:不需要代币也可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础上,实现秒级共识验证。缺点:去中心化程度不如bictoin;更适合多方参与的多中心商业模式。随着技术的发展,未来可能还会诞生更先进的共识机制。小编和大家一起拭目以待!本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。每日币看百家号最近更新:简介:今日知识今日币!勿将今事待明日!作者最新文章相关文章共识机制-权益证明 PoS
什么是权益证明
权益证明( Proof of Stake,PoS )最早在2013年被提出,并在 Peercoin 系统中实现,类似于现实生活中的股东机制,拥有股份越多的人越容易获取记账权。
点点币的PoS实现原理
点点币PPCoin 前期采用PoW挖矿开采和分配货币,以保证公平。后期采用PoS机制,保障网络安全,即拥有51%货币难度更大,从而防止51%攻击。
PoS核心概念为币龄,即持有货币的时间。例如有10个币、持有90天,即拥有900币天的币龄。另外使用币,即意味着币龄的销毁。
在PoS中有一种特殊的交易称为利息币,即持有人可以消耗币龄获得利息,同时获得为网络产生区块、以及PoS造币的优先权。
点点币的PoS证明计算公式为:
proofhash & 币龄x目标值
其中proofhash,对应一组数据的哈希值,即hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime)。
币龄即bnCoinDayWeight,即币天,即持有的币数乘以持有币的天数,此处天数最大值为90天。
目标值,即bnTarget,用于衡量PoS挖矿难度。目标值与难度成反比,目标值越大、难度越小;反之亦然。
由公式可见,持有的币天越大,挖到区块的机会越大。
peercoin-0.6.1ppc中PoS证明计算代码如下:
bool CheckStakeKernelHash(unsigned int nBits, const CBlockHeader& blockFrom, unsigned int nTxPrevOffset, const CTransaction& txPrev, const COutPoint& prevout, unsigned int nTimeTx, uint256& hashProofOfStake, bool fPrintProofOfStake)
if (nTimeTx & txPrev.nTime)
// Transaction timestamp violation
return error("CheckStakeKernelHash() : nTime violation");
unsigned int nTimeBlockFrom = blockFrom.GetBlockTime();
if (nTimeBlockFrom + nStakeMinAge & nTimeTx) // Min age requirement
return error("CheckStakeKernelHash() : min age violation");
//目标值使用nBits
CBigNum bnTargetPerCoinD
bnTargetPerCoinDay.SetCompact(nBits);
int64 nValueIn = txPrev.vout[prevout.n].nV
// v0.3 protocol kernel hash weight starts from 0 at the 30-day min age
// this change increases active coins participating the hash and helps
// to secure the network when proof-of-stake difficulty is low
int64 nTimeWeight = min((int64)nTimeTx - txPrev.nTime, (int64)STAKE_MAX_AGE) - (IsProtocolV03(nTimeTx)? nStakeMinAge : 0);
//计算币龄,STAKE_MAX_AGE为90天
CBigNum bnCoinDayWeight = CBigNum(nValueIn) * nTimeWeight / COIN / (24 * 60 * 60);
// Calculate hash
CDataStream ss(SER_GETHASH, 0);
//权重修正因子
uint64 nStakeModifier = 0;
int nStakeModifierHeight = 0;
int64 nStakeModifierTime = 0;
if (IsProtocolV03(nTimeTx))
// v0.3 protocol
if (!GetKernelStakeModifier(blockFrom.GetHash(), nTimeTx, nStakeModifier, nStakeModifierHeight, nStakeModifierTime, fPrintProofOfStake))
ss && nStakeM
else // v0.2 protocol
//计算proofhash
//即计算hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime)
ss && nTimeBlockFrom && nTxPrevOffset && txPrev.nTime && prevout.n && nTimeTx;
hashProofOfStake = Hash(ss.begin(), ss.end());
if (fPrintProofOfStake)
if (IsProtocolV03(nTimeTx))
printf("CheckStakeKernelHash() : using modifier 0x%016" PRI64x" at height=%d timestamp=%s for block from height=%d timestamp=%s\n",
nStakeModifier, nStakeModifierHeight,
DateTimeStrFormat(nStakeModifierTime).c_str(),
mapBlockIndex[blockFrom.GetHash()]-&nHeight,
DateTimeStrFormat(blockFrom.GetBlockTime()).c_str());
printf("CheckStakeKernelHash() : check protocol=%s modifier=0x%016" PRI64x" nTimeBlockFrom=%u nTxPrevOffset=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s\n",
IsProtocolV05(nTimeTx)? "0.5" : (IsProtocolV03(nTimeTx)? "0.3" : "0.2"),
IsProtocolV03(nTimeTx)? nStakeModifier : (uint64) nBits,
nTimeBlockFrom, nTxPrevOffset, txPrev.nTime, prevout.n, nTimeTx,
hashProofOfStake.ToString().c_str());
// Now check if proof-of-stake hash meets target protocol
//判断是否满足proofhash & 币龄x目标值
if (CBigNum(hashProofOfStake) & bnCoinDayWeight * bnTargetPerCoinDay)
if (fDebug && !fPrintProofOfStake)
if (IsProtocolV03(nTimeTx))
printf("CheckStakeKernelHash() : using modifier 0x%016" PRI64x" at height=%d timestamp=%s for block from height=%d timestamp=%s\n",
nStakeModifier, nStakeModifierHeight,
DateTimeStrFormat(nStakeModifierTime).c_str(),
mapBlockIndex[blockFrom.GetHash()]-&nHeight,
DateTimeStrFormat(blockFrom.GetBlockTime()).c_str());
printf("CheckStakeKernelHash() : pass protocol=%s modifier=0x%016" PRI64x" nTimeBlockFrom=%u nTxPrevOffset=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s\n",
IsProtocolV03(nTimeTx)? "0.3" : "0.2",
IsProtocolV03(nTimeTx)? nStakeModifier : (uint64) nBits,
nTimeBlockFrom, nTxPrevOffset, txPrev.nTime, prevout.n, nTimeTx,
hashProofOfStake.ToString().c_str());
//代码位置 https://github.com/peercoin/peercoin/blob/ppc-0.6-rc1/src/kernel.cpp
点点币的PoS挖矿难度
点点币使用目标值来衡量挖矿难度,目标值与难度成反比,目标值越大、难度越小;反之亦然。当前区块的目标值与前一个区块目标值、前两个区块的时间间隔有关。
计算公式如下:
  当前区块目标值 = 前一个区块目标值 x ( + 2x前两个区块时间间隔) / ()
  由公式可见,两个区块目标间隔时间即为10分钟。
  如果前两个区块时间间隔大于10分钟,目标值会提高,即当前区块难度会降低。
  反之,如果前两个区块时间间隔小于10分钟,目标值会降低,即当前区块难度会提高。
peercoin-0.6.1ppc中目标值计算代码如下:
unsigned int static GetNextTargetRequired(const CBlockIndex* pindexLast, bool fProofOfStake)
if (pindexLast == NULL)
return bnProofOfWorkLimit.GetCompact();
const CBlockIndex* pindexPrev = GetLastBlockIndex(pindexLast, fProofOfStake);
if (pindexPrev-&pprev == NULL)
return bnInitialHashTarget.GetCompact();
const CBlockIndex* pindexPrevPrev = GetLastBlockIndex(pindexPrev-&pprev, fProofOfStake);
if (pindexPrevPrev-&pprev == NULL)
return bnInitialHashTarget.GetCompact();
int64 nActualSpacing = pindexPrev-&GetBlockTime() - pindexPrevPrev-&GetBlockTime();
CBigNum bnN
bnNew.SetCompact(pindexPrev-&nBits);
int64 nTargetSpacing = fProofOfStake? STAKE_TARGET_SPACING : min(nTargetSpacingWorkMax, (int64) STAKE_TARGET_SPACING * (1 + pindexLast-&nHeight - pindexPrev-&nHeight));
int64 nInterval = nTargetTimespan / nTargetS
bnNew *= ((nInterval - 1) * nTargetSpacing + nActualSpacing + nActualSpacing);
bnNew /= ((nInterval + 1) * nTargetSpacing);
if (bnNew & bnProofOfWorkLimit)
bnNew = bnProofOfWorkL
return bnNew.GetCompact();
PoS 2.0的提出和黑币
为了进一步巩固PoS的安全,2014年rat4(Pavel Vasin)提出了PoS 2.0,并发布了黑币。
  黑币前5000个块,为纯PoW阶段;第5001个块到第10000个块为PoW与PoS并存阶段,从第10001个块及以后为纯PoS阶段。
  黑币首创快速挖矿+低股息发行模式,发行阶段采用POW方式,通过算法改进在短时间内无法制造出专用的GPU和AISC矿机,解决分配不公平的问题。
  PoS2.0相比PoS的改进:
  1、将币龄从等式中拿掉。新系统采用如下公式计算权益证明:
  proofhash & 币数x目标值
  点点币中,部分节点平时保持离线,只在积累了可观的币龄以后才连线获取利息,然后再次离线。
  PoS 2.0中拿掉币龄,使得积攒币龄的方法不再有效,所有节点必须更多的保持在线,以进行权益累积。
  越多的节点在线进行权益累积,系统遭遇51%攻击的可能性就越低。
  2、为了防范预先计算攻击,权益修正因子每次均改变。
  3、改变时间戳规则,以及哈希算法改用SHA256。
黑币的PoS实现原理
黑币的PoS证明计算公式为:
proofhash & 币数x目标值
hash(nStakeModifier + txPrev.block.nTime + txPrev.nTime + txPrev.vout.hash + txPrev.vout.n + nTime) & bnTarget * nWeight
其中proofhash,对应一组数据的哈希值,即hash(nStakeModifier + txPrev.block.nTime + txPrev.nTime + txPrev.vout.hash + txPrev.vout.n + nTime)。
币数即nWeight,目标值即bnTarget。
blackcoin-1.2.4中PoS证明计算代码如下:
static bool CheckStakeKernelHashV2(CBlockIndex* pindexPrev, unsigned int nBits, unsigned int nTimeBlockFrom, const CTransaction& txPrev, const COutPoint& prevout, unsigned int nTimeTx, uint256& hashProofOfStake, uint256& targetProofOfStake, bool fPrintProofOfStake)
if (nTimeTx & txPrev.nTime)
// Transaction timestamp violation
return error("CheckStakeKernelHash() : nTime violation");
//目标值使用nBits
CBigNum bnT
bnTarget.SetCompact(nBits);
//计算币数x目标值
int64_t nValueIn = txPrev.vout[prevout.n].nV
CBigNum bnWeight = CBigNum(nValueIn);
bnTarget *= bnW
targetProofOfStake = bnTarget.getuint256();
//权重修正因子
uint64_t nStakeModifier = pindexPrev-&nStakeM
uint256 bnStakeModifierV2 = pindexPrev-&bnStakeModifierV2;
int nStakeModifierHeight = pindexPrev-&nH
int64_t nStakeModifierTime = pindexPrev-&nT
//计算哈希值
//即计算hash(nStakeModifier + txPrev.block.nTime + txPrev.nTime + txPrev.vout.hash + txPrev.vout.n + nTime)
CDataStream ss(SER_GETHASH, 0);
if (IsProtocolV3(nTimeTx))
ss && bnStakeModifierV2;
ss && nStakeModifier && nTimeBlockF
ss && txPrev.nTime && prevout.hash && prevout.n && nTimeTx;
hashProofOfStake = Hash(ss.begin(), ss.end());
if (fPrintProofOfStake)
LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from timestamp=%s\n",
nStakeModifier, nStakeModifierHeight,
DateTimeStrFormat(nStakeModifierTime),
DateTimeStrFormat(nTimeBlockFrom));
LogPrintf("CheckStakeKernelHash() : check modifier=0x%016x nTimeBlockFrom=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s\n",
nStakeModifier,
nTimeBlockFrom, txPrev.nTime, prevout.n, nTimeTx,
hashProofOfStake.ToString());
// Now check if proof-of-stake hash meets target protocol
//判断是否满足proofhash & 币数x目标值
if (CBigNum(hashProofOfStake) & bnTarget)
if (fDebug && !fPrintProofOfStake)
LogPrintf("CheckStakeKernelHash() : using modifier 0x%016x at height=%d timestamp=%s for block from timestamp=%s\n",
nStakeModifier, nStakeModifierHeight,
DateTimeStrFormat(nStakeModifierTime),
DateTimeStrFormat(nTimeBlockFrom));
LogPrintf("CheckStakeKernelHash() : pass modifier=0x%016x nTimeBlockFrom=%u nTimeTxPrev=%u nPrevout=%u nTimeTx=%u hashProof=%s\n",
nStakeModifier,
nTimeBlockFrom, txPrev.nTime, prevout.n, nTimeTx,
hashProofOfStake.ToString());
//源码地址 https://github.com/CoinBlack/blackcoin/blob/master/src/kernel.cpp
PoS 潜在攻击方法
账本分叉问题 ( Nothing at Stake Problem )
在 PoW 机制中,当账本出现分叉时,对 PoW 这种算力敏感的算法,矿工必须选择一个方向进行挖矿。而在 PoS 这种算力不敏感的时候,PoS 矿工往往会两个方向都挖,以争取实现利益最大化。当多数矿工都在两条链上一起挖矿的时候,就会很容易出现双重支付攻击。
冷启动问题 ( Initial Distribution Problem )
PoS 机制中,由于持币量会对挖矿难度产生影响。因此,当一个基于 PoS 体系代币系统启动时,就会面临早期获得代币的持有者,没有动力去花费或者转移代币给第三方。同时,持有越多的币,越容易挖到矿,这样就产生了代币初始流通性问题。
解决方案:早起几个版本,通过 PoW 机制来创建货币,而非 PoS。由于 PoW 本身的性质,矿工在挖矿过程中往往需要资金来升级硬件,所以会让矿工手中的币流通起来。
长距离攻击 ( Long-Range Attack )
PoS 中,产生每个 Block 的速度相对 PoW 快了很多。因此,少数不怀好意的节点会想着把整个区块链共识账本全部重写。这在 PoW 中是经典的 51% 问题,即:当某一个节点控制了 51% 及以上算力,就有能力篡改账本,但达到 51% 算力是件极其困难的事情。而在 PoS 中缺乏对算力的约束,那么就存在潜在可能篡改账本。
解决方案:同步时,限制最大能接受的分叉节点数量。
贿赂攻击(Bribe Attack)
贿赂攻击流程如下:
攻击者购买某个商品或服务
商户开始等待网络确认这笔交易
此时,攻击者开始在网络中首次宣称,对目前相对最长的不包含这次交易的主链进行奖励。
当主链足够长时,攻击者开始放出更大的奖励,奖励那些在包含此次交易的链条中挖矿的矿工。
六次确认达成后,放弃奖励。
货物到手,同时放弃攻击者选中的链条。
因此,只要此次贿赂攻击的成本小于货物或者服务费用,此次攻击就是成功的。相比之下,PoW 机制中贿赂攻击就需要贿赂大多数矿工,因此成本极高,难以实现。
币龄加和攻击 ( Coin Age Accumulation Attack )
在最早的 Peercoin 版本中,挖矿难度不仅与当前账户余额有关,也与每个币的持币时间挂钩。
H(H(Bprev),A,t) ≤ balance(A)mAge(coins)
这就导致,部分节点在等待足够长时间后,就有能力利用 Age 的增加来控制整个网络,产生非常显著的影响。
解决方案:限制 CoinAge 的最大值。
预计算攻击 ( Precomputing Attack)
当 PoS 中的某一节点占有了一定量的算力后,PoS 中占有特定算力的节点,就有能力通过控制 H prev
来使自己所在算力范围有能力去计算
H(H(Bprev),A,t) ≤ balance(A)m
PoS 的优缺点
节能。不用挖矿,不需要大量耗费电力和能源。
更去中心化。首先说,去中心化是相对的。相对于比特币等PoW类型的加密货币,PoS机制的加密货币对计算机硬件基本上没有过高要求,人人可挖矿(获得利息),不用担心算力集中导致中心化的出现(单用户通过购买获得51%的货币量,成本更高),网络更加安全有保障。
避免紧缩。PoW机制的加密货币,因为用户丢失等各种原因,可能导致通货紧缩,但是PoS机制的加密货币按一定的年利率新增货币,可以有效避免紧缩出现,保持基本稳定。比特币之后,很多新币采用PoS机制,很多采用工作量证明机制的老币,也纷纷修改协议,“硬分叉”升级为PoS机制。
纯PoS机制的加密货币,只能通过IPO的方式发行,这就导致“少数人”(通常是开发者)获得大量成本极低的加密货币,在利益面前,很难保证他们不会大量抛售。
PoS机制的加密货币,信用基础不够牢固。
为解决这个问题,很多采用PoW+PoS的双重机制,通过PoW挖矿发行加密货币,使用PoS维护网络稳定。或者采用DPoS机制,通过社区选举的方式,增强信任。
参考链接:
以太坊的POS共识机制(二)理解 Serenity :Casper
区块链共识机制:权益证明POS和委托权益证明DPOS
[区块链]DPoS(委托权益证明机制)官方共识机制详解——BTS、EOS
POS--权益证明机制
Ouroboros:一个可证明安全的PoS区块链协议 (共识介绍)
没有更多推荐了,

我要回帖

更多关于 工作量证明机制和权益证明机制 的文章

 

随机推荐