让我告诉你如何玩转TDPOS

发布时间:2019-07-01           作者:超哥


 

本周为各位开发者带来百度超级链学院第二讲

“如何玩转TDPOS”

候选人的提名、投票等一系列操作是如何进行的?

欢迎在本期的视频课程中找答案吧! 

 

---不方便看视频的小伙伴,欢迎阅读文字内容---

 

第一步——提名候选人。首先看json文件,更改提名address。现在网络一共3个节点,也就是说对用有3个地址可以成为矿工出块。如果填写地址对应的节点没有在网络里,当轮训到该地址出块时,网络高度是不会增加的。所以提名的时候,就应该提名3个节点对应的3个address。

接下来创建json文件。首先创建文件夹,将json文件内容拷贝进来。一开始创建链时,第一轮指定的是node1节点的地址和node2节点的地址,那么现在提名node3节点。先获取node3节点地址,将node3地址放入提名的文件,进行提名。提名时注意,要冻结整个网络十万分之一的token,这个amount是大于十万分之一的。另外,更改文件位置,提名成功返回txid。同时,也可以通过命令行进行查询。先对2节点提名,获得2个节点地址。现在候选者只有node3节点地址,再对node2执行这个操作。经过3s确认之后,才能真正写入db里面。再提名node1地址,3s后进行候选者查看,现在被提名者是这3个地址。

         

第��步——投票候选人。看下json文件,这个地方是一个数组的形式,所以我们可填多个地址,但网络在初始化网络的时候,xuper.json文件中的proposer_num字段设置的是2,说明就网络中只能有两个矿工出块,所以这个位置在投票的时候最多能填2个address,最少可以填一个address。

现在分别操作,通过命令行获得候选人地址。

首先对node3进行投票,我们设置为100票。(投100票的原因是:保证node3节点在下一轮成为矿工)。投票完成,查看投票是否成功。这有一个命令行就是,某候选人被投票的记录,可以查询到,node3节点的address投票记录是由node1节点下面的address发起的,生成了txid并且进行了记录。

其次,对node1节点和node2节点各投50票,查询一下选民投票,一共是3个,两个是同时发起的,一个是单独发起的。

最后,看下命令行,命令行通过help来查询,包含6个功能,分别为查询候选人的信息,查询某一轮出块的顺序,查询发起者的提名记录,查询被提名者的提名记录,查询选民的有效投票记录,查询某候选人被投票的投票记录。

刚才这3个已经用到了,现在查询某一轮出块的信息。轮数怎么来获得呢?可以通过tail日志。现在是62轮,看到 62轮是按照之前旧的出块的顺序出块的。看一下63轮,63轮已经换成了新的检票结果进行的出块。我们这次的投票是在第62轮开始进行的投票,投票的最终生效的结果是在下一轮,也就是63轮生效,所以62轮还是按照我们第一开始初始化的结果进行的,因为之前我们一直没有进行投票,所以前62轮全部都按照最初的第一轮指定的矿工进行出块,在第62轮进行了投票,投票后node3节点获得的票数最多,其次是node2节点,node2节点和node1节点其实是一样的,但是在读取leveldb时是以最新的票数更新,所以获得的是node3节点和node2节点在出块。

也可以查询一下网络状态,tipBlockid是最新出的块,看看它的矿工是谁呢?coninbase=true转给了node3节点。查询的当前的区块的Id,这个是它的前序的block。我们的链现在已经涨到了2051的高度,并且没有进行其他交易,所以txcount(tx数目)只有一个,而这个tx就是挖矿的transaction。这是它生成的txid,没有input,ouput给矿工转了1000000,inTruck指是否上链,true表示已上链,failedTxs是没有的。curTerm(当前轮数)和curBlockNum(当前矿工出块的块数)指的是,每一轮出块的时候的轮数。curBlockNum指的是当前node3矿工地址在出的块数。

 

现在tdpos提名、投票、网络搭建差不多都讲完了,还剩撤销提名和投票。撤销也是发起一个交易。我们先对node2节点再发起新一轮投票,然后将投票撤销。执行一下投票,这次只给投10票。下面进行撤销。看一下撤销的json文件,先创建文件。发起撤销, 3s后查看node2节点投票记录。已经没有刚才的投票记录了,那么再查看当前轮的出块信息,按照刚才的票数的话,应该还是刚才的出块顺序node3节点,node2节点。获得当前轮数66轮,然后查看66轮的出块信息。

以上就是tdpos部分的讲解。