1. 以太坊虛擬機(EVM)是什麼
以太坊是一個可編程的區塊鏈。與比特幣不同,以太坊並沒有給用戶提供一組預定義的操作(比如比特幣交易),而是允許用戶創建他們自己的操作,這些操作可以任意復雜。這樣,以太坊成為了多種不同類型去中心化區塊鏈的平台,包括但是不限於密碼學貨幣。
EVM為以太坊虛擬機。以太坊底層通過EVM模塊支持智能合約的執行和調用,調用時根據合約的地址獲取到代碼,生成具體的執行環境,然後將代碼載入到EVM虛擬機中運行。通常目前開發智能合約的高級語言為Solidity,在利用solidity實現智能合約邏輯後,通過編譯器編譯成元數據(位元組碼)最後發布到以坊上。
EVM架構概述
EVM本質上是一個堆棧機器,它最直接的的功能是執行智能合約,根據官方給出的設計原理,EVM的主要的設計目標為如下幾點:
簡單性
確定性
空間節省
為區塊鏈服務
安全性保證
便於優化
針對以上幾點通過對EVM源代碼的閱讀來了解其具體的設計思想和工程實用性。
EVM存儲系統機器位寬
EVM機器位寬為256位,即32個位元組,256位機器字寬不同於我們經常見到主流的64位的機器字寬,這就標明EVM設計上將考慮一套自己的關於操作,數據,邏輯控制的指令編碼。目前主流的處理器原生的支持的計算數據類型有:8bits整數,16bits整數,32bits整數,64bits整數。一般情況下寬位元組的計算將更加的快一些,因為它可能包含更多的指令被一次性載入到pc寄存器中,同時伴有內存訪問次數的減少。目前在X86的架構中8bits的計算並不是完全的支持(除法和乘法),但基本的數學運算大概在幾個時鍾周期內就能完成,也就是說主流的位元組寬度基本上處理器能夠原生的支持,那為什麼EVM要採用256位的字寬。主要從以下兩個方面考慮:
時間,智能合約是否能執行得更快
空間,這樣是否整體位元組碼的大小會有所減少
gas成本
時間上主要體現在執行的效率上,我們以兩個整型數相加來對比具體的操作時間消耗。32bits相加的X86
的匯編代碼
mov eax, dword [9876ABCD] //將地址9876ABCD中的32位數據放入eax數據寄存器
add eax, dword [1234DCBA] //將1234DCBA地址指向32位數和eax相加,結果保存在eax中
64bits相加的X86匯編代碼
mov rax, qword [123456789ABCDEF1] //將地址指向的64位數據放入64位寄存器
add rax, qword [1020304050607080] //計算相加的結果並將結果放入到64位寄存器中
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
2. 3070算力大概多少,一天能挖多少多少以太坊
探討3070顯卡的挖礦能力,特別是以太坊(ETH)的挖礦。首先,明確挖一次ETH所需的內存讀取量為128位元組,共重復64次,合計8192位元組。
接著,觀察到3070顯卡採用GDDR6內存技術,其頻率為1.75GHz,且擁有256位寬度的內存介面。通過計算,其帶寬可達1.75GHz * 8 * 256B,即448GBps。
基於此帶寬,計算3070理論最大算力為448GBps / 8192B,得出約為54.6M次/秒。考慮到實際應用中的效率損失,其算力約為50M次/秒。
如果對內存進行超頻操作,提升至2100MHz,理論算力將提升至約65M次/秒,實際應用中估計為60M次/秒。綜上所述,3070在以太坊挖礦中的算力表現大致在50M次/秒左右,經超頻後可達60M次/秒左右。
3. 浠ュお鍧婃繪暟閲忓氬皯
浠ュお鍧婃繪暟閲忎笉鑳戒竴姒傝岃猴紝鍏舵瘡騫寸殑浜ч噺鏄涓嶅悓鐨勩備互澶鍧婃垚絝嬩簬2014騫淬傚綋騫寸殑7銆8鏈堬紝涓轟簡浼楃癸紝澶х害鍙戣屼簡7200涓囦互澶甯併備紬絳圭粨鏉熷悗錛屼互澶鍧婃瘡騫寸殑浜ч噺閮介檺鍒跺湪7200涓囩殑25%錛屽嵆1800涓囥備互澶鍧婂拰姣旂壒甯佷竴鏍鳳紝鍧囦負涓縐嶈櫄鎷熻揣甯侊紝閮芥槸閫氳繃鈥滄寲鐭庫濊岃幏寰椾竴瀹氭暟閲忕殑鉶氭嫙璐у竵錛屼絾姣旂壒甯佺殑鈥滅熆鏈衡濇槸渚濋潬綆楀姏錛岃屼互澶鍧婁富瑕佹槸渚濋潬鏄懼崱鍜屽唴瀛樸
鎴戜滑閫氳繃浠ヤ笂鍏充簬浠ュお鍧婃繪暟閲忓氬皯鍐呭逛粙緇嶅悗,鐩鎬俊澶у朵細瀵逛互澶鍧婃繪暟閲忓氬皯鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
4. 以太坊是什麼丨以太坊開發入門指南
以太坊是什麼丨以太坊開發入門指南
很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基於以太坊平台,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。
以太坊是什麼
以太坊(Ethereum)是一個建立在區塊鏈技術之上, 去中心化應用平台。它允許任何人在平台中建立和使用通過區塊鏈技術運行的去中心化應用。
對這句話不理解的同學,姑且可以理解為以太坊是區塊鏈里的Android,它是一個開發平台,讓我們就可以像基於Android Framework一樣基於區塊鏈技術寫應用。
在沒有以太坊之前,寫區塊鏈應用是這樣的:拷貝一份比特幣代碼,然後去改底層代碼如加密演算法,共識機制,網路協議等等(很多山寨幣就是這樣,改改就出來一個新幣)。
以太坊平台對底層區塊鏈技術進行了封裝,讓區塊鏈應用開發者可以直接基於以太坊平台進行開發,開發者只要專注於應用本身的開發,從而大大降低了難度。
目前圍繞以太坊已經形成了一個較為完善的開發生態圈:有社區的支持,有很多開發框架、工具可以選擇。
智能合約
什麼是智能合約
以太坊上的程序稱之為智能合約, 它是代碼和數據(狀態)的集合。
智能合約可以理解為在區塊鏈上可以自動執行的(由事件驅動的)、以代碼形式編寫的合同(特殊的交易)。
在比特幣腳本中,我們講到過比特幣的交易是可以編程的,但是比特幣腳本有很多的限制,能夠編寫的程序也有限,而以太坊則更加完備(在計算機科學術語中,稱它為是「圖靈完備的」),讓我們就像使用任何高級語言一樣來編寫幾乎可以做任何事情的程序(智能合約)。
智能合約非常適合對信任、安全和持久性要求較高的應用場景,比如:數字貨幣、數字資產、投票、保險、金融應用、預測市場、產權所有權管理、物聯網、點對點交易等等。
目前除數字貨幣之外,真正落地的應用還不多(就像移動平台剛開始出來一樣),相信1到3年內,各種殺手級會慢慢出現。
編程語言:Solidity
智能合約的默認的編程語言是Solidity,文件擴展名以.sol結尾。
Solidity是和JavaScript相似的語言,用它來開發合約並編譯成以太坊虛擬機位元組代碼。
還有長像Python的智能合約開發語言:Serpent,不過建議大家還是使用Solidity。
Browser-Solidity是一個瀏覽器的Solidity IDE, 大家可以點進去看看,以後我們更多文章介紹Solidity這個語言。
運行環境:EVM
EVM(Ethereum Virtual Machine)以太坊虛擬機是以太坊中智能合約的運行環境。
Solidity之於EVM,就像之於跟JVM的關系一樣,這樣大家就容易理解了。
以太坊虛擬機是一個隔離的環境,在EVM內部運行的代碼不能跟外部有聯系。
而EVM運行在以太坊節點上,當我們把合約部署到以太坊網路上之後,合約就可以在以太坊網路中運行了。
合約的編譯
以太坊虛擬機上運行的是合約的位元組碼形式,需要我們在部署之前先對合約進行編譯,可以選擇Browser-Solidity Web IDE或solc編譯器。
合約的部署
在以太坊上開發應用時,常常要使用到以太坊客戶端(錢包)。平時我們在開發中,一般不接觸到客戶端或錢包的概念,它是什麼呢?
以太坊客戶端(錢包)
以太坊客戶端,其實我們可以把它理解為一個開發者工具,它提供賬戶管理、挖礦、轉賬、智能合約的部署和執行等等功能。
EVM是由以太坊客戶端提供的。
Geth是典型的開發以太坊時使用的客戶端,基於Go語言開發。 Geth提供了一個互動式命令控制台,通過命令控制台中包含了以太坊的各種功能(API)。Geth的使用我們之後會有文章介紹,這里大家先有個概念。
Geth控制台和Chrome瀏覽器開發者工具里的面的控制台是類似,不過是跑在終端里。
相對於Geth,Mist則是圖形化操作界面的以太坊客戶端。
如何部署
智能合約的部署是指把合約位元組碼發布到區塊鏈上,並使用一個特定的地址來標示這個合約,這個地址稱為合約賬戶。
以太坊中有兩類賬戶:
· 外部賬戶
該類賬戶被私鑰控制(由人控制),沒有關聯任何代碼。
· 合約賬戶
該類賬戶被它們的合約代碼控制且有代碼與之關聯。
和比特幣使用UTXO的設計不一樣,以太坊使用更為簡單的賬戶概念。
兩類賬戶對於EVM來說是一樣的。
外部賬戶與合約賬戶的區別和關系是這樣的:一個外部賬戶可以通過創建和用自己的私鑰來對交易進行簽名,來發送消息給另一個外部賬戶或合約賬戶。
在兩個外部賬戶之間傳送消息是價值轉移的過程。但從外部賬戶到合約賬戶的消息會激活合約賬戶的代碼,允許它執行各種動作(比如轉移代幣,寫入內部存儲,挖出一個新代幣,執行一些運算,創建一個新的合約等等)。
只有當外部賬戶發出指令時,合同賬戶才會執行相應的操作。
合約部署就是將編譯好的合約位元組碼通過外部賬號發送交易的形式部署到以太坊區塊鏈上(由實際礦工出塊之後,才真正部署成功)。
運行
合約部署之後,當需要調用這個智能合約的方法時只需要向這個合約賬戶發送消息(交易)即可,通過消息觸發後智能合約的代碼就會在EVM中執行了。
Gas
和雲計算相似,佔用區塊鏈的資源(不管是簡單的轉賬交易,還是合約的部署和執行)同樣需要付出相應的費用(天下沒有免費的午餐對不對!)。
以太坊上用Gas機制來計費,Gas也可以認為是一個工作量單位,智能合約越復雜(計算步驟的數量和類型,佔用的內存等),用來完成運行就需要越多Gas。
任何特定的合約所需的運行合約的Gas數量是固定的,由合約的復雜度決定。
而Gas價格由運行合約的人在提交運行合約請求的時候規定,以確定他願意為這次交易願意付出的費用:Gas價格(用以太幣計價) * Gas數量。
Gas的目的是限制執行交易所需的工作量,同時為執行支付費用。當EVM執行交易時,Gas將按照特定規則被逐漸消耗,無論執行到什麼位置,一旦Gas被耗盡,將會觸發異常。當前調用幀所做的所有狀態修改都將被回滾, 如果執行結束還有Gas剩餘,這些Gas將被返還給發送賬戶。
如果沒有這個限制,就會有人寫出無法停止(如:死循環)的合約來阻塞網路。
因此實際上(把前面的內容串起來),我們需要一個有以太幣余額的外部賬戶,來發起一個交易(普通交易或部署、運行一個合約),運行時,礦工收取相應的工作量費用。
以太坊網路
有些著急的同學要問了,沒有以太幣,要怎麼進行智能合約的開發?可以選擇以下方式:
選擇以太坊官網測試網路Testnet
測試網路中,我們可以很容易獲得免費的以太幣,缺點是需要發很長時間初始化節點。
使用私有鏈
創建自己的以太幣私有測試網路,通常也稱為私有鏈,我們可以用它來作為一個測試環境來開發、調試和測試智能合約。
通過上面提到的Geth很容易就可以創建一個屬於自己的測試網路,以太幣想挖多少挖多少,也免去了同步正式網路的整個區塊鏈數據。
使用開發者網路(模式)
相比私有鏈,開發者網路(模式)下,會自動分配一個有大量余額的開發者賬戶給我們使用。
使用模擬環境
另一個創建測試網路的方法是使用testrpc,testrpc是在本地使用內存模擬的一個以太坊環境,對於開發調試來說,更方便快捷。而且testrpc可以在啟動時幫我們創建10個存有資金的測試賬戶。
進行合約開發時,可以在testrpc中測試通過後,再部署到Geth節點中去。
更新:testrpc 現在已經並入到Truffle 開發框架中,現在名字是Ganache CLI。
Dapp:去中心化的應用程序
以太坊社區把基於智能合約的應用稱為去中心化的應用程序(DecentralizedApp)。如果我們把區塊鏈理解為一個不可篡改的資料庫,智能合約理解為和資料庫打交道的程序,那就很容易理解Dapp了,一個Dapp不單單有智能合約,比如還需要有一個友好的用戶界面和其他的東西。
Truffle
Truffle是Dapp開發框架,他可以幫我們處理掉大量無關緊要的小事情,讓我們可以迅速開始寫代碼-編譯-部署-測試-打包DApp這個流程。
總結
我們現在來總結一下,以太坊是平台,它讓我們方便的使用區塊鏈技術開發去中心化的應用,在這個應用中,使用Solidity來編寫和區塊鏈交互的智能合約,合約編寫好後之後,我們需要用以太坊客戶端用一個有餘額的賬戶去部署及運行合約(使用Truffle框架可以更好的幫助我們做這些事情了)。為了開發方便,我們可以用Geth或testrpc來搭建一個測試網路。
註:本文中為了方便大家理解,對一些概念做了類比,有些嚴格來不是准確,不過我也認為對於初學者,也沒有必要把每一個概念掌握的很細致和准確,學習是一個逐步深入的過程,很多時候我們會發現,過一段後,我們會對同一個東西有不一樣的理解。
5. 以太坊(ETH)挖礦硬體配置介紹
隨著以太坊(ETH)的橫盤震盪,挖礦收益持續下滑,加之新顯卡的上市,使得顯卡價格有所下降。正值618購物節,無論是游戲玩家還是礦工,對當前的顯卡市場充滿興趣。
面對近期有朋友咨詢如何組裝一台以太坊礦機的問題,本文特此提供配置建議,供參考。
組裝以太坊礦機的重點在於顯卡配置,其他硬體需求相對較低,以降低成本。以下是推薦配置:
CPU:賽揚G1820te,其功耗低至35瓦,適合挖礦。若無此款,選用G1820亦可。
主板:華碩H81-A大板,支持6張顯卡,其他品牌同樣適用。為確保兼容性,需配備顯卡延長線。
CPU散熱器:選擇基礎散熱器即可。
固態硬碟:SATA介面120G,用於系統和虛擬內存。系統佔用約10G,每張卡分配6G虛擬內存,預留60G餘量。
內存:DDR3 1333 4G,僅需滿足系統啟動需求即可。
機架:選擇支持多顯卡的機架,以增強散熱效果。市面上有多種選擇。
電源:額定功率至少1000w,以確保穩定運行。
顯卡:推薦選擇1660s,配置六張卡,注意顯存顆粒對算力的影響。建議優先選擇海力士或三星顆粒的顯卡,以保障算力。
以上配置可根據顯卡價格波動進行調整,預計成本在2000元以內。同時,結合當前算力計算收益,預計單日收益約為78.38個以太幣(ETH),需根據幣價波動進行實時調整。
綜上所述,組裝以太坊礦機時,應優先考慮顯卡配置,確保算力與收益的最大化。同時,根據市場動態靈活調整硬體選擇,以適應不斷變化的挖礦環境。
6. 以太坊區塊鏈大小多少(以太坊區塊高度是多少)
以太坊公鏈區塊高度根據之前的消息,以太坊區塊高度現在調整高度到4730660!以太坊是一個全新開放的區塊鏈平台,它允許任何人在平台中建立和使用通過區塊鏈技術運行的去中心化應用。
就像比特幣一樣,以太坊不受任何人控制,也不歸任何人所有——它是一個開放源代碼項目,由全球范圍內的很多人共同創建。和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。在以太坊平台上創立新的應用十分簡便,隨著Homestead的發布,任何人都可以安全地使用該平台上的應用。
以太坊是可編程的區塊鏈。它並不是給用戶一系列預先設定好的操作,而是允許用戶按照自己的意願創建復雜的操作。這樣一來,它就可以作為多種類型去中心化區塊鏈應用的平台。
以太坊區塊鏈大小
與比特幣網路不同,以太坊不會明確地按內存限制每個區塊的大小,而是通過區塊GasLimit強制規定每個區塊的大小。
以太坊的區塊GasLimit設置有效的限制了一個區塊中可以打包的交易量。GasLimit參數由以太坊礦工集體決定,即通過投票的方式來動態地增加或降低GasLimit數值。
最近的一次投票是2019年下半年,礦工們群體投票同意將以太坊的區塊GasLimit由原來的800萬Gas單位提高至1000萬,使每個區塊相比之前區塊的大小增加了25%左右,這從理論上提高了以太坊網路的TPS。
什麼是區塊鏈擴容?普通用戶能夠運行節點對於區塊鏈的去中心化至關重要
想像一下凌晨兩點多,你接到了一個緊急呼叫,來自世界另一端幫你運行礦池(質押池)的人。從大約14分鍾前開始,你的池子和其他幾個人從鏈中分離了出來,而網路仍然維持著79%的算力。根據你的節點,多數鏈的區塊是無效的。這時出現了余額錯誤:區塊似乎錯誤地將450萬枚額外代幣分配給了一個未知地址。
一小時後,你和其他兩個同樣遭遇意外的小礦池參與者、一些區塊瀏覽器和交易所方在一個聊天室中,看見有人貼出了一條推特的鏈接,開頭寫著「宣布新的鏈上可持續協議開發基金」。
到了早上,相關討論廣泛散布在推特以及一個不審查內容的社區論壇上。但那時450萬枚代幣中的很大一部分已經在鏈上轉換為其他資產,並且進行了數十億美元的defi交易。79%的共識節點,以及所有主要的區塊鏈瀏覽器和輕錢包的端點都遵循了這條新鏈。也許新的開發者基金將為某些開發提供資金,或者也許所有這些都被領先的礦池、交易所及其裙帶所吞並。但是無論結果如何,該基金實際上都成為了既成事實,普通用戶無法反抗。
或許還有這么一部主題電影。或許會由MolochDAO或其他組織進行資助。
這種情形會發生在你的區塊鏈中嗎?你所在區塊鏈社區的精英,包括礦池、區塊瀏覽器和託管節點,可能協調得很好,他們很可能都在同一個telegram頻道和微信群中。如果他們真的想出於利益突然對協議規則進行修改,那麼他們可能具備這種能力。以太坊區塊鏈在十小時內完全解決了共識失敗,如果是只有一個客戶端實現的區塊鏈,並且只需要將代碼更改部署到幾十個節點,那麼可以更快地協調客戶端代碼的更改。能夠抵禦這種社會性協作攻擊的唯一可靠方式是「被動防禦」,而這種力量來自去一個中心化的群體:用戶。
想像一下,如果用戶運行區塊鏈的驗證節點(無論是直接驗證還是其他間接技術),並自動拒絕違反協議規則的區塊,即使超過90%的礦工或質押者支持這些區塊,故事會如何發展。
如果每個用戶都運行一個驗證節點,那麼攻擊很快就會失敗:有些礦池和交易所會進行分叉,並且在整個過程中看起來很愚蠢。但是即使只有一些用戶運行驗證節點,攻擊者也無法大獲全勝。相反,攻擊會導致混亂,不同用戶會看到不同的區塊鏈版本。最壞情況下,隨之而來的市場恐慌和可能持續的鏈分叉將大幅減少攻擊者的利潤。對如此曠日持久的沖突進行應對的想法本身就可以阻止大多數攻擊。
Hasu關於這一點的看法:
「我們要明確一件事,我們之所以能夠抵禦惡意的協議更改,是因為擁有用戶驗證區塊鏈的文化,而不是因為PoW或PoS。」
假設你的社區有37個節點運行者,以及80000名被動監聽者,對簽名和區塊頭進行檢查,那麼攻擊者就獲勝了。如果每個人都運行節點的話,攻擊者就會失敗。我們不清楚針對協同攻擊的啟動群體免疫的確切閾值是多少,但有一點是絕對清楚的:好的節點越多,惡意的節點就越少,而且我們所需的數量肯定不止於幾百幾千個。
那麼全節點工作的上限是什麼?
為了使得有盡可能多的用戶能夠運行全節點,我們會將注意力集中在普通消費級硬體上。即使能夠輕松購買到專用硬體,這能夠降低一些全節點的門檻,但事實上對可擴展性的提升並不如我們想像的那般。
全節點處理大量交易的能力主要受限於三個方面:
算力:在保證安全的前提下,我們能劃分多少CPU來運行節點?
帶寬:基於當前的網路連接,一個區塊能包含多少位元組?
存儲:我們能要求用戶使用多大的空間來進行存儲?此外,其讀取速度應該達到多少?(即,HDD足夠嗎?還是說我們需要SSD?)
許多使用「簡單」技術對區塊鏈進行大幅擴容的錯誤看法都源自於對這些數字過於樂觀的估計。我們可以依次來討論這三個因素:
算力
錯誤答案:100%的CPU應該用於區塊驗證
正確答案:約5-10%的CPU可以用於區塊驗證
限制之所以這么低的四個主要原因如下:
我們需要一個安全邊界來覆蓋DoS攻擊的可能性(攻擊者利用代碼弱點製造的交易需要比常規交易更長的處理時間)
節點需要在離線之後能夠與區塊鏈同步。如果我掉線一分鍾,那我應該要能夠在幾秒鍾之內完成同步
運行節點不應該很快地耗盡電池,也不應該拖慢其他應用的運行速度
節點也有其他非區塊生產的工作要進行,大多數是驗證以及對p2p網路中輸入的交易和請求做出響應
請注意,直到最近大多數針對「為什麼只需要5-10%?」這一點的解釋都側重於另一個不同的問題:因為PoW出塊時間不定,驗證區塊需要很長時間,會增加同時創建多個區塊的風險。這個問題有很多修復方法,例如BitcoinNG,或使用PoS權益證明。但這些並沒有解決其他四個問題,因此它們並沒有如許多人所料在可擴展性方面獲得巨大進展。
並行性也不是靈丹妙葯。通常,即使是看似單線程區塊鏈的客戶端也已經並行化了:簽名可以由一個線程驗證,而執行由其他線程完成,並且有一個單獨的線程在後台處理交易池邏輯。而且所有線程的使用率越接近100%,運行節點的能源消耗就越多,針對DoS的安全系數就越低。
帶寬
錯誤答案:如果沒2-3秒都產生10MB的區塊,那麼大多數用戶的網路都大於10MB/秒,他們當然都能處理這些區塊
正確答案:或許我們能在每12秒處理1-5MB的區塊,但這依然很難
如今,我們經常聽到關於互聯網連接可以提供多少帶寬的廣為傳播的統計數據:100Mbps甚至1Gbps的數字很常見。但是由於以下幾個原因,宣稱的帶寬與預期實際帶寬之間存在很大差異:
「Mbps」是指「每秒數百萬bits」;一個bit是一個位元組的1/8,因此我們需要將宣稱的bit數除以8以獲得位元組數。
網路運營商,就像其他公司一樣,經常編造謊言。
總是有多個應用使用同一個網路連接,所以節點無法獨占整個帶寬。
P2P網路不可避免地會引入開銷:節點通常最終會多次下載和重新上傳同一個塊(更不用說交易在被打包進區塊之前還要通過mempool進行廣播)。
當Starkware在2019年進行一項實驗時,他們在交易數據gas成本降低後首次發布了500kB的區塊,一些節點實際上無法處理這種大小的區塊。處理大區塊的能力已經並將持續得到改善。但是無論我們做什麼,我們仍然無法獲取以MB/秒為單位的平均帶寬,說服自己我們可以接受1秒的延遲,並且有能力處理那種大小的區塊。
存儲
錯誤答案:10TB
正確答案:512GB
正如大家可能猜到的,這里的主要論點與其他地方相同:理論與實踐之間的差異。理論上,我們可以在亞馬遜上購買8TB固態驅動(確實需要SSD或NVME;HDD對於區塊鏈狀態存儲來說太慢了)。實際上,我用來寫這篇博文的筆記本電腦有512GB,如果你讓人們去購買硬體,許多人就會變得懶惰(或者他們無法負擔800美元的8TBSSD)並使用中心化服務。即使可以將區塊鏈裝到某個存儲設備上,大量活動也可以快速地耗盡磁碟並迫使你購入新磁碟。
一群區塊鏈協議研究員對每個人的磁碟空間進行了調查。我知道樣本量很小,但仍然...
此外,存儲大小決定了新節點能夠上線並開始參與網路所需的時間。現有節點必須存儲的任何數據都是新節點必須下載的數據。這個初始同步時間(和帶寬)也是用戶能夠運行節點的主要障礙。在寫這篇博文時,同步一個新的geth節點花了我大約15個小時。如果以太坊的使用量增加10倍,那麼同步一個新的geth節點將至少需要一周時間,而且更有可能導致節點的互聯網連接受到限制。這在攻擊期間更為重要,當用戶之前未運行節點時對攻擊做出成功響應需要用戶啟用新節點。
交互效應
此外,這三類成本之間存在交互效應。由於資料庫在內部使用樹結構來存儲和檢索數據,因此從資料庫中獲取數據的成本隨著資料庫大小的對數而增加。事實上,因為頂級(或前幾級)可以緩存在RAM中,所以磁碟訪問成本與資料庫大小成正比,是RAM中緩存數據大小的倍數。
不要從字面上理解這個圖,不同的資料庫以不同的方式工作,通常內存中的部分只是一個單獨(但很大)的層(參見leveldb中使用的LSM樹)。但基本原理是一樣的。
例如,如果緩存為4GB,並且我們假設資料庫的每一層比上一層大4倍,那麼以太坊當前的~64GB狀態將需要~2次訪問。但是如果狀態大小增加4倍到~256GB,那麼這將增加到~3次訪問。因此,gas上限增加4倍實際上可以轉化為區塊驗證時間增加約6倍。這種影響可能會更大:硬碟在已滿狀態下比空閑時需要花更長時間來讀寫。
這對以太坊來說意味著什麼?
現在在以太坊區塊鏈中,運行一個節點對許多用戶來說已經是一項挑戰,盡管至少使用常規硬體仍然是可能的(我寫這篇文章時剛剛在我的筆記本電腦上同步了一個節點!)。因此,我們即將遭遇瓶頸。核心開發者最關心的問題是存儲大小。因此,目前在解決計算和數據瓶頸方面的巨大努力,甚至對共識演算法的改變,都不太可能帶來gaslimit的大幅提升。即使解決了以太坊最大的DoS弱點,也只能將gaslimit提高20%。
對於存儲大小的問題,唯一解決方案是無狀態和狀態逾期。無狀態使得節點群能夠在不維護永久存儲的情況下進行驗證。狀態逾期會使最近未訪問過的狀態失活,用戶需要手動提供證明來更新。這兩條路徑已經研究了很長時間,並且已經開始了關於無狀態的概念驗證實現。這兩項改進相結合可以大大緩解這些擔憂,並為顯著提升gaslimit開辟空間。但即使在實施無狀態和狀態逾期之後,gaslimit也可能只會安全地提升約3倍,直到其他限制開始發揮作用。
另一個可能的中期解決方案使使用ZK-SNARKs來驗證交易。ZK-SNARKs能夠保證普通用戶無需個人存儲狀態或是驗證區塊,即使他們仍然需要下載區塊中的所有數據來抵禦數據不可用攻擊。另外,即使攻擊者不能強行提交無效區塊,但是如果運行一個共識節點的難度過高,依然會有協調審查攻擊的風險。因此,ZK-SNARKs不能無限地提升節點能力,但是仍然能夠對其進行大幅提升(或許是1-2個數量級)。一些區塊鏈在layer1上探索該形式,以太坊則通過layer2協議(也叫ZKrollups)來獲益,例如zksync,Loopring和Starknet。
分片之後又會如何?
分片從根本上解決了上述限制,因為它將區塊鏈上包含的數據與單個節點需要處理和存儲的數據解耦了。節點驗證區塊不是通過親自下載和執行,而是使用先進的數學和密碼學技術來間接驗證區塊。
因此,分片區塊鏈可以安全地擁有非分片區塊鏈無法實現的非常高水平的吞吐量。這確實需要大量的密碼學技術來有效替代樸素完整驗證,以拒絕無效區塊,但這是可以做到的:該理論已經具備了基礎,並且基於草案規范的概念驗證已經在進行中。
以太坊計劃採用二次方分片(quadraticsharding),其中總可擴展性受到以下事實的限制:節點必須能夠同時處理單個分片和信標鏈,而信標鏈必須為每個分片執行一些固定的管理工作。如果分片太大,節點就不能再處理單個分片,如果分片太多,節點就不能再處理信標鏈。這兩個約束的乘積構成了上限。
可以想像,通過三次方分片甚至指數分片,我們可以走得更遠。在這樣的設計中,數據可用性采樣肯定會變得更加復雜,但這是可以實現的。但以太坊並沒有超越二次方,原因在於,從交易分片到交易分片的分片所獲得的額外可擴展性收益實際上無法在其他風險程度可接受的前提下實現。
那麼這些風險是什麼呢?
最低用戶數量
可以想像,只要有一個用戶願意參與,非分片區塊鏈就可以運行。但分片區塊鏈並非如此:單個節點無法處理整條鏈,因此需要足夠的節點以共同處理區塊鏈。如果每個節點可以處理50TPS,而鏈可以處理10000TPS,那麼鏈至少需要200個節點才能存續。如果鏈在任何時候都少於200個節點,那可能會出現節點無法再保持同步,或者節點停止檢測無效區塊,或者還可能會發生許多其他壞事,具體取決於節點軟體的設置。
在實踐中,由於需要冗餘(包括數據可用性采樣),安全的最低數量比簡單的「鏈TPS除以節點TPS」高幾倍,對於上面的例子,我們將其設置位1000個節點。
如果分片區塊鏈的容量增加10倍,則最低用戶數也增加10倍。現在大家可能會問:為什麼我們不從較低的容量開始,當用戶很多時再增加,因為這是我們的實際需要,用戶數量回落再降低容量?
這里有幾個問題:
區塊鏈本身無法可靠地檢測到其上有多少唯一用戶,因此需要某種治理來檢測和設置分片數量。對容量限制的治理很容易成為分裂和沖突的根源。
如果許多用戶突然同時意外掉線怎麼辦?
增加啟動分叉所需的最低用戶數量,使得防禦惡意控制更加艱難。
最低用戶數為1,000,這幾乎可以說是沒問題的。另一方面,最低用戶數設為100萬,這肯定是不行。即使最低用戶數為10,000也可以說開始變得有風險。因此,似乎很難證明超過幾百個分片的分片區塊鏈是合理的。
歷史可檢索性
用戶真正珍視的區塊鏈重要屬性是永久性。當公司破產或是維護該生態系統不再產生利益時,存儲在伺服器上的數字資產將在10年內不再存在。而以太坊上的NFT是永久的。
是的,到2372年人們仍能夠下載並查閱你的加密貓。
但是一旦區塊鏈的容量過高,存儲所有這些數據就會變得更加困難,直到某時出現巨大風險,某些歷史數據最終將……沒人存儲。
要量化這種風險很容易。以區塊鏈的數據容量(MB/sec)為單位,乘以~30得到每年存儲的數據量(TB)。當前的分片計劃的數據容量約為1.3MB/秒,因此約為40TB/年。如果增加10倍,則為400TB/年。如果我們不僅希望可以訪問數據,而且是以一種便捷的方式,我們還需要元數據(例如解壓縮匯總交易),因此每年達到4PB,或十年後達到40PB。InternetArchive(互聯網檔案館)使用50PB。所以這可以說是分片區塊鏈的安全大小上限。
因此,看起來在這兩個維度上,以太坊分片設計實際上已經非常接近合理的最大安全值。常數可以增加一點,但不能增加太多。
結語
嘗試擴容區塊鏈的方法有兩種:基礎的技術改進和簡單地提升參數。首先,提升參數聽起來很有吸引力:如果您是在餐紙上進行數學運算,這就很容易讓自己相信消費級筆記本電腦每秒可以處理數千筆交易,不需要ZK-SNARK、rollups或分片。不幸的是,有很多微妙的理由可以解釋為什麼這種方法是有根本缺陷的。
運行區塊鏈節點的計算機無法使用100%的CPU來驗證區塊鏈;他們需要很大的安全邊際來抵抗意外的DoS攻擊,他們需要備用容量來執行諸如在內存池中處理交易之類的任務,並且用戶不希望在計算機上運行節點的時候無法同時用於任何其他應用。帶寬也會受限:10MB/s的連接並不意味著每秒可以處理10MB的區塊!也許每12秒才能處理1-5MB的塊。存儲也是一樣,提高運行節點的硬體要求並且限制專門的節點運行者並不是解決方案。對於去中心化的區塊鏈而言,普通用戶能夠運行節點並形成一種文化,即運行節點是一種普遍行為,這一點至關重要。
區塊鏈網路擁堵怎麼辦1
什麼是網路擁堵
通常指的是一種網路故障現象:某辦公區域網計算機使用一個帶路由功能的ADSLModem+HUB共享上網。當同一時間上網人數較少的時候網路比較通暢,上網人數多了以後網路會時斷時通,並且HUB的Collision指示燈會閃爍不停。
而在區塊鏈的應用程序中,無論是數字貨幣、智能合約、去中心的交易系統等,它們的網路都是由一個個獨立的節點組成的,發生在節點中的各種操作,比如轉賬交易、合約狀態的變更等,都會以交易事務的數據形式廣播到網路中,通過礦工打包到新的區塊,作為主鏈的一部分而最終確認所有的這些操作。
當節點很多,使用量很多的時候,大量發生的交易就會來不及在正常期望的時間內被打包,因為它們都擁堵在網路中,這些等待的被確認的交易數據通常會維持在節點的內存池中。這個就是區塊鏈的擁堵。
2
網路擁堵是怎麼發生的
目前比特幣區塊大小為1M,每秒大約只能處理7個交易。隨著交易量不斷增長,比特幣網路已經難以迅速地進行轉賬交易確認,區塊鏈網路時常出現擁堵。
區塊鏈網路上最高時有上萬筆交易積壓,某些轉賬交易手續費高達幾十美元,網路擁堵時,交易甚至需要花費好幾天才能被打包。
實際上對於每一類區塊鏈應用來說,這個問題都是存在的,造成不斷有用戶抱怨交易延遲的問題,但也側面證明了應用的廣泛,以及用戶體量的增加。
那麼發生這些問題,我們應該怎麼辦呢?
3
網路擁堵怎麼解決
解決的方法,無非有如下幾種。
第一種擴容,提高處理能力。
第二種截流,限制區塊鏈包的數量。
通過將上述兩種方法進行綜合。
悉尼大學研究者研發了一種新型的區塊鏈系統,在100台機器中能夠實現每秒44萬筆交易的吞吐量,而Visa每秒的交易處理器是5.6萬筆。相比之下,比特幣每秒的交易限制在7筆,以太坊區塊鏈則為20筆。
JadeChain公鏈系統上線後,將徹底解決JADE生態應用中的網路擁堵問題。
7. 挖以太幣需要什麼配置
挖以太坊需要的配置包括硬體和軟體兩部分。以下為具體所需配置要求:
一、硬體配置:
1. 高性能處理器:挖以太坊需要大量計算能力,因此需要一個強大的中央處理器。推薦使用多核高性能CPU。
2.高性能顯卡:對於挖以太坊來說,GPU比CPU更有效率。具備更多流處理器和較高顯存的顯卡更適合挖礦。
3. 大容量存儲設備:由於挖礦過程中需要存儲大量數據,因此需要一個容量較大的硬碟,固態硬碟或大容量機械硬碟均可。
4. 充足內存:為保證挖礦程序的穩定運行,需要足夠的內存支持。
5. 穩定電源:挖礦需要穩定的電力供應,確保硬體在長時間運行中的穩定性。
二、軟體配置:
1. 以太坊挖礦軟體:選擇適合你的硬體設備和操作系統的挖礦軟體。
2.操作系統:推薦使用穩定且支持挖礦軟體的操作系統,如Windows、Linux等。
3. 錢包:挖到的以太幣需要有一個安全的錢包進行存儲,可以選擇在線或硬體錢包。
三、詳細解釋:
挖以太坊主要依賴於計算機的計算能力。因此,高性能的CPU和GPU是必不可少的。同時,挖礦過程中會產生大量數據,需要大容量的存儲設備來保存這些數據。穩定的電源供應也是確保硬體長時間穩定運行的關鍵。在軟體方面,選擇合適的挖礦軟體和操作系統可以大大提高挖礦效率。最後,挖到的以太幣需要安全存儲,因此選擇一個可靠的錢包非常重要。
總的來說,挖以太坊需要一定的硬體和軟體配置。確保配置滿足要求,可以更有效地進行挖礦並保障資產安全。
8. 浠ュお鍧婃寲鐭塊渶瑕佸摢浜涚‖浠惰懼
浠ュお鍧婃寲鐭塊渶瑕佸摢浜涚‖浠惰懼囷紵
浠ュお鍧婃寲鐭塊渶瑕佸摢浜涚‖浠惰懼囷紵
闅忕潃鍔犲瘑璐у竵甯傚満鐨勪笉鏂鍙戝睍錛岃秺鏉ヨ秺澶氱殑浜哄紑濮嬪叧娉ㄦ寲鐭胯繖涓琛屼笟銆傚叾涓浠ュお鍧婁綔涓轟竴縐嶈騫挎硾搴旂敤鐨勫姞瀵嗚揣甯侊紝瓚婃潵瓚婂氱殑浜哄紑濮嬪逛互澶鍧婃寲鐭挎劅鍒板叴瓚c備絾鏄錛屽湪榪涜屼互澶鍧婃寲鐭誇箣鍓嶏紝浣犻渶瑕佷簡瑙f湁鍏蟲よ屼笟鎵闇鐨勭‖浠惰懼囥傚洜姝わ紝鍦ㄦ湰鏂囦腑錛屾垜浠灝嗘帰璁ㄨ繘琛屼互澶鍧婃寲鐭挎墍闇鐨勭‖浠惰懼囥
1.鏄懼崱
鏄懼崱鏄榪涜屼互澶鍧婃寲鐭挎墍闇鐨勬渶閲嶈佺殑紜浠朵箣涓銆傚綋娑夊強鍒頒互澶鍧婃寲鐭挎椂錛孨VIDIA鏄懼崱鍜孉MD鏄懼崱鏄涓や釜涓昏侀夋嫨銆侼VIDIA鏄懼崱閫氬父琚璁や負鏄鏈寮哄ぇ鐨勬樉鍗★紝浣嗗畠浠鐨勪環鏍間篃杈冮珮銆侫MD鏄懼崱鐨勪環鏍肩浉瀵硅緝浣庯紝浣嗗畠浠鐨勮兘婧愭晥鐜囦笉濡侼VIDIA鏄懼崱銆
2.澶勭悊鍣
澶勭悊鍣ㄤ篃鏄榪涜屼互澶鍧婃寲鐭挎墍闇鐨勫彟涓涓涓昏佺‖浠朵箣涓銆傚湪閫夋嫨澶勭悊鍣ㄦ椂錛屾偍闇瑕侀夋嫨鑳藉熷勭悊澶ч噺鏁版嵁鐨凜PU銆侷nteli3錛宨5鍜宨7澶勭悊鍣ㄩ氬父琚璁や負鏄榪涜屼互澶鍧婃寲鐭跨殑鏈浣抽夋嫨銆傚悓鏃訛紝澶勭悊鍣ㄧ殑涓婚戜篃鏄鎸栫熆閫熷害鐨勪竴涓閲嶈佸洜緔犮備竴鑸鏉ヨ達紝涓婚戣秺楂橈紝鎸栫熆閫熷害涔熻秺蹇銆
3.鍐呭瓨
鍐呭瓨涔熸槸榪涜屼互澶鍧婃寲鐭挎墍闇鐨勫繀瑕佺‖浠朵箣涓銆傚綋閫夋嫨鍐呭瓨鏃訛紝鎮ㄩ渶瑕侀夋嫨鍏鋒湁鏇撮珮甯﹀界殑妯″潡銆備竴鑸鏉ヨ達紝鎮ㄥ彲浠ラ夋嫨8GB鎴16GB鐨勯珮閫烡DR4鍐呭瓨銆
4.鍔熺巼渚涘簲鍣
鍔熺巼渚涘簲鍣ㄦ槸榪涜屼互澶鍧婃寲鐭挎墍闇鐨勯噸瑕佺粍浠躲傚湪閫夋嫨鐢墊簮鏃訛紝鎮ㄩ渶瑕佽冭檻姣忎釜鏄懼崱鐨勫姛鐜囬渶奼傦紝騫剁『淇濇偍閫夋嫨鐨勭數婧愯兘澶熸弧瓚蟲墍鏈夋樉鍗$殑闇奼傘傚悓鏃訛紝鎮ㄨ繕闇瑕佽冭檻鐢墊簮鍔熺巼鐨勬晥鐜囷紝鍥犱負鐢墊簮鍔熺巼鏁堢巼瓚婇珮錛屾偍鐨勮兘婧愭垚鏈涔熷氨瓚婁綆銆
5.紜鐩
紜鐩樻槸榪涜屼互澶鍧婃寲鐭挎墍闇鐨勫彟涓涓閲嶈佺‖浠躲傚湪閫夋嫨紜鐩樻椂錛屾偍闇瑕侀夋嫨鍏鋒湁杈冨ぇ瀛樺偍瀹歸噺鐨勭‖鐩橈紝鍥犱負鎸栫熆鎵闇鐨勬暟鎹閲忛潪甯稿ぇ銆傞氬父錛屾偍鍙浠ラ夋嫨鍑犱釜TB鐨勭‖鐩樸
浠ヤ笂鏄榪涜屼互澶鍧婃寲鐭挎墍闇鐨勫熀鏈紜浠惰懼囷紝鎮ㄥ彲浠ユ牴鎹鑷宸辯殑闇奼傚拰棰勭畻榪涜屽畾鍒跺寲閫夋嫨銆傛渶鍚庨渶瑕佸己璋冪殑鏄錛岃櫧鐒剁‖浠惰懼囧規寲鐭塊熷害鍜屾晥鐜囨湁寰堝ぇ褰卞搷錛屼絾鏄鎸栫熆榪囩▼涓鐨勮蔣浠惰劇疆鍜岀綉緇滆繛鎺ヤ篃鏄褰卞搷鎸栫熆緇撴灉鐨勯噸瑕佸洜緔犮傚洜姝わ紝鍦ㄨ繘琛屼互澶鍧婃寲鐭誇箣鍓嶏紝鎮ㄨ繕闇瑕佷簡瑙f湁鍏寵蔣浠跺拰緗戠粶璁劇疆鐨勭浉鍏崇煡璇嗐
9. 比特幣、以太坊、柚子三者的關系
【一個關鍵詞,講解背後故事】
愛我就要抱抱我,愛我就要親親我,愛我就要奶奶我。好吧。那我就今天奶一下EOS。
說起區塊鏈,大多數的人,就會想起比特幣、以太坊、EOS……其實這三個幣種也是有著一絲聯系,有了比特幣,才有了以太坊。有了以太坊,才有了EOS(柚子),有了柚子才會有機會各種DAPP甚至商業級的DAPP從中產生。
由於更多的人對比特幣產生了共識,轉賬的數量越來做多,而區塊鏈約10分鍾確認一次轉賬,這一個區塊的大小容量只能容下4000多筆交易,而且還是根據轉賬的金額大小先後確認,轉賬金額比較小的,在比特幣交易擁堵的時候,甚至要好幾天才可以轉賬成功!
V神發現比特幣的一些缺點也為此眾籌產生了以太坊,任何想要在區塊鏈建立項目幣種或者DAPP都可以在以太坊上面進行開發,現在以太坊的交易速度是每秒幾十筆交易,再加上一些應用在以太坊上面開發,為此。很難產生爆款DAPP。
之後就有了現在的EOS,EOS的願景是能夠成為區塊鏈的底層架構,支持百萬級轉賬速度,任何想要在區塊鏈上面開發應用的難度大大降低…………
其實現在EOS的轉賬速度是每秒幾千筆交易,如果每個節點的計算機是超級計算機,每秒百萬級的轉賬速度還是完全有可能的。那麼大量的項目再EOS上開發應用的時候,也是非常有可能有爆款的DAPP從中產生,很可能就是說,以後,你是通過EOS了解到的區塊鏈,不是比特幣、以太坊。
所以,想要在柚子上開發應用,就要壓上一定的EOS,兌換RAM,RAM是EOS世界裡的通證,也是EOS里網路里的內存。其實在大量用戶開發應用的時候,EOS也會隨之增長,以後RAM的價格可能也會增長。
但是前期價格過高,就不會有用戶在上面開發應用,只有更多的人對柚子產生共識,柚子才會有更大的價值。
所以,我們需要等候。等候大量的應用落地開花,等候爆款DAPP從中產生,好像也只有EOS才能支撐爆款DAPP。