如何理解委托权益证明DPoS?

秘密课程 2024-03-05 04:03:21
什么是权益授权证明

DPoS 是一种类似董事会的授权共识机制,它通过减少验证者的数量来提高交易速度以及创建区块的速度。验证者是token持有者通过投票选出来的值得信任的节点。被委托的验证人将会与为他们投票的人共享获得的奖励。DPoS 大幅提高区块链的处理能力,并降低区块链的维护成本,从而使交易速度接近于中心化的结算系统。

共识机制是区块链的重要组成部分,它可以实现所有人掌握的账本完全一致,是实现区块链无人可以随意篡改特性的基础。即区块链的不可篡改性,只有当达到一定共识时才可以篡改。

权益授权证明原理

让每一个持有币的人进行投票,由此产生n位代表 , 我们可以将其理解为n个超级节点或者矿池,而这n个超级节点彼此的权利是完全相等的。从某种角度来看,DPOS有点像是议会制度或人民代表大会制度。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。EOS就是采用DPOS共识算法。

算法具体实现原理

假设n为21,竞选的节点有几百个,持币人对这些节点进行投票,选出票数最多的21位,由这21位轮流来出块。代码实现

package mainimport ("crypto/sha256""encoding/hex""fmt""math/rand""strconv""time")type Block struct {Index intTimestamp stringPrehash stringHash stringData []bytedelegate *Node//区块由哪个节点挖出}func GenesisBlock() Block {gene := Block{0, time.Now().String(),"", "", []byte("genesis block"), nil}gene.Hash = string(blockHash(gene))return Block{}}func blockHash(block Block) []byte {record := strconv.Itoa(block.Index) + block.Timestamp + block.Prehash + hex.EncodeToString(block.Data)h := sha256.New()h.Write([]byte(record))hashed := h.Sum(nil)return hashed}//节点类型type Node struct {Name string //节点名称Votes int // 被选举的票数}func (node *Node)GenerateNewBlock(lastBlock Block, data []byte) Block {var newBlock = Block{lastBlock.Index+1, time.Now().String(), lastBlock.Hash, "", data, nil}newBlock.Hash = hex.EncodeToString(blockHash(newBlock))newBlock.delegate = nodereturn newBlock}//创建节点var NodeArr = make([]Node,10)func CreateNode() {for i := 0; i < 10; i++ {name := fmt.Sprintf("NODE %d num", i+1)NodeArr[i] = Node{name, 0}}}//模拟投票func Vote() {for i := 0; i < 10; i++ {rand.Seed(time.Now().UnixNano())vote := rand.Intn(10) + 1NodeArr[i].Votes = vote}}//选出票数最多的前3位func SortNodes() []Node {n:= NodeArrfor i := 0; i<len(n) ;i++ {for j := 0; j < len(n)-1 ;j++ {if n[j].Votes < n[j+1].Votes {n[j],n[j+1] = n[j+1],n[j]}}}return n[:3]}func main() {CreateNode()fmt.Println(NodeArr)Vote()nodes := SortNodes()fmt.Println(nodes)//创建创世区块gene := GenesisBlock()lastBlock := genefor i:= 0; i< len(nodes) ;i++ {lastBlock = nodes[i].GenerateNewBlock(lastBlock,[]byte(fmt.Sprintf("new block %d",i)))}}

DPoS 共识算法分析

在 DPoS 共识算法中,区块链的正常运转依赖于见证人 (Delegates),见证人是由全网节点投票产生的,见证人也是记账节点的实际控制人,相当于咱们选课代表,课代表帮我们整理作业。

见证人在完成打包交易的同时可以领取区块奖励和交易的手续费,并且可以执行社区投票的提案,所以 DPoS 共识算法不仅仅是算法,而是一个包含了协作治理关系的共识机制。

0 阅读:0
秘密课程

秘密课程

感谢大家的关注