一文带你读懂CPChain RNode 荣誉度(RPT)评估模型

RPT是 CPChain DPoR共识机制下的节点荣誉度评估算法。每一位参与CPChain网络出块的荣誉节点必须通过RPT荣誉度评估,它是衡量荣誉节点当选动态委员会的重要依据之一,荣誉节点选入动态出块委员会的概率与该节点荣誉度大小成正比。

 

得益于众多基于PoS或类PoS共识机制的加密货币项目的上线,年初以来,Staking Economy逐渐兴起。「持币即挖矿」已是PoS类项目的基本共识,PoS共识机制下,节点出块的考量维度仅仅只是节点是否持币参与出块质押。CPChain DPoR共识机制设计了荣誉度评估(RPT)算法,除了将balance作为考核标准外,还将交易、数据贡献、区块链维护、代理信誉等链上数据引入考核标准,力图让出块节点的评估维度更全面,以此兼顾整个CPChain网络的安全性和高效性。

 

为什么我们需要RPT算法评估节点荣誉度?

 

如何保证节点状态一致性和分布式数据存储,是物联网公链面临的共同难题。为此,CPChain提出了基于二权分立委员会的三层协议LBFT2.0。这一协议的核心方案是为动态委员会设计一个动态投票机制,选出可信的委员会对区块数据进行收集并打包各个区块的任务。

 

而一个节点是否可信,系统需要对其进行评估。如何合理的评估一个节点,这就需要构建合适的评估模型及算法。

 

CPChain DPoR共识机制使用从区块链中提取的数据,构建节点的RPT评估模型,进而计算和评估系统中节点的荣誉度值。RPT评估模型由五个维度构成,分别为:账户余额、交易、代理人信誉奖励、数据贡献及区块链维护。

 

其中,

账户余额(AB):节点账户中的CPC余额在整个RNode的排名是节点信誉度最为重要的一个维度,占整个RPT总权重的50%;

 

交易(TX):节点在CPChain网络系统中所产生的交易,占总权重的15%;

 

代理人信誉奖励(PR):节点在网络中作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 typedef struct { char data; unsigned int weight; unsigned int parent,lchild, rchild; }HTNode; typedef struct { char cd[N]; int start;} HCode; // 创建Huffman树 void createHT(HTNode ht[], int n) { int i, k, lnode, rnode; double min1, min2; for (i = 0; i < 2 * n - 1; i++) ht[i].parent = ht[i].lchild = ht[i].rchild = -1; for (i = n; i <= 2 * n - 2; i++) { min1 = min2 = 32767; lnode = rnode = -1; for (k = 0; k <= i - 1; k++) { if (ht[k].parent == -1) { if (ht[k].weight < min1) { min2 = min1; rnode = lnode; min1 = ht[k].weight; lnode = k; } else if (ht[k].weight < min2) { min2 = ht[k].weight; rnode = k; } } } ht[i].weight = ht[lnode].weight + ht[rnode].weight; ht[i].lchild = lnode; ht[i].rchild = rnode; ht[lnode].parent = i; ht[rnode].parent = i; }} // 生成编码 void CreateHCode(HTNode ht[], HCode hcd[], int n) { int i, f, c; HCode hc; for (i = 0; i < n; i++) { hc.start = n; c = i; f = ht[i].parent; while (f != -1) { if (ht[f].lchild == c) hc.cd[hc.start--] = '0'; else hc.cd[hc.start--] = '1'; c = f; f = ht[f].parent; } hc.start++; hcd[i] = hc; }} int main() { char str[N] = "\0"; int x; printf("请输入字符串:"); gets(str); int n = strlen(str); HTNode ht[N]; for (int i = 0; i < n; i++) { ht[i].data = str[i]; printf("请输入第%d个结点权重:", i + 1); scanf("%d", &x); ht[i].weight = x; } HCode hcd[N]; createHT(ht, n); CreateHCode(ht, hcd, n); for (int j = 0; j < n; j++) { printf("%s", hcd[j].cd); } return 0; }改正错误
05-29
在代码中,定义了一个结构体 HCode,但没有给它赋初值,导致在生成编码时可能会出现错误。正确的方式是在定义时给 HCode 赋初值,例如: ``` typedef struct { char cd[N]; int start; } HCode = {"", 0}; ``` 另外,get() 函数在有些编译器中可能已经被弃用,可以使用 fgets() 函数代替。完整的修改后代码如下: ``` #include <stdio.h> #include <string.h> #include <stdlib.h> #define N 100 typedef struct { char data; unsigned int weight; unsigned int parent,lchild, rchild; }HTNode; typedef struct { char cd[N]; int start; } HCode = {"", 0}; // 创建Huffman树 void createHT(HTNode ht[], int n) { int i, k, lnode, rnode; double min1, min2; for (i = 0; i < 2 * n - 1; i++) ht[i].parent = ht[i].lchild = ht[i].rchild = -1; for (i = n; i <= 2 * n - 2; i++) { min1 = min2 = 32767; lnode = rnode = -1; for (k = 0; k <= i - 1; k++) { if (ht[k].parent == -1) { if (ht[k].weight < min1) { min2 = min1; rnode = lnode; min1 = ht[k].weight; lnode = k; } else if (ht[k].weight < min2) { min2 = ht[k].weight; rnode = k; } } } ht[i].weight = ht[lnode].weight + ht[rnode].weight; ht[i].lchild = lnode; ht[i].rchild = rnode; ht[lnode].parent = i; ht[rnode].parent = i; } } // 生成编码 void CreateHCode(HTNode ht[], HCode hcd[], int n) { int i, f, c; HCode hc; for (i = 0; i < n; i++) { hc.start = n; c = i; f = ht[i].parent; while (f != -1) { if (ht[f].lchild == c) hc.cd[hc.start--] = '0'; else hc.cd[hc.start--] = '1'; c = f; f = ht[f].parent; } hc.start++; hcd[i] = hc; } } int main() { char str[N] = "\0"; int x; printf("请输入字符串:"); fgets(str, N, stdin); int n = strlen(str) - 1; // 去掉换行符 HTNode ht[N]; for (int i = 0; i < n; i++) { ht[i].data = str[i]; printf("请输入第%d个结点权重:", i + 1); scanf("%d", &x); ht[i].weight = x; } HCode hcd[N]; createHT(ht, n); CreateHCode(ht, hcd, n); for (int j = 0; j < n; j++) { printf("%s", hcd[j].cd); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值