1. 程式人生 > >EOS源碼分析(一)投票系統

EOS源碼分析(一)投票系統

eos區塊鏈 lock port ima 超級 ide image 9.png net

EOS系統投票機制

在現實世界中,我們對一人一票的投票制度都是非常熟悉,也就是一人可以投一票。
而EOS的投票,一個EOS對應一票,每票最多可以投三十次。也就是說,你有多少個EOS就可以投多少票,這些選票全部投給每個節點,節點數不能超過30個。例如eosgalaxybp1有1000個EOS,那麽可以投給30個競選節點,每個競選節點都能得到eosgalaxybp1的1000張票。所以,如果你擁有的EOS數量越多,就越有影響力。而同時投給同一個節點的票數越多,那麽這個節點所取得總分數就越高。一個節點如果得到的總票數排進前21名內,就會成為超級節點。

如何成為競選節點

在EOS區塊鏈中節點分為全節點(full node)和生產節點(block producer node簡稱bp),其中生產節點又分為超級節點(出塊節點)和候選節點(非出塊節點),這裏的生產節點又可成為競選節點。怎麽才能競選節點呢,可以通過以下步驟就能成為競選節點:

1、 首先要創建一個EOS賬戶,創建賬戶可以有多種方式:

1.1、 使用 EOS Account Creator 服務付費創建 EOS 賬號
https://support.otcbtc.com/hc/zh-cn/articles/360006929491-如何付費創建-EOS-賬號 這個網址是關於如何通過付費創建 EOS 賬號教程

1.2、 通過cleos命令創建賬戶

cleos system newaccount [OPTIONS] creator name OwnerKey [ActiveKey],這裏通過創建一個賬戶v6v6v6v6v6v6來說明如何使用這個命令
cleos system newaccount v1v1v1v1v1v1 v6v6v6v6v6v6 EOS7yUve8ruhLeuXgKKDmPVpkAd7mwGoF8wBLTFrENLguKEXXPSTq EOS7yUve8ruhLeuXgKKDmPVpkAd7mwGoF8wBLTFrENLguKEXXPSTq

--stake-net “0.0010” --stake-cpu “0.0010 EOS ” --buy-ram “2.000 EOS” –transfer

這樣就創建好了一個賬號v6v6v6v6v6v6,需要註意的是
a)、創建賬號需要用已有的賬號creator才能創建。
b)、buy-ram參數購買的內存大小不要少於3800bytes,內存價格可以通過https://www.eosrp.io#calc進行查看,將3800 * price就是這裏購買內存的價錢,這裏我寫了2.0000EOS。
c)賬戶名稱是12位。

2、將賬戶註冊成為producer
cleos system regproducer account producer_key [url] [location] example:

cleos system regproducer v6v6v6v6v6v6 EOS5QxBWBgjAzsHJyMFyvHHU7FHPAfFa96JRPZCJ1z7Z6TuYW1TDC “http://www.xxx.com”

3、設置競選節點配置文件
將節點的config.ini配置文件作如下修改
producer-name = 創建的賬號名
private-key =[“public-key”,”private-key”]
signature-provider=public-key=KEY:private-key

通過這三步運行Nodeos節點就成為了競選節點,可以通過以下命令查詢是否為bp節點
cleos get table eosio eosio producers

如何為競選節點投票

為節點投票首先需要抵押EOS,然後再進行投票,投票的數量為抵押的EOS數量,大致流程如下:

技術分享圖片

為競選節點投票可以通過兩種方式,第一種主要是通過錢包來進行投票,比如可以通過imtoken錢包來進行投票,第二種方式是通過cleos命令來進行投票,這裏主要講述如何通過cleos命令來進行投票。

1、首先需要解鎖錢包
cleos wallet unlock 錢包密碼

2、抵押EOS
在投票前,需要抵押EOS,抵押的EOS即為投票的票數。
cleos system delegatebw [OPTIONS] from receiver stake_net_quantity stake_cpu_quantity
stake_net_quantity, stake_cpu_quantity分別為抵押的net和cpu的EOS,兩項之和為此次抵押總的EOS,某賬戶抵押的EOS即為投票票數。

如何查看某賬戶抵押的EOS呢?
可以通過命令cleos get account 賬戶 查看賬戶的信息,信息中有net bandwidth(staked 和delegated)和 cpu bandwidth(staked 和delegated)將這四項相加即為某賬戶抵押的總EOS。

3.取消抵押EOS
如何收回所抵押的EOS,可以通過命令
cleos system undelegatebw from receiver unstake_net_quantity unstake_cpu_quantity
取消抵押後,抵押的EOS 3天後才能到賬,如果全部收回,則不能進行投票。

4、為節點投票
cleos system voteproducer prods [OPTIONS] voter producers...
producers最多30個
舉例:v1v1v1v1v1v1 為 v2v2v2v2v2v2和v3v3v3v3v3v3投票
cleos system voteproducer prods v1v1v1v1v1v1 v2v2v2v2v2v2 v3v3v3v3v3v3
所投的票數即為v1v1v1v1v1v1 抵押的EOS數量。

需要註意的是當我再次運行這個命令將 producers改變了,那麽voter所投的票對新的投票人進行投票,對原來的producers所投的票數將收回。

節點領取獎勵

如果競選節點所擁有的投票數達到一定比例就可以領取工資,可以通過下面的命令領取工資
cleos system claimrewards owner

代理投票

代理的作用就是替別人做出選擇投票,本身不需要抵押。在投票的時候,要先抵押,而投票的選擇有兩種,只能選擇一種,兩種不能同時存在。如果選擇投票,就直接投票了。如果選擇代理,就是自己抵押相當於是替代理抵押了,然後代理去選擇要投票的節點。
已經作為代理的賬號,不能在設置代理投票

1、註冊代理
cleos system regproxy [OPTIONS] proxy

2、抵押
cleos system delegatebw [OPTIONS] from receiver stake_net_quantity stake_cpu_quantity

3、 委托代理
cleos system voteproducer proxy [OPTIONS] voter proxy
註意這裏用的是proxy

4、代理投票
cleos system voteproducer prods [OPTIONS] voter producers...
註意這裏用的是prods

EOS源碼分析(一)投票系統