binghe distrubutied storage lab
眾所周知,礦工在filecoin網路的收益來源於儲存訂單收益和區塊獎勵,在網路前期儲存訂單收益較少,主要透過區塊獎勵獲取收益。那麼,你是否研究過,區塊獎勵是由哪幾部分構成?以及區塊獎勵這樣設定的原因?
區塊獎勵
區塊獎勵的主要構成是當前高度對每個礦工的基本區塊獎勵+小費+(可能的)懲罰。
基本區塊獎勵
當前高度每份區塊獎勵=(當前區塊高度為止的區塊獎勵總額-上一個區塊高度為止的區塊獎勵總額)/當前區塊高度的區塊數量
minerreward=(totalminerreward-lastminedreward)/當前區塊高度的區塊數量
如圖,區塊高度330003,有三個礦工獲得區塊獎勵,每個礦工獲得了一份獎勵。
每個礦工能獲得的基本區塊獎勵如下圖:
total_miner_reward=17928 445792055869175204095 nanofil
last_total_miner_reward=17928 397766464829775195448 nanofil
total_miner_reward-last_total_miner_reward=4802559103940008647nanofil
注:nanofil=10負18次方fil
每份出塊獎勵=基本出塊獎勵/出塊份數。
礦工能得到的基本區塊獎勵=每份區塊獎勵x該礦工獲得的出塊份數。
當前高度,每個礦工有1份區塊獎勵,礦工數為3。
因此每份區塊獎勵為:
miner_reward=48.02559103940008647/3=16.008530346466669549fil
小費
冰河的文章《filecoin官方資訊|filecoin的eip-1559》裡提到了gaspremium(交易者給礦工的附加利潤率)即小費。
在eip-1559下,交易建立者指定了費用上限(他們願意為打包此交易而花費的每單位gas最高的價格)。如果費用上限小於區塊的基準費率,則不能將其包括在區塊中。由於基準費率會被銷燬,交易建立者還指定了一個小費(tip),給於打包訊息的礦工作為激勵
在區塊獎勵中,凡是打包了有附加利潤率的訊息的區塊,打包訊息的礦工就能獲得這些訊息的gaspremium,所有訊息的消費合計為gasreward(gas獎勵)。
如圖中,區塊高度330003中的某節點,透過打包220條訊息,最終獲得1147697454159193 nanofil的gas小費獎勵,小費+基礎區塊獎勵的總額超過了其他兩個節點。
這是filecoin對打包訊息的礦工的正向激勵政策。
懲罰
有的時候,大家也會注意到,會有出塊成功,但是獎勵金額為0的情況出現。這不是因為filecoin沒有對礦工進行應有激勵,而是因為該礦工在打包訊息時,對不符合打包條件的訊息進行強行打包,被鏈懲罰。獎勵金額扣除懲罰費用仍不足以抵扣時,獎勵為0,剩餘不足抵扣的懲罰金額從miner錢包餘額中扣除。
那麼,強行打包指的是什麼呢?什麼情況下打包訊息會被懲罰?懲罰金額是多少?
其實,懲罰也是根據eip-1559中提過的三倍懲罰“不該打包交易”設定。
filecoin燃油費由三部分組成:基本費用、小費和超額燃油費。小費上文已經講過,是交易者設定gaspremium(小費匯率值),給願意打包的礦工的額外費率;超額燃油費,是filecoin網路不支援使用者支付過高的費用進行優選“插隊”,如果交易者對gaslimit(對一筆交易 gas 消耗的預估限制值)設定了不合理的指標,過低則會導致訊息上鍊失敗,過高則向交易者收取超額燃油費(以後有機會詳細分解超額燃油費)。(請查閱王大爺聊fil(一)詳解filecoin中的gas費機制)
另外一個影響,則是對礦工的懲罰,“不該打包交易”。
“不該打包交易”即是交易者在設定gasfeecap(交易者願意給礦工的打包訊息最高費率)時,設定值過低,使gasfeecap<basefee(全網基準費率)。這樣的方式下,交易者無法順利支付礦工費。如果礦工對這樣的訊息進行強行打包 ,filecoin網路會針對礦工進行三倍該訊息消耗差額費用的懲罰。透過該措施,讓礦工來監督“不該打包交易”。
如圖,某區塊高度,查詢某節點的區塊獎勵組成部分,發現既有懲罰金額penalty,也有gasreward。
小結
minerreward+gasreward-penatlty=最終區塊獎勵。透過公式,可以明確看出filecoin對礦工的鼓勵方向。filecoin希望礦工更多更主動打包訊息,增加網路上的實際打包量;監督“不該打包訊息”,減少訊息插隊、鏈擁堵的可能。
windowpost懲罰
上文提到的,是微觀層面上,區塊獎勵構成中礦工可能收到的額外獎勵和懲罰。那麼,從巨集觀層面上,礦工獲得的區塊獎勵份額,本身有額外獎勵或懲罰的可能嗎?
額外獎勵是沒有的,但是windowpost訊息提交上鍊失敗,會按照以下步驟,逐級懲罰:
1. 扇區第一次掉算力,沒有罰金。第一次不做懲罰,主要是為了避免鏈同步的問題等非資料問題導致的誤懲罰;
2. 扇區第二次掉算力(第一天和第二天連續掉),當次懲罰扣除扇區中對應3.51天的區塊獎勵。假設程式碼預估單t收益為0.2fil,那就是每個扇區扣除0.2/32*3.51=0.0219375fil;
3. 扇區連續第三次掉算力,懲罰扣除的方法如第二條。持續錯誤,每天都扣除相同區塊獎勵;
4. 如果扇區連續14天錯誤,扇區終止,除去已扣除區塊獎勵外,連帶扣掉扇區的質押金額,不做返還;
注意:
除去扇區連續14天錯誤導致的扇區中止,其餘懲罰均不涉及到質押金額;
filecoin重點懲罰內容主要在於連續錯誤,如果扇區第一天錯了,第二天對了,第三天再錯,不會有罰金。要連續錯誤,才會受到懲罰。因此,少量的懲罰,是正常的,目前filecoin的程式碼有一些不太完善,比如寫入的資料,有時候讀取葉子節點,會報告錯誤,但從系統io看沒有什麼異常,且有時候不出錯了就一直不出錯了,但資料始終未變。
但如果錯誤很多,且有連續錯誤,就需要分析每個錯誤原因,認真總結錯誤源頭,最佳化程式碼和演算法,避免相同問題。
參考:
https://github.com/filecoin-project/fips/blob/master/fips/fip-0002.md