poa幣挖礦
『壹』 POA(Proof of Activity)區塊鏈共識演算法
POA(Proof of Activity)演算法是一個區塊鏈的共識演算法,基本原理是結合POW(Proof of work)和POS(Proof of stake)演算法的特點進行工作,POW演算法和POS演算法的具體內容可以參考:
POW演算法 : https://www.jianshu.com/p/b23cbafbbad2
POS演算法 : https://blog.csdn.net/wgwgnihao/article/details/80635162
POA演算法相比於其他演算法可以改進網路拓撲,維持在線節點比例,需求更少的交易費同時減少共識演算法過程中的能量損耗。
POA演算法需求的網路中同樣包含兩類節點,礦工和普通參與者,其中普通參與者不一定一直保持在線。POA演算法首先由礦工構造區塊頭,由塊頭選出N個幣,這N個幣的所有者參與後續的校驗和生成塊的過程。
從這里可以看到POA演算法不僅與算力有關,後續的N個參與者的選舉則完全由參與者在網路中所擁有的幣的總數量決定。擁有越多幣的參與者越有機會被選為N個後續的參與者。而後續N個參與者參與的必要條件是這N個參與者必須在線,這也是POA命名的由來,POA演算法的維護取決於網路中的活躍節點(Active)。
POA演算法的一個理想的基本流程是,類似於POW協議,礦工構造出一個符合難度要求的塊頭,通過礦工得到的塊頭計算衍生出N個幣的編號,從區塊鏈中追溯可以得到這幾個幣目前所述的參與者。礦工將這個塊頭發送給這N個參與者,其中前N-1個參與者對這個塊進行校驗和簽名,最後第N個參與者校驗並將交易加入到該塊中,將這個區塊發布出去,即完成一個區塊的出塊。
一個理想過程如下圖所示:
在實際運行中,無法保證網路上所有參與者都在線,而不在線的參與者則無法進行校驗和簽名,這個無法被校驗和簽名的塊頭則會被廢棄。
即在實際運行中,應該是一個礦工構造出塊頭後廣播給各個參與者簽名,同時繼續重新構造新的塊頭,以免上一個塊頭衍生的N個參與者存在有某一個沒有在線,而導致塊頭被廢棄。
因此,在這種情況下,一個塊是否被確認不僅與礦工的計算能力有關同時也與網路上的在線比例有關。
與純POW相比,在與比特幣(POW)同樣10分鍾出一個塊的情況下,POA由於會有參與者不在線而產生的損耗,因此,10分鍾內礦工可以構造的塊的數量會更多,即塊頭的難度限制會降低,那麼礦工在挖礦過程中會造成的能量損耗也會降低。
與純POS相比,可以看到POA的出塊流程並不會將構造區塊過程中的相關信息上鏈,可以明顯減少區塊鏈上用於維護協議產生的冗餘信息的量。
本節對上訴協議中一些參數設置進行分析
在礦工構造出塊頭後對塊頭進行校驗和區塊構造的N個參與者的數量選定比較類似於比特幣中每一個塊的出塊時間的選取。比特幣中選擇了10分鍾作為每一個塊的期望出塊時間並通過動態調節難度來適應。
這里N的取值同樣可以選擇選定值或者動態調節。動態調節需要更加復雜的協議內容,同時可能會帶來區塊鏈的數據膨脹,而復雜的協議也增加了攻擊者攻擊的可能性。另外暫時沒有辦法證明動態調節可以帶來什麼好處。靜態調節在後續的分析(4 安全分析)中可以得到N=3的取值是比較合適的。
從上面的描述可以看到,構造新的區塊的除了礦工還有從塊頭中衍生出來的N個幣所有者。在構造出一個新的區塊後,這些參與者同樣應該收到一定的激勵,以維持參與者保持在線狀態。
礦工與參與者之間的非配比例與參與者的在線狀態相關。給予參與者的激勵與參與者保持在線狀態的熱情密切相關,越多參與者保持在線狀態,能更好地維持網路的穩定。因此,可以在網路上在線參與者不夠多的時候,提高參與者得到的激勵分成比例,從而激發更多的參與者上線。
如何確定當前參與者的在線情況呢?可以最後第N個參與者構造區塊時,將構造出來但是被廢棄的塊頭加入到區塊中,如果被丟棄的塊頭數量過多,說明在線人數過低,應當調節分成比例。
同時最後第N個參與者與其他參與者的分成同樣需要考慮,第N個參與者需要將交易加入區塊中,即需要維護UTXO池,同時第N個參與者還需要將被丟棄的塊頭加入新構建的區塊中。
為了激勵其將廢棄區塊頭加入新構建的區塊中,可以按照加入的區塊頭,適當增加一點小的激勵。雖然加入更多的區塊頭,可以在下一輪的時候增加分成的比例,應當足夠激勵參與者往區塊中加入未使用的塊頭了(這里參與者不可能為了增加分成而更多地加入區塊頭,每一個區塊頭都意味著一位礦工的工作量)。
一個參與者如果沒有維護UTXO池則無法構造區塊,但是可以參與前N-1個的簽名,因此為了激勵參與者維護UTXO池,作為最後一個構造區塊的參與者,必須給予更多的激勵,比如是其他參與者的兩倍。
從3.2的描述中可以知道一個用戶必須在線且維護UTXO池才可能盡可能地獲得利益。這種機制勢必會導致一些用戶將自己的賬戶託管給一個中心化的機構。這個機構一直保持在線,並為用戶維護其賬戶,在被選為構造區塊的參與者時參與區塊的構建並獲取利益。最後該機構將收益按照某種形式進行分成。
上面說到參與者必須用自己的密鑰進行簽名,而託管給某個機構後,這個機構在可以用這個密鑰簽名構造區塊的同時,也有可能使用這個密鑰消費用戶的財產。這里可以採用一種有限花銷的密鑰,這個密鑰有兩個功能,一個是將賬戶中的部分財產消費出去,另一個是將所有財產轉移到一個指定賬戶。在託管的時候可以使用這個密鑰,在被通知部分財產被花費後可以立即將所有財產轉移到自己的另一個賬戶下,以保證財產的安全。
從上面的分析可以看到,POA的安全性與攻擊者所擁有的算力和攻擊者所擁有的股權有關。假設攻擊者擁有的在線股權佔比為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成分叉。假設攻擊者股權總佔比為 ,網路中誠實用戶的在線比例為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成攻擊。
攻擊的分析表格如下:
從上文的分析可以看到,POA演算法相比於其他演算法可以改進網路拓撲,維持在線節點比例,需求更少的交易費同時減少共識演算法過程中的能量損耗。同時,PoA協議的攻擊成本要高於比特幣的純PoW協議。
參考文獻:Proof of Activity: Extending Bitcoin』s Proof of Work via Proof of Stake
『貳』 以太坊獲取測試鏈代幣
發起以太坊交易時需要消耗以太幣,開發智能合約做測試時如果在主網做測試成本會很高,並且主網的速度也比較慢,以太坊官方考慮到大家的這個需求提供了幾條測試鏈供大家使用,比較知名的有以下這幾個
以太坊的主測試網,環境最接近主網環境,有實際的雷鋒礦工在挖礦,只不過難度會比主網低很多,不過由於 Ropsten 採用與主網完全一樣的 PoW 共識,有時也就會和主網一樣擁堵,在這條鏈上做測試更容易測試出智能合約或者dapp里潛在的問題
用的是 PoA 機制,無需挖礦,所以出塊很快而且很穩定
和Rinkeby同樣使用的是 PoA 機制
打開這個網址 https://faucet.metamask.io/
點擊 request 1 ether from faucet 按鈕會通過web3連接錢包,獲取到錢包當前賬戶的以太坊地址,這個我使用的錢包是MetaMask,如果你沒有裝支持web3訪問的錢包,可以參考這篇文章安裝
https://www.jianshu.com/p/a84fe16f1af7
點擊連接
連接成功後底部會生成一筆交易,hash值
等交易確認後一個以太坊就到賬了
Rinkeby獲取測試幣相對麻煩些,需要注冊twitter賬號(需要翻牆)
打開這個網址 https://twitter.com/intent/tweet?text=Requesting%20faucet%20funds%20into%%20on%20the%20%23Rinkeby%20%23Ethereum%20test%20network
把推文中替換成你的地址點擊TWEET,發送成功後點擊分享圖標選擇Copy link to Tweet,把推文的鏈接復制下來
然後打開Rinkeby測試幣水龍頭網頁 https://www.rinkeby.io/#faucet
把剛才那個推文鏈接復制進輸入框,點擊Give me Ether
根據你的需要選擇要多少個代幣,要的越多到賬越慢😓,到賬時間相對其它的測試鏈很慢,如果著急就用別的鏈做測試
打開這個網址 https://faucet.kovan.network/ ,需要使用github賬號登陸
登陸成功後輸入以太坊地址,點擊發送就好了,轉賬交易就提交到鏈上了
同樣的等待交易確認就能收到一個以太幣了
『叄』 區塊鏈的共識機制
所謂「共識機制」,是通過特殊節點的投票,在很短的時間內完成對交易的驗證和確認;對一筆交易,如果利益不相乾的若干個節點能夠達成共識,我們就可以認為全網對此也能夠達成共識。北京木奇移動技術有限公司,專業的區塊鏈外包開發公司,歡迎洽談合作。下面我們將一下區塊鏈的幾種共識機制,希望對大家了解區塊鏈基礎技術有幫助。
因為區塊鏈技術的發展, 大家對共識機制這個詞也不再陌生,隨著技術發展,各種創新的共識機制也在發展。
POW工作量證明
比特幣就是使用PoW工作量證明機制,到後來的以太坊都是PoW的共識機制。Pow相當於算出很難的數學難題,就是計算出新區塊的hash值,而且計算的難度會每一段時間就會調整。PoW雖然是大家比較認可的共識機制,計算會消耗大量的能源,還有可能會污染環境。
POS權益證明
通過持有Token的數量和時長來決定獲得記賬權的機率。相比POW,POS避免了挖礦造成大量的資源浪費,縮短了各個節點之間達成共識的時間,網路環境好的話可實現毫秒級,對節點性能要求低。
但POS的缺點同樣明顯,持有Token多的節點更有機會獲得記賬權,這將導致「馬太效應」,富者越富,破壞了區塊鏈的去中心化。
DPOS權益證明
DPOS委託權益證明與POS原理相同,其主要區別在於,DPOS的Token持有者可以投票選舉代理人作為超級節點,負責在網路上生產區塊並維護共識規則。如果這些節點未能履行職責,將投票選出新的節點。同樣的弊端也是傾向於中心化。
POA權威證明
POA節點之間無需進行通信即可達成共識,因此效率極高。並且它也能很好地對抗算力攻擊,安全性較高。但是POA需要一個集中的權威節點來驗證身份,這就意味著它會損害區塊鏈的去中心化,這也是在去中心化和提高效率之間的妥協。
『肆』 搭建geth私有鏈和聯盟鏈網路
操作系統:linux或Mac OS
安裝geth執行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum
直接創建兩個geth的工作目錄,用於之後的組建聯盟鏈的使用:
mkdir eth-private1
mkdir eth-private2
首先 cd eth-private1 進入節點1的工作目錄該目錄下執行下面命令
geth --datadir data --nodiscover console (data是之後geth節點的數據目錄,可自行修改)
使用geth自帶的工具 puppeth 用於生成創世區塊,過程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, please)
輸入私鏈名稱後,會出現二級菜單,現在2:配置一個新的創世快
What would you like to do? (default = stats)
再次出現二級菜單,讓你選擇共識機制(這里採用poa共識)
Which consensus engine to use? (default = clique)
Ethash - proof-of-work(PoW) :工作量證明,通過算力達成共識 (以太坊就是使用這種方式)
Clique - proof-of-authority(PoA): 權威證明、通過預先設定的權威節點來負責達成共識 (不消耗算力,一般用於私有鏈測試開發)
如果選擇Pow的共識方法,直接輸入1,回車即可。
如果選擇PoA的共識方法,輸入2後會提示讓你選擇處快的間隔時間,一般測試開發使用可以設置相對的將處快時間設置較少5秒即可,然後會讓你選擇哪個賬戶來作為權威生成區塊(至少有一個,輸入剛才創建的賬戶,若只是單節點就輸入那個節點目錄生成的地址,若想組建聯盟鏈就填寫生成的兩個地址)
How many seconds should blocks take? (default = 15)
選擇好共識機制後會讓你指定給那些賬號初始化ether(至少有一個),輸入我們剛才創建的賬戶地址回車即可。
Which accounts should be pre-funded? (advisable at least one)
選擇輸入私有鏈的網路ID,任意數字即可(不能為1,1是公鏈),也可以不輸入會給定一個隨機數作為私有鏈的網路ID
Specify your chain/network ID if you want an explicit one (default = random)
選擇導出創世區塊配置文件
選擇導出創世區塊配置文件的保存路徑,可以保存到當前目錄,直接按回車即可
Which file to save the genesis into? (default = my-private-chain.json)
INFO [02-09|14:56:33] Exported existing genesis block
這樣就完成了創世區塊文件的配置了,直接退出puppeth即可。
輸入命令 geth --datadir data init private.json 其中data自己制定,private.json就是剛才生成的創世區塊
若出現如圖錯誤:
輸入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 進入控制台
--datadir data:節點的數據目錄
--syncmode full:塊同步的方式(若只是單節點可不填)
--port 2001: 網卡監聽埠
--networkid 1234:網路標識符
--rpc:開啟rpc服務
--rpcport "8545":rpc服務的埠
--rpccorsdomain "*":允許跨域請求的域名列表(逗號分隔)(瀏覽器強制)
--rpcaddr "0.0.0.0" :HTTP-RPC伺服器介面地址(默認值:「localhost」)
--rpcapi "db,eth,net,web3,personal,admin,clique":基於HTTP-RPC介面提供的API(私有鏈可以任意開發,公有鏈需要謹慎)
--nodiscover:不允許節點自動加入
若想搭建聯盟鏈,必須保證創世區塊一致,進入到剛才創建的eth-private2的目錄
將之前生成的創世區塊拷貝過來,初始化創世區塊,然後使用啟動命令啟動分別啟動兩個節點,進入控制台,使用 admin.nodeInfo 命令獲取節點的信息
總結:
兩個伺服器部署兩個節點是可以聯通的,但是只能使用兩個節點對應的地址進行挖礦,所以只能是兩個節點對應兩個地址進行挖礦,使用poa共識,當一個節點掛掉,挖礦停止,因為poa共識挖礦必須超過50%的節點進行錢增,現在只是兩個節點,掛掉一個節點挖礦就會停止等待另一個節點的確認,停掉的節點可以通過正常運作的節點信息重新連接到網路中。
問題:
同步塊有可能報錯情況:
1:Synchronisation failed "retrieved hash chain is invalid" 解決目前找到的方法是removedb 數據目錄 ,重新init創世區塊
2:內存溢出初步確認為開啟rpc服務造成的,有可能伺服器惡意被黑,暴力破解密碼,佔有內存,解決,將伺服器的ip設置一條防火牆
若存在問題可給本人留言或訪問本人的github: https://github.com/qi-shuo/geth-document 記錄了一些本人搭建使用的命令
『伍』 區塊鏈共識演算法——(四)PoA共識(Proof of Activity)
PoA共識(Proof of Activity)也稱為活動證明,其結合了PoW工作量證明與PoS權益證明的特點並進行了相應擴展,PoA共識具有更為復雜的記賬節點選取,同時有更為公平的獎勵機制。
PoA活動證明,主要的優勢是利用公平的激勵措施保證節點保持在線狀態,調動節點積極性,線上礦工即使不挖礦也有一定的概率獲取收益。大大提高了全網維護質量。
step1:每個礦工先利用自身算力通過工作量證明機制後得出nonce並生成一個空區塊頭,這個區塊頭除了沒有交易信息數據外其他數據與正常區塊一致。
step2:最先生成空區塊的節點廣播全網節點,全網節點接收到消息後,將此區塊的hash值與上一區塊的hash值進行拼接,然後加上n個固定後綴值進行再hash,最後得出n個值作為輸入,進入follow-the-satoshi程序,然後可輸出n個隨機權益持有者。
step3:前n-1個隨機權益持有者對空區塊進行簽名,第n個隨機權益持有者即為獲取到記賬權的節點,他將在空區塊的基礎上添加交易數據與簽名。
step4:第n個隨機權益持有者將打包好的區塊廣播全網,全網節點接收到區塊後進行驗證,驗證成功後上鏈。
step5:產生空區塊的礦工與第n個隨機權益持有者以及前n-1個已簽名的隨機權益持有者共享交易費獎勵。
『陸』 poa共識機制
我在使用puppeth工具創建PoA共識機制的時候,這里提示,要提供至少一個賬戶,請問,這里的賬戶作用是什麼? 是指挖礦的賬戶嗎?
答:poa是授權挖礦機制,這個設的是允許哪些賬戶挖礦,沒有設置的賬戶是不能挖礦的。後期可以通過投票機制修改授權挖礦賬戶。
鏈客區塊鏈技術問答社區
『柒』 挖礦挖的是什麼
首先,網路里挖礦是指礦工通過特定的設備進行一定工作量的運算,計算出符合要求的區塊哈希值從而爭取記賬權,並獲得相應的獎勵,也可以將其看成是一個向記錄著數字貨幣過往交易的賬本中添加新交易的過程。
上面的定義,局限性在於:沒有明確指出挖礦挖出的到底是什麼。挖礦挖出的是區塊,既然這些區塊由數字元號組成,那麼也可以說挖出的就是一串數字而已。但是,這些數字代表著礦工可以獲取的獎勵,或者說是收益,所以,挖出的又可以說成收益。但是區塊獎勵隨著幣價的波動而波動,影響幣價的最大因素在於受眾范圍的大小。比特幣在誕生之初,隨便一台電腦每月就可以挖出成百上千的比特幣,由於無人問津,礦工買個披薩都需要上萬枚比特幣。但是,隨著接受比特幣的人群增加,比特幣的價格翻了上萬倍!所以,最終我們可以說:挖礦挖的就是未來社會對某一數字貨幣的共識預期。
礦工,是指一群專注於「挖礦」的人,可以指一個人,也可以是一個群體。隨著技術的不斷進步,礦工不再僅僅局限於使用硬體設備挖礦,投入時間、精力、甚至腦力等,都可以在一些項目中挖出數量不一的數字貨幣。既然挖的是未來社會對某一數字貨幣的共識預期,這個收益也就充滿了不確定性。為了更好區分,筆者從「硬體」挖礦和「軟體」挖礦進行區分。
一、「硬體」挖礦
這個挖礦由於需要投入大量的硬體設備,所以基本上是前期接觸的人群獲利最大,而且要求很高,逐步向專業化過度。目前,單獨的某一個礦工已經很難在拼算力、拼硬體、拼迭代速度的礦工軍備競賽中生存下去,所以大部分礦工會選擇合作,通過共建的礦池來達到盈利的目的。
由於是挖的共識預期,這讓價格波動尤為劇烈,而硬體礦工的設備投入、維保、迭代、場地租賃、人工、水電費等都需要真金白銀的付出,所以這類礦工壓力巨大,一不小心可能會血本無歸。影響共識的因素是多方面的,為了實現穩定、可持續、最大化的利益,硬體礦工通常的選擇是:牛市將手中的幣賣出,換成法幣或者其他穩定幣,靜靜等待熊市;熊市中,則盡可能的屯幣,並用之前的積累的法幣或穩定幣來「過冬取暖」。
作為硬體礦工,對牛市期盼,同樣也不拒絕熊市的到來。牛市中,礦工大量增加,同樣會提升挖礦的難度,獎勵銳減;熊市中,幣價腰斬,但是挖礦的獎勵會因為礦工的減少而增加。通過牛熊交替,他們才能實現收益的最大化。而牛熊交替,即使四年一個周期,也需要付出常人難以忍受的堅持。
二、「軟體」礦工
這類礦工,是指通過投入資金、時間、精力、腦力等非硬體進行挖礦的行為。
隨著技術進步,POW機制已經不能滿足人們的需求,目前市面上已經被大量應用的共識演算法有三十多種,POS、DPOS、POI、POB、POA等可以看成是對POW機制的補充。在這類挖礦行為中,礦工通常是需要買入、持有一定量的數字貨幣,並通過數字貨幣的增值來獲取收益。為了實現利益的最大化,這個持有時間通常也是以年為單位,以幣市的牛熊交替為大周期,所以沒有耐心的礦工,註定會被淘汰出局。
這裡面還有一類礦工,藏寶閣想重點闡述一下:就是不投入資金而在各個項目初期進行擼糖果、薅羊毛的礦工(後面為便於闡述,統一用Token代替),當然在UGC平台進行創作,也歸於這類礦工之中。
數字貨幣目前除了有主流幣、山寨幣之分,還有世界幣、競爭幣之分。目前我們擼糖果、薅羊毛獲得的Token基本為競爭幣:項目方為了項目發展融資、推廣而發行的數字貨幣(不是為了彌補數字貨幣技術的不足)。這類數字貨幣首先會有一個中心化的團隊進行管理;其次會經歷一個由幼小到強大的成長過程;最後,是該項目的成長結果影響用戶手中幣的最終價值。這類挖礦中,礦工付出的是時間、精力、腦力等,獲得的Token 可以看成是股權、或者帶有分紅性質的權益證明。那麼,決定礦工收益的就是這個項目能否落地活下來,並最終被越來越多的群體所接受,如果能成長為區塊鏈行業中的獨角獸,那帶給礦工的收益就足以實現財富自由了。
但是,有競爭就會有優勝劣汰,競爭幣的項目方中,註定會有大量的項目死去,這樣礦工手裡的Token就是數字而已,不能產生任何的價值。所以,礦工通常面臨的選擇是:盡早賣出手中的Token換成BTC等主流幣或是耐心持有,等待這些Token像瑞波幣一樣,實現驚天大逆轉。五元投資,上億收益,這樣的機會用白日做夢已經不足以形容,但是幣圈就是一個造就神話的地方,所以藏寶閣的做法就是屯!畢竟手中的Token賣個十塊八塊的也沒什麼意思,藏寶閣更願意陪著項目一起成長,同時廣撒網,想辦法獲得更多的項目Token,提到錢包,靜靜等待項目成長帶來的紅利。
三、結語
從文中可以總結出:不論是採用 「硬體」,還是 「軟體」,挖礦挖出的都是對未來收益的預期:未來認可的人多,該幣帶來的收益就好;未來無人問津,這個幣就有可能歸零,礦工收益為負。但是預期,通常需要很長的時間來驗證,包括隨之而來的機會,也往往蘊藏在最初的平淡無奇之中。區塊鏈必然帶來顛覆性的社會變革,這是加入幣圈的礦工最基本的信仰,所以不妨放棄眼前的雞毛蒜皮,耐心持有數字貨幣,以牛熊更替的周期為操作頻率,這樣,才能獲取最大的收益。
『捌』 以太坊測試網路testNet匯總
在以太坊的交易過程中需要使用到以太幣,我們想要獲得以太坊主網上的代幣,只能通過GPU礦機挖礦或者交易所購買。然而在測試環境中獲取eth就容易多了。你可以在 私有鏈 中自己挖礦,或者公共測試鏈( testnet )中直接獲得。下面就和大家講講常用的幾種以太坊測試網路。
測試網路(簡稱testnet) 用於模擬乙太網主網的行為。擁有幾乎和以太坊等效的功能。因此可以在Testnets上開發和測試自己的智能合約,測試發幣等等,作為上鏈前的評估環境。當主網(簡稱mainnet)即將包含對以太坊協議的任何重大改變時,其測試主要在這些測試網路上完成。注意:這些網路上的代幣只能在測試環境(開發環境)中使用。
Ethereum以太坊有許多專用測試網路,他們由各種客戶端支持,最常用的3種分別是Ropsten、Kovan、Rinkeby。
以上3個是不需要在本地搭建任何服務就可以直接使用的。
對於開發中的測試環境,建議你使用 Rinkeby 或 KoVan 測試鏈。這是因為他們使用的工作量證明 POA 共識機制,確保交易和塊能夠一致並及時的創建。 Ropsten 測試鏈,雖然最接近公有鏈( Mainnet ),但是因為它使用的工作量證明是POW共識機制,過去已受到垃圾攻擊,對以太坊開發人員來說往往有更多的問題。
推薦:
以太坊測試網路Rinkeby使用教程
Rospten 以太坊測試網路的使用
『玖』 FileCoin: 有用的工作量證明
有用的工作量證明(Proof of Useful Work)是由著名的去中心化存儲項目 FileCoin 在它的白皮書里提出來的一個概念。工作量證明,Proof of Work,POW 是實現區塊鏈的一個重要共識方式,FileCoin 要實現一個基於區塊鏈的存儲平台。所以它也要做共識,它選擇的就是工作量證明共識。
首先我們來解釋一下常規的工作量證明。它是區塊鏈實現共識的一種方式。是比特幣採用的方式,所以,工作量證明就是俗稱的「挖礦」。比特幣做為一個去中心化的點對點交易系統,要在不同的節點上維護一個共同的完全相同的帳本,來記錄所有的交易,而且確保交易不會重復,不會一筆錢多花,就需要一個維護這個賬本一致性的規則。大家一起遵守這個規則,就是共識。區塊鏈常用的方法是,把這個賬本分成很多頁,每個頁就是一個區塊。每個區塊由一個節點來記賬,然後分發給其他節點復制,這樣所有節點上的賬本都是一樣的。但是每個區塊都由哪個節點來記錄,就需要一個大家都能遵守的規則。比特幣採用的方法,是讓所有的節點做一道簡單的數學題,題目很簡單,但是計算量很大,一般要10分鍾左右才能做出答案來。得到答案雖然很費時間,但是驗證答案是否正確很容易。然後所有的節點同時做題,第一個做出來的節點,就得到下一個區塊的記賬權。因為每個區塊都只有唯一一個最早做出題的節點,所以,每個區塊的記賬權是唯一的,而且也是很容易被其他節點驗證的。節點一旦驗證到其他節點得到了區塊記賬權,就必須復制區塊,加到本地區塊鏈中,同時開始下一個區塊記賬權的競爭。通過這種方式,比特幣就能確保所有節點的區塊鏈是一致的。
節點通過大量計算競爭區塊記賬權的的過程,就是工作量證明。所以,工作量證明系統(或者說協議、函數),是一種應對拒絕服務攻擊和其他服務濫用的經濟對策。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這個概念由 Cynthia Dwork 和 Moni Naor 1993 年在學術論文中首次提出。而工作量證明(POW)這個名詞,則是在 1999 年 Markus Jakobsson 和 Ari Juels 的文章中才被真正提出。
實現區塊鏈共識的方式還有很多,如POS,DPOS,POA,PBFT等等,但是工作量證明是唯一被時間驗證過(11年)的在公鏈上運行的區塊鏈共識機制。
工作量證明存在一個什麼樣的問題呢?還是用比特幣為例。比特幣節點為了獲取出塊權做得那個數學題,叫哈希運算。計算量非常大,每一台參與比特幣挖礦的礦機都要時刻進行這個計算,耗費大量的電力。這個計算不像其他的如大數據處理的計算,可以產生一些價值,它的唯一目的,就是競爭出一個節點,成為下一區塊的出塊者。目前比特幣每年消耗電量約25.5億瓦,這相當於全球電量的0.5%,是愛爾蘭一年的耗電量。反對POW的人紛紛指責挖礦將電力資源浪費在虛無縹緲的數字貨幣上,還稱之為自由主義的「泔水」。
但是,認為POW是浪費的電的人不知道,正是能源和算力打造了比特幣安全不可攻破的體系。
一張100元的現金不只是你我認為他值100,而是整個社會群體都認為他值100,價值就是來自於共識。比特幣是社區行為,來自不同國家的人聚集到社區,用互聯網來建立秩序,它的意義也是來自於群體共識,只要大家都相信比特幣有價值,只共識存在,那麼他就有價值,和法幣一模一樣。所以產生價值認同並不一定需要國家來驅動,比特幣改革了一種傳遞信任的載體和媒介,千百年來,人類社會通過多少流血戰爭建立的政權和共識,現在兵不血刃,只是耗費些電力就實現,豈不是更先進。
總結而言,要想設計一個去中心化而且安全的數字貨幣,能源和算力是必要的代價。工作量證明是以去中心化形式構建安全產權認證系統的唯一方案。所以認為POW是浪費的電的人不知道,正是能源和算力打造了比特幣安全不可攻破的體系。現在比特幣全網算力已經達到一個非常恐怖的地步,任何人想要發動51%算力攻擊已經是不可能的事情了,POW演算法使比特幣系統牢不可破。
為締造價值而產生的消耗不叫浪費。
但是,如此多的算力,是否可以用來創造更多的價值呢?用 FileCoin 的話說,工作量證明,還有沒有其他用途呢?
FileCoin 是分布式存儲行業的明星項目。他的開發團隊 Protocol Lab 就是開發 IPFS 協議的團隊,以至於很多人都分不清FileCoin 和 IPFS 的區別。可以說是2017年 FileCoin 的1CO,把這個行業推向巔峰,也引出了一系列的同類型項目。本文無意於贊譽或者貶低這個項目,只想結合自己從事這個行業的經驗,表達一些自己的觀點,盡量做到客觀公正。希望對從事這個行業的人有一些啟發。
FileCoin 在白皮書中提出要實現一個有用的工作量證明,實際上就是認可了,要打造一個安全不可攻破的區塊鏈,就必須消耗工作量。但是,他們不希望為這個工作量做出的計算完全被浪費,所以想把這個工作量利用起來。所以,他們想到的方法是,在工作量證明裡加入存儲空間的使用率。這樣,所有的節點為了形成共識,就必須提供存儲空間來存文件。這個存儲空間就可以存用戶數據,就是有用的。
那我們來看一下FileCoin是怎樣實現這種有用的工作量證明共識的。
Filecoin採用的共識機制並不是簡單的工作量證明,而是一種叫做預期共識(Expected Consensus,簡稱 EC)的機制。和其他主流共識機制目標一樣,讓礦工爭奪某一個高度唯一的出塊權而獲得獎勵。這個獲得出塊權的礦工叫做 Leader。在每一輪的出塊爭奪中,為了保證賬本的可靠性,都有一個唯一的 leader 來進行記賬。
也就是說,共識的核心就是選擇誰來當 Leader。選 Leader 的方式一般有兩種,互動式或者非互動式。互動式是要礦工之間互相投票的。比如 PBFT 就是互動式的,幾個參與選舉的人通過互發信息,得到多數票( 超過 2/3 )的人就是 Leader。預期共識採用了非互動式的方式來選舉 Leader。參與的各方根本不給彼此發消息,而是每個節點各自獨立私下進行運算。最後某個節點說,我贏得了選舉,然後提供一個證明,其他人可以很容易就驗證,他確實贏得了選舉。這個驗證方法就是零知識證明。
預期共識機制會為區塊鏈網路預設一個出塊的期望值。比如每1個紀元(epoch)生成1個區塊(block),但也有一個紀元可能出現空塊或多個區塊的情況。所以在 Filecoin 中,每個高度不是一個區塊,而是一個區塊集,叫做 TipSet,這個 TipSet 中可能包含了多個區塊。所以實際上 Filecoin 是 TipSet 鏈。預期共識無法保證每一輪只選舉出一個 Leader,所以會出現一輪中有多個 Leader 的可能,這樣鏈式結構就變成了DAG的網狀結構。所以 FileCoin 還會對 block 賦權重,實現有效收斂。
FileCoin 採用的 EC 共識有一個好處。對於傳統的 POS 共識機制來說,有一個重大問題就是無法控制分叉。也就是說,由於挖礦成本低,參與者可以同時挖多個鏈獲取利益。而預期共識對這一點做了設計,那就是通過權重和抵押機制來促使礦工選擇一條最好的鏈,對同時挖多個鏈的礦工進行懲罰,這樣可以非常快速地促進收斂。這說明 POW 和 POS 共同使用會是一種好的方式。
每一個礦工獲得出塊的可能與其當前有效存儲量佔全網總存儲量正相關。這種期望共識機制其實是更像是 POS 權益證明,只是它將POS里邊的權益(Staking)換成了有效存儲佔比。但是礦工的有效存儲從何而來呢?是通過存儲用戶數據得來。如何證明礦工存儲了用戶的數據,FileCoin 創造出一個新的證明機制叫 POST 時空復制證明。這個 POST 就是 FileCoin 的工作量了。把耗電的算力換成存儲有用數據的存儲空間,無意義的軍備競爭變成了存儲服務市場競爭。這確實是 FileCoin 的進步之處。只不過,為了成功的出塊,礦工通過預期共識被選為出塊節點後,必須在一個塊的時間里(現在是45秒)做個 POST 證明,成功提交,才能出塊。否則就失去機會。所以,為了確保礦工能在指定時間內出塊,最終官方還是決定要使用 GPU。雖然這 GPU 不是像工作量證明那樣一直不停的工作,但是在整個實現共識的過程中還是出現了跟有用的工作量證明思想相違背的耗能計算。
還有,談到預期共識的時候,我們說到每一個紀元出塊都不是一個塊,而是一組塊,那麼紀元這個概念就很重要了。怎麼控制紀元呢?每個礦工在參與選舉前,需要先生成一個 Ticket,這個 Ticket 實際上是一個隨機數,他需要走一個 VDF 和 VRF 的流程,這個 VDF 全稱 Verifiable Delay Function,可驗證的延時函數。他的計算流程是串列的,需要花費一定的時間,並且這個時間無法通過多核並行的方式進行縮減。這保證了每個礦工產生 Ticket 時必須要消耗的時間,沒有人可以通過優化硬體的方式來獲得加速。聽上去這函數很完美,可是,這個 VDF 根本還不存在!現在 FileCoin 測試網直接使用了一個等待函數 sleep,這是 UDF,Unverifiable Delay Function。現在最接近的 VDF 解決方案,也是需要消耗大量計算資源的。說白了,還是要耗電,還是不環保。
所以,有用的工作量證明,依然只是一個美好的願望,理想很豐滿,但現實很骨感。被譽為下一個比特幣的 FIL,還要繼續為實現這個顛覆性的共識而努力。
總結一下FileCoin存儲礦工獲取激勵的流程:用戶存儲數據,支付FIL費用 -> 礦工存儲數據 -> 生成復制證明 -> 完成時空證明 -> 經過EC共識,選出出塊Leader -> 獲取打包權 -> 礦工獲取FIL獎勵
在這個流程圖上,可以看到,礦工可以在兩個地方獲取獎勵。一個是存儲用戶文件的時候可以得到用戶的FIL獎勵。一個是在獲取區塊打包權後獲得FIL。而得到區塊打包權的一個前提就是存有足夠多的用戶數據。所以,在存儲需求不夠大的情況下,礦工會從用戶那裡收取很低廉的費用。在用戶不夠的情況下,甚至會倒貼錢自己付FIL存數據,只為能夠存足夠多的數據,在 EC 共識中被選成 Leader 得到打包獎勵。這樣產生的效果是,FileCoin 對用戶非常友好,存儲費用非常低。所以,一定會吸引很多的應用來這個平台上做開發。但是缺點也很明顯,如果存儲量不夠大,礦工根本沒法跟其他人爭奪出塊權,所以得不到獎勵。最後整個平台會朝著大礦工,大礦池的方向發展,這跟 FileCoin 想把所有閑散伺服器利用起來實現分布式存儲的初衷是違背的。或者說,一定要等到這個行業具有一定規模,技術更成熟,才有小礦機挖礦的機會。
我們先來簡單的講一講中心化存儲和去中心化存儲各自的利弊。中心化存儲設備統一管理,可靠性好,性能高,去中心化存儲數據天然分散,易於流通,容災性好,但是可靠性低。從經濟角度來說,中心化存儲是重資產投入,成本高。去中心化存儲通過區塊鏈激勵層,用戶自行加入,輕資產,可降低存儲總成本。未來應用數據的存儲和處理還會是以中心化存儲為主,而去中心化存儲因為是分布式網路,主要可用於熱門數據流量分發。同時,因為沒有中心化所有權,可以成為去中心化應用的首選。
市場上有一種說法是,去中心化網路適合冷數據的備份,其實這並不是去中心化存儲的優點,實在是因為把熱數據放到去中心化網路上太不可靠,處理性能也跟不上。所以,如果去中心化存儲能實現一定的規模效應,大大降低存儲成本,把冷數據備份當作核心業務,並把目標定位在今天因為成本太高沒被企業存儲的冷數據,會是一個很好的發展方向。
如此說來,從技術上講,去中心化存儲並不一定比中心化存儲有優勢。如果能推行一種新的模式,把去中心化的經濟激勵和中心化的存儲合在一起,就能吸收兩者的長處。真正實現有用的工作量。FileCoin 未來可能促成的大礦場模式的數據中心,可能更有市場。
在11年後的今天,比特幣並沒有實現它成為一個點對點的電子支付貨幣的初衷,但阻止不了人類前赴後繼的去買它,擁有它。同樣,我相信 FileCoin 已經得到足夠大的社群,礦工和開發者的支持,即使在可預見的未來,它不會促成分布式存儲應用的全面落地(也許這從來不是 FileCoin 的目標),但我還是相信會有很多人會因為它的共識去購買它,持有它。上升到哲學層面,人類在為真理買單。
那麼在實際生活中,何為有用,或者說,我們到底是在用存儲做共識還是用共識做存儲?FileCoin 是前者。FileCoin 想要基於存儲工作量實現的去中心化的共識,理論上是完美的,追求完美,人類是要付出代價的。這也是為什麼在這個項目上我們等待了這么長的時間。但是一旦實現,它可能會為人類帶來巨大價值,對市場帶來無窮大的號召力。
只不過去中心化不是萬物的靈葯。中心化的一個最大優勢是它的效率非常高。像dPOS或者聯盟鏈這樣的弱中心化共識兼顧兩者優勢,能更快速的把應用推向市場,提前啟動分布式存儲行業,推進分布式存儲應用落地。所以,我們既追求用存儲做共識,也追求用共識做存儲,根據實際需求來做出我們的選擇。在這個過程中,相信區塊鏈也會進一步發展,逐步優化,變得越來越有用。