Skip to content

EDPoS投票指南

BigBang-Core edited this page Jun 27, 2020 · 16 revisions

1. 本教程是搭建节点+投票教程,首先做好EDPOS投票前相关准备

说明:

1) BigBang Core采用的是 CPoW + EDPoS 的共识模式,且BigBang Core没有预挖预投,所以需要通过 CPoW 挖出足够的Token后,才有Token用于EDPoS投票
2) 可执行程序下载地址(请选择最新版下载):
https://github.com/bigbangcore/BigBang/releases
3) windows操作系统中,在当前目录下执行程序,“./bigbang”命令换成“bigbang”,下同

2. 运行可执行程序,生成两组备用密钥

说明:
1) 用于EDPOS出块模板创建和相应钱包的使用
2) 使用命令bigbang makekeypair生成两组公私钥对,使用命令“bigbang getpubkeyaddress $pubkey”,通过公钥获得相应的公钥地址

密钥组一(花钱的,用于花费):
{
    "privkey" : "e7382046309d5a623bd87a75b666b088f53b8f86fa87a27d1aaafb5b174ca9f1",
    "pubkey" : "8e0594f219d5ffa30cc938fa9c26c76e0bfa3655fe91b67ee1b1891bee5dbb7f",
    "pubkeyaddress" : "1fyxnvvgvh6ry2znpj7z5adqt1dqce9mwz8wcj353zzahkwmm0p74y0t4"
}

密钥组二(赚钱的,用于挖矿):
{
    "privkey" : "57bdb88a874facd3c1e5dada6b6ce4d7d271a101236523b9f0fd314576c96b4d",
    "pubkey" : "928aa9ac6e67b094024ca2a59a228eb6fd45a26bc3ee02d53b7689903f6a7941"
}

3. 手动修改配置文件.bigbang/bigbang.conf:

# 启动P2P监听(IPV4)
listen4
connect=18.182.192.156:9955(测试链IP)
connect=112.126.60.134:19901(测试链IP)

# DPOS挖矿参数:奖励花费地址(花费奖励的公钥地址(钱包地址))
mpvssaddress=1fyxnvvgvh6ry2znpj7z5adqt1dqce9mwz8wcj353zzahkwmm0p74y0t4
# DPOS挖矿参数:DPOS挖矿打包签名的私钥
mpvsskey=57bdb88a874facd3c1e5dada6b6ce4d7d271a101236523b9f0fd314576c96b4d

注意: 如果在同一台主机上配置多个DPOS节点,需要每个节点的配置中port和rpcport参数不同

4. 完成配置后,重新启动程序,数据开始自动同步

命令:bigbang -daemon -debug

5. 添加DPOS挖矿模板地址(创建DPOS节点)

命令:
bigbang addnewtemplate delegate '{"delegate": "挖矿公钥", "owner": "花费公钥【地址】"}'

示例:
bigbang addnewtemplate delegate '{"delegate": "928aa9ac6e67b094024ca2a59a228eb6fd45a26bc3ee02d53b7689903f6a7941", "owner": "1fyxnvvgvh6ry2znpj7z5adqt1dqce9mwz8wcj353zzahkwmm0p74y0t4"}'
--- 20m0bk8tjwt73gtjb4jv8r6sa04fe22r3ns2era8zbnn20qfv8sz38vg6 ----DPOS挖矿模板地址(节点地址)

6. 投票

说明:EDPoS投票有两种方式
1) 自己给自己节点投票
2) 给别人节点投票

6.1 自己给自己节点投票

命令:
bigbang sendfrom <DPOS挖矿模板地址中的owner参数>  <DPOS节点地址>  <投票TOKEN>

示例:
bigbang sendfrom 1fyxnvvgvh6ry2znpj7z5adqt1dqce9mwz8wcj353zzahkwmm0p74y0t4 20m0bk8tjwt73gtjb4jv8r6sa04fe22r3ns2era8zbnn20qfv8sz38vg6 1000

6.2 给别人投票

说明:这时候需要根据对方的EDPoS模板地址和自己的钱包地址生成一个待投票的vote模板地址,然后朝这个新生成的vote地址投票。这种投票方式可赎回,直接朝DPOS挖矿模板地址投票不可赎回

1) 生成 vote 模板地址
命令:
bigbang addnewtemplate vote '{"delegate": "DPOS节点地址", "owner": "自己的钱包地址"}'

示例:
bigbang addnewtemplate vote '{"delegate": "20m0bk8tjwt73gtjb4jv8r6sa04fe22r3ns2era8zbnn20qfv8sz38vg6", "owner": "1tefq9nem7mdkr14gx3man2sr1bvvvfhey0evvctp3tdj6r4d279sr9p7"}'
--- 20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er  --- 为别人投票时,朝这个地址转账即可

2)投票
命令:
bigbang sendfrom <自己的钱包地址> <自己生成的vote的地址> <投票金额>

示例:
bigbang sendfrom 1tefq9nem7mdkr14gx3man2sr1bvvvfhey0evvctp3tdj6r4d279sr9p7  20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er 1000

6.3 给别人投票(不需要导入vote模板地址)

说明:由于导入vote模板地址时需要加载全链的交易,所以需要时间,如果不需要导入vote模板地址,则可以采用以下方法:

1) 生成 vote 模板地址
命令:
bigbang maketemplate vote '{"delegate": "DPOS节点地址", "owner": "自己的钱包地址"}'

说明:
该命令会立即返回,程序是根据参数生成模板地址,不需要导入钱包。

示例:
bigbang maketemplate vote '{"delegate": "20m0bk8tjwt73gtjb4jv8r6sa04fe22r3ns2era8zbnn20qfv8sz38vg6", "owner": "1tefq9nem7mdkr14gx3man2sr1bvvvfhey0evvctp3tdj6r4d279sr9p7"}'
{
    "address" : "20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er",
    "hex" : "0700020500b9a352e68e386a4b24b68c1b2a011ee10b03ae44ec291f5d6a205dfb467e01d39f74d5d43d1b3c0490e8e8aa8b380af7bdbe2ef01dbdb3561e9b23608d11d3"
}

--- "address" : "20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er", --- 这个为vote模板地址,向该地址转帐,即可投票;
---"hex" : "0700020500b9a352e68e386a4b24b68c1b2a011ee10b03ae44ec291f5d6a205dfb467e01d39f74d5d43d1b3c0490e8e8aa8b380af7bdbe2ef01dbdb3561e9b23608d11d3"    ---这个为该vote模板地址的数据,用于后面的sendfrom命令中的-td参数;

2)投票
命令:
bigbang sendfrom <自己的钱包地址> <自己生成的vote的地址> <投票金额> -td=vote模板地址数据

说明:
-td:这个参数为maketemplate命令产生的hex数据,即模板地址数据;

示例:
bigbang sendfrom 1tefq9nem7mdkr14gx3man2sr1bvvvfhey0evvctp3tdj6r4d279sr9p7  20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er 1000 -td=0700020500b9a352e68e386a4b24b68c1b2a011ee10b03ae44ec291f5d6a205dfb467e01d39f74d5d43d1b3c0490e8e8aa8b380af7bdbe2ef01dbdb3561e9b23608d11d3

7. Token赎回

说明:只能由参与投票的地址进行赎回操作,且相应的钱包需处于解锁状态
命令:bigbang sendfrom {$自己生成的为别人投票的vote的地址} {$赎回地址} {$amount} 1
示例:bigbang sendfrom 20w0629r20911rwy0mfkqmcp8qqsghp1m4v8e3998s04xmcd6qb1dj9er  1tefq9nem7mdkr14gx3man2sr1bvvvfhey0evvctp3tdj6r4d279sr9p7 1000 1

注意:

1) 节点需要配置DPOS挖矿参数,即mpvssaddress和mpvsskey,为了安全起见,这两参数应对应不同的私钥  
2) 投票方法分为自己为自己投票和别人为自己投票两种。两种方式下,接受投票的模板是两个不同的模板。即自己为自己投票是投票对象是 delegate 模板,第三方为自己投票时投票对象是 vote 模板  
3) 传入的令牌数决定了地址的权重。模板地址拥有的令牌数与令牌总数的比率是权重。如果权重较大,则地址生成块的概率较高。如果权重很小,地址生成块的概率就比较低  
4) 总TOKEN数量为链总共发行的TOKEN数,随块高增涨而增加,可根据TOKEN发布规则计算出某块高的总TOKEN数量

8. Q&A

1) POW出块到多少高度,DPOS可以开始出块?这是基于什么原理设置的?    
答:在初始阶段,区块是以POW模式生成的。在此之后,如果DPOS矿工获得选票,DPOS将有机会生成区块。然而,是否生成DPOS区块取决于POW、投票和整个网络的随机数。在第一阶段,高度被硬编码到程序中。当当前高度低于此高度时,将生成POW块,当当前高度超过该高度时,是POW出块还是DPOS出块则由投票和随机数决定。

2) DPOS节点需要获得多少票才能获得出块权?   
答:DPOS节点最低需要获得总TOKEN数的2%才有机会参与DPOS出块节点竞争,最后根据投票情况选择排名前23位的节点参与随机数选择。至于需要获得多少票才能获得出块权,这需要根据全网的投票情况来定,节点获得的票数越多,则获得出块权的机会越高。

3) DPOS出块权限与权重的关系是怎样的?  
答:DPOS节点的权重,是由节点获得的TOKEN数量与总TOKEN数作为参数计算得来的,节点获得的投票越多,权重就越高,获得出块权的机会就越高。

4) 为什么添加挖矿模板时需要两组密钥?  
答:添加挖矿模板时配置文件中需要添加两个参数,一个是挖矿用的私钥,用于BLOCK出块签名使用,另一个是TOKEN的花费地址,拥有该地址的私钥,才可以花费挖矿模板地址下所拥有的TOKEN。为了安全起见,这两组密钥不能相同。挖矿私钥是需要在挖矿节点保存的,有可能被泄露,所以这个私钥是不安全的。而另一个参数为花费地址,不需要给出私钥,只要私钥保存好,该模板地址中的TOKEN就是安全的,所以在我们的Bigbang系统中,使用两组密钥对可以提高安全性。
Clone this wiki locally