隨著今年四五月乙太幣的暴漲,適合挖礦的顯卡也因此在全台3C賣場全面斷貨超過三個月,湧入挖礦的結果導致ETH的全網算力的上升,也連帶帶起了其他山寨幣的挖礦潮流。而算力的指數上升,也讓挖礦難度連帶以同樣的速度增加,雖然難度增加,但幣值的急遽上升填補了難度帶來的負面效應,在過去甚至可以達到三個月回本的速度。
(ETH推出以來的挖礦難度 https://etherscan.io/chart/difficulty)
冰河期的到來
(https://etherscan.io/chart/blocktime)
但挖礦的好光景不會持續太久,為了避免貨幣發行過量導致的通貨膨脹,BTC跟乙太幣都設計了類似的機制:BTC每四年讓產出量減半,乙太幣則是每隔一段時間讓出塊所需的時間增加,也就是上圖中會看到最右邊出塊時間的上升(而且是以指數方式遞增)。
關於程式碼的部分可以參考這裡,截圖在下面
現在所謂的挖礦就是在每一塊區塊出現之後,透過算力去競爭區塊(記帳本)的所有權,勝利者就可以獲得5 ETH的獎賞,可以想像成每隔一段時間,系統就會多出5個乙太幣分潤給礦工,但隨著區塊鍊的穩定增長,給予礦工的獎勵就必須隨之變少以穩定整個幣值,因此未來原本的出塊預設是這樣的:
08/01:21秒出一塊
08/25:25秒出一塊
09/24:32秒出一塊
10/31:41秒出一塊…..(後略)
到最後的結果就是......
Casper(POS)
過去的POW(Proof of work),可以想像成使用算力作為股份,擁有越多的顯卡取得下一塊乙太幣的機會就越大,優勢在於可以在區塊鍊剛推出時,透過給予算力提供者(礦工)的獎勵,來迅速得到支持區塊鍊所需的節點數目與算力,並且穩定住整個生態系。但若無限制地給予礦工獎勵,那麼整個貨幣就會陷入嚴重的通貨膨脹,因此BTC或乙太幣都設計有類似的機制在最後減少貨幣的產出,以維持經濟學上貨幣必要的稀少性。但目前乙太幣的通膨大概是12-13%,遠遠高出開發團隊預設的4%(Ref),因此才必須要有難度炸彈與冰河期的設定來減少貨幣的供給量。隨著時間過去POW的獎勵會逐漸減少,而POS的獎勵會逐漸增多,直到整個獎勵移至POS為止。
而未來必定會推行的POS則是以現在擁有的乙太幣的數量與幣齡當作股份,擁有越多的乙太幣或是越久的乙太幣幣齡,取得下一區塊的機會就會越大,把它想成類似定存的概念可能會比較好理解:定存越多金額進去、綁約越長時間,得到的利率會越高。從區塊鍊驗證交易的角度來看其實相當合理,擁有越多乙太幣的權重越大,講話越有份量,因為擁有越多乙太幣的人越不會想搞怪,才能讓乙太幣維持穩定的幣值,也可以避免像BTC一樣最後算力集中在中國礦場的情形發生,最後就是避免能源的浪費救救北極熊。
此外POS也預設了避免有人想動手腳或分岔出新鍊的狀況,如果驗證者最後分支出新的,或是兩條鍊來破壞區塊鍊的運作的話,那麼它的乙太幣就會被收回,藉由對攻擊失敗的懲罰,來避免未來可能會發生的攻擊。
另外 UASF(User Activated Soft Fork)也跟POS擁有類似的精神,簡單一點來說就是傳統上POW由礦工競爭決定區塊鍊,礦工是實際區塊鍊的擁有者,有權利投票或改變事情,但是UASF的特色就是,讓使用者、交易所、錢包,都有能力參與區塊鍊上的改變,礦工不再是區塊鍊的唯一。(圖片截自影片)
POS+POW混成( Hybrid Architecture)
未來預計在乙太坊推行的改變是:每100個POW產生的Block,都會相對應產生一個檢核點(checkpoints),除非三分之一以上驗證者的籌碼(乙太幣)同意,檢核點才會消失或者被更改。這是Casper的基本原理:利用持有的乙太幣多寡做為投票的權重。另外隨著時間過去,POS產生的區塊數目也會逐漸增多,而POW產生的區塊則會逐漸減少,以至於最後向全POS靠攏。至於為什麼需要至少三分之一以上的籌碼,就跟下面的拜占庭問題演算法有關。
下面得到關於Casper的細節多半是從這裡得來的,片長大概一個半小時,講得蠻清楚的,有空可以看一看。下面就先將Casper拆解成拜占庭共識演算法、Proof of Stake兩部分
拜占庭共識/容錯演算法
軍隊與軍隊之間分隔很遠,傳訊息的信差可能在途中路上陣亡,或因軍隊距離,不能在得到消息後即時回覆,發送方也無法確認消息確實丟失的情形,導致不可能達到一致性。在分布式計算上,試圖在非同步系統和不可靠的通道上達到一致性是不可能的。因此對一致性的研究一般假設信道是可靠的,或不存在非同步系統上而行。(From Wikipedia)
去中心化的區塊鍊會有一個很嚴重的問題:每個節點都是獨立而且平等的,但會因為每個區塊鍊間網路延遲的關係導致收到資訊的時間點與內容不同。甚至會有人蓄意破壞區塊鏈上的資訊,既然如此在取得正確的共識上就會有困難,如何在各個網路節點必然因延遲產生的資訊/時間差異便是拜占庭共識演算法想要解決的核心問題。
總之, Leslie Lamport已經證明若要保持區塊鍊上的安全,則造假節點數必須小於等於1/3*總節點數,也就是上面的那個CheckPoint為何需要至少1/3驗證的由來。
但這樣做會產生另一個問題,當將軍(節點)詢問彼此收到的訊息時,需要的運算量會以將軍(節點)的數目以指數方式增加,在大量應用上會產生困難,因此 Practical Byzantine Fault Tolerance(PBFT)的發現成功把拜占庭問題的難度從指數減少到多項式上。
Proof of Stake(POS)的三步驟
拜占庭容錯演算法Practical Byzantine Fault Tolerance(PBFT)是下個月份(預計/可能/或許)會慢慢開始推行的Casper(POS)核心演算法,而PBFT與POS主要又可以分成三個步驟
- Pre-Prepare
節點收到Client的要求後會先傳給備份節點進行備份,如果備份節點接受而且認可,就會進入下一個prepare階段。這個跟下一個步驟都是為了避免Client或發布資訊的節點是惡意的情形發生。 - Prepare
這個階段會回頭去檢索所有的檢核點的hash值來確保區塊鍊是可以被信賴的,而發布Prepare的限制就是該Epoch必須擁有2/3以上的Prepares。 - Commit
一旦2/3的Stake被押注在一個新的檢核點上,這時候區塊就被產生而且決定了(Finalized)。但若決定後回頭根據拜占庭演算法發現某幾個下注的Stake是惡意的,則他們的ETH就會被收回去。
Casper(POS)的拖延與難度炸彈的延遲
因為去年乙太幣被駭事件與其他事情,原定今年底開始推行的POS確定會被延後至少一年,因此目前最有可能的結果是,隨著十月份Metropolis Byzantium的升級與推出,屆時礦工最在意的出塊有可能改成15~20秒出一個塊,而每塊變成3 ETH (Ref),但也有消息指出ETH的資金方要求dev提早推行POS以避免乙太幣的持續通貨膨脹。
這數字大概就是9/23難度炸彈爆炸後的每30秒左右出一塊新區塊,每塊5 ETH換算出來的,使之變成每15~20秒出一個新區塊,每區塊的產出降成3 ETH,也就是將後續的難度炸彈解開,把出塊速度鎖死在九~十月上,暫時避免挖礦冰河期的到來。
我的理解上是當初難度炸彈的設計是為了2017年底銜接的POS,原定計畫是今年底會開始慢慢從POW→POW+POS混合→POS的進度靠攏,但截至目前全POS確定至少會被推遲到2018年末,也就造成了原先設計的難度炸彈一定得在今年底前拆除,但不代表冰河期不會到來,炸彈只是暫時被延後,全POS的到來是無可避免的。
如果難度炸彈不先拆掉或延後 ,那麼在幣值不變與算力穩定增長的狀態下,今年年底到明年初時挖礦的收益會跌至目前的1/3以下,甚至是1/10。
實際上dev延遲difficulty bomb也不是第一次,詳情可以參考這裡
經過計算的礦工不會把未來的收益寄望在幣值的升值上,如果挖礦獲利的唯一方法就是等待幣值的升值,那麼為何不直接買幣就好?
以現在的挖礦情形來說,利潤的*30–40%是電費的成本、20%為設備的折舊,也就是只要目前的收益跌到三分之二以下,礦工就會開始入不敷出甚至拋售硬體,礦工跑光的後果就是:整個區塊練就會歹了了,或是跟BTC一樣整個算力集中在具有便宜電優勢的中國礦廠上,更何況中國已經著手開始進行虛擬貨幣的整頓。
*以單卡RX470 4G 28mh/s計算,單卡成本約至少 NTD$8000(含主機板等配件攤提)、每月利潤約NTD$1000(9/23難度炸彈後)、月耗電100度、硬體折舊每月約為設備總價的3%,再以一度電3–4.5元計得出
Ref:
https://www.cryptocompare.com/coins/guides/the-ethereum-releases-of-frontier-homestead-metropolis-and-serenity/
https://medium.com/rigoblock/metropolis-casper-solidity-interface-772f35b5e8b8
https://www.cryptocompare.com/coins/guides/what-is-the-ethereum-ice-age/
http://www.ithome.com.tw/news/115341
https://read01.com/zh-tw/O22oM0.html#.WZ625ygjGUk
打賞地址
BTC:1DKE2E8EBBymkwLMvX5r3QdqptnCHMEU8B
ETH:0x90efd1c627cbeb6f8050476221f59b0c99254f5a
MCN:0xfa8baa0e87daa4e2f03fba2735507aa64534cbd8
(本文同步投稿至GPU Mining 顯示卡挖礦社團)