如何理解权益证明?

秘密课程 2024-03-05 04:03:21
什么是权益证明(POS)?

权益证明机制 PoS(Proof of Stake),一种主流的区块链共识算法,目的是为了让区块链里的分布式节点达成共识,它往往和工作量证明机制(Proof of Work)一起出现,两种都被认为是区块链共识算法里面的主流算法之一。简单的理解类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。其实就是据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,

总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。以太坊就是采用POS共识算法。

权益证明的特点

权益证明的特点是没有复杂的计算,区块链的参与者不与他人竞争,而是抵押他们的资源,类似于把钱存在银行,银行会根据你的资金额度个时间给你分配相应的收益。参与者对网络安全很看重,因为他们自己手里持有网络中的TOKEN。系统根据参与者所拥有的 “股权”来选择验证者,如参与者拥有10%的股份,那么将验证网络中10%的交易。参与者抵押的资源越大,网络允许这个验证者创建区块的概率越高。PoS的想法是验证者持有的“股份”比例越高,TA操纵验证程序的兴趣就越低。优点:能源效率高,攻击者发动攻击的成本更高,不受规模经济影响。缺点:没有利害关系

PoS 的研究脚步还在不断前进,安全、性能和去中心化一直都是 PoS 所追求的方向,未来也将有更多 PoS 的项目落地。为了更好的观测公链运行状态,即时监测安全异常,慢雾在 EOS、BOSCORE、FIBOS、YOYOW、IoTeX、COSMOS 上都部署了 Safe Staking,落地扎根安全领域,关注节点的稳定与安全。

算法具体实现原理

每个旷工都有出块(即挖矿)的权力,只要出块成功,就有系统给出的奖励,这里不需要通过复杂的计算来挖矿,问题只在于谁来出块,股权越大,出块的概率就越大,反之,则相反。POS有很多变种,股权可以是持有币的数量,或者支付的数量等等。

代码实现其原理package mainimport ("crypto/sha256""encoding/hex""fmt""math/rand""strconv""time")//pos的挖矿原理type Block struct {Index intData stringPreHash stringHash stringTimestamp stringValidator *Node //记录挖矿节点}func genesisBlock() Block {var genesBlock = Block{0, "Genesis block","","",time.Now().String(),&Node{0, 0, "dd"}}genesBlock.Hash = hex.EncodeToString(BlockHash(&genesBlock))return genesBlock}func BlockHash(block *Block) []byte{record := strconv.Itoa(block.Index) + block.Data + block.PreHash + block.Timestamp + block.Validator.Addressh := sha256.New()h.Write([]byte(record))hashed := h.Sum(nil)return hashed}//创建全节点类型type Node struct {Tokens int //持币数量Days int //持币时间Address string //地址}//创建5个节点var nodes = make([]Node, 5)//存放节点的地址var addr = make([]*Node, 15)func InitNodes() {nodes[0] = Node{1, 1, "0x12341"}nodes[1] = Node{2, 1, "0x12342"}nodes[2] = Node{3, 1, "0x12343"}nodes[3] = Node{4, 1, "0x12344"}nodes[4] = Node{5, 1, "0x12345"}cnt :=0for i:=0;i<5;i++ {for j:=0;j<nodes[i].Tokens * nodes[i].Days;j++{addr[cnt] = &nodes[i]cnt++}}}//采用Pos共识算法进行挖矿func CreateNewBlock(lastBlock *Block, data string) Block{var newBlock BlocknewBlock.Index = lastBlock.Index + 1newBlock.Timestamp = time.Now().String()newBlock.PreHash = lastBlock.HashnewBlock.Data = data//通过pos计算由那个村民挖矿rand.Seed(time.Now().Unix())//[0,15)产生0-15的随机值var rd =rand.Intn(15)//选出挖矿的旷工node := addr[rd]//设置当前区块挖矿地址为旷工newBlock.Validator = node//简单模拟 挖矿所得奖励node.Tokens += 1newBlock.Hash = hex.EncodeToString(BlockHash(&newBlock))return newBlock}func main() {InitNodes()//创建创世区块var genesisBlock = genesisBlock()//创建新区快var newBlock = CreateNewBlock(&genesisBlock, "new block")//打印新区快信息fmt.Println(newBlock)fmt.Println(newBlock.Validator.Address)fmt.Println(newBlock.Validator.Tokens)}

总结

PoS 的区块链系统无需外部物理输入,所以它相比 PoW 更为环保不费电,并且矿工就是使用者,这会在一定程度上抵御了 51% 攻击,所以基于 PoS 机制的数字货币属于理想状态的数字货币。PoS 的缺点是缺乏工业级的区块链应用,从逻辑上来看有点循环自证明的味道,就是用自己的币来维护系统的安全,而币的安全性是由系统保证的,所以现阶段 PoS 共识机制往往不是独立运行的,而是混合了 PoW 一起运行,这就可以弥补 PoS 的缺陷。

0 阅读:0
秘密课程

秘密课程

感谢大家的关注