区块链共识算法:PoS 及其例子go语言代码实现
股份公司股东在我们生活中的重要性。 然而,在区块链的应用程序中,实际上不可能将份额节点分配给链中的份额。相反,还有其他东西充当份额,我们将这些东西分配到链上。中间节点。下面将给出几个例子来说明这个概念。
例如PoS在虚拟货币应用我们可以控制货币的数量作为拥有的股权和股份的数量。现在以太坊ETH有共识机制PoS,所以在以太坊中它是通过每个以太坊拥有的代币 ,该节点拥有多少股份以及拥有多少权力。假设有一个以太坊网络,共有ETH数量来衡量的嗯节点 3个节点,A、B、C。其中,节点A有10,000个ETH代币,而B和C分别有1,000和2,000个。那么,在这个以太坊网络中,A区块很可能会被选中,在决策过程中拥有更大的发言权。
再举个例子,假设未来有一个 上面的描述解释了 在 这也带来了以下特点: 为了让更多人和非围棋开发者理解,将采用以下 首先我们使用一组候选块进行存储,每个 每个 的地址。然后是子 非虚拟货币区块链和一条公链,一个结合了现实产业的链比如汽车链,你可以给定车主拥有的第辆汽车,以及到他的车值多少钱,用于将份额分配给,例如指定公式: 汽车数量*汽车价值=股份数量。在PoS中,份额是一个概念,一个衡量话语权的概念。 PoS的特点
PoS共识算法的概念。因为它是以的东西的拥有者的数量来衡量的,也就是说只要我们的节点有ETH代币之类的东西,即使有也只有一个 从 每个人都有发言权。哪怕他们还小,连露面的机会都没有,但他们还是有机会的。PoS中,区块已经被铸造(这里没有“挖矿”的概念,所以我们不使用这个词作为权益证明),PoW是挖矿概念性的。 脏数据编写PoS代码
伪代码 如需实施,请通过电子邮件留下完整的代码。 节点发出一个由其当前节点创建的块对象:
candidateBlocks [ ]Blocks 候选区块数组
复制代码块结构有一个变量,其中用于记录创建该块的节点的节点type Block struct {
Timestamp string // 时间戳,代表该区块的生成时间
Hash string // 这个区块的 hash 值
PrevHash string // 这个区块的 上一个 区块的 hash 值
NodeAddress string // 生成这个区块的 节点地址
Data string // 区块携带的数据
}
复制代码,负责遍历候选块号来的矩阵来,根据块中的节点地址获取令牌数量,然后分配权益
stakeRecord []string // 数组
for block ~ candidateBlocks {
coinNum = getCoinBalance(block.NodeAddress) // 获取代币数量
for i ~ coinNum { // 币有多少,就循环添加多少次
if stakeRecord.contains(block.NodeAddress) { // 是否以及包含了
break // 包含的就不再重复添加
}
stakeRecord = append(block.NodeAddress) // 添加
}
}
复制代码 中选择 活动 获胜者 。这个概率与上面的coinNum有关。越大,机会就越大。
index = randInt() // 得出一个整形随机数
winner = stakeRecord[index] // 取出胜利者节点的地址
复制代码最后我们可以把这个winner产生的区块移出来接入公链,然后进行铸造
for block ~ candidateBlocks {
if block.NodeAddress == winner {
// 添加
}
}
// 广播出去
...
复制代码上面很简单,PoS算法的代码实现机制简单地根据拥有的代币数量来分配权益。而实际上事情往往更复杂。想一想,如果我的资金分配不仅仅与筹码数量有关,对吧?这样的话就有不同类型不同的想法和版本
比如以太坊增加了币龄。当候选人成功后,以太坊也会在这一步减去币龄。这一切都是可以改变的。我们要明白PoS的本质,才能顺心去开发自己的公链
作者:林冠宏
链接:https://juejin.im/post/5b95d052f265da0a914527e4
来源:掘金 版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网