以太坊geth需要多大磁碟空間
『壹』 ETH開發實踐——批量發送交易
在使用同一個地址連續發送交易時,每筆交易往往不可能立即到賬, 當前交易還未到賬的情況下,下一筆交易無論是通過 eth.getTransactionCount() 獲取nonce值來設置,還是由節點自動從區塊中查詢,都會獲得和前一筆交易同樣的nonce值,這時節點就會報錯 Error: replacement transaction underpriced
在構建一筆新的交易時,在交易數據結構中會產生一個nonce值, nonce是當前區塊鏈下,發送者(from地址)發出的交易(成功記錄進區塊的)總數, 再加上1。例如新構建一筆從A發往B的交易,A地址之前的交易次數為10,那麼這筆交易中的nonce則會設置成11, 節點驗證通過後則會放入交易池(txPool),並向其他節點廣播,該筆交易等待礦工將其打包進新的區塊。
那麼,如果在先構建並發送了一筆從地址A發出的,nonce為11的交易,在該交易未打包進區塊之前, 再次構建一筆從A發出的交易,並將它發送到節點,不管是先通過web3的eth.getTransactionCount(A)獲取到的過往的交易數量,還是由節點自行填寫nonce, 後面的這筆交易的nonce同樣是11, 此時就出現了問題:
實際場景中,會有批量從一個地址發送交易的需求,首先這些操作可能也應該是並行的,我們不會等待一筆交易成功寫入區塊後再發起第二筆交易,那麼此時有什麼好的解決辦法呢?先來看看geth節點中交易池對交易的處理流程
如之前所說,構建一筆交易時如果不手動設置nonce值,geth節點會默認計算發起地址此前最大nonce數(寫入區塊的才算數),然後將其加上1, 然後將這筆交易放入節點交易池中的pending隊列,等到節點將其打包進區塊。
構建交易時,nonce值是可以手動設置的,如果當前的nonce本應該設置成11, 但是我手動設置成了13, 在節點收到這筆交易時, 發現pending隊列中並沒有改地址下nonce為11及12的交易, 就會將這筆nonce為13的交易放入交易池的queued隊列中。只有當前面的nonce補齊(nonce為11及12的交易被發現並放入pending隊列)之後,才會將它放入pending隊列中等待打包。
我們把pending隊列中的交易視為可執行的,因為它們可能被礦工打包進最新的區塊。 而queue隊列因為前面的nonce存在缺失,暫時無法被礦工打包,稱為不可執行交易。
那麼實際開發中,批量從一個地址發送交易時,應該怎麼辦呢?
方案一:那麼在批量從一個地址發送交易時, 可以持久化一個本地的nonce,構建交易時用本地的nonce去累加,逐一填充到後面的交易。(要注意本地的nonce可能會出現偏差,可能需要定期從區塊中重新獲取nonce,更新至本地)。這個方法也有一定的局限性,適合內部地址(即只有這個服務會使用該地址發送交易)。
說到這里還有個坑,許多人認為通過 eth.getTransactionCount(address, "pending") ,第二個參數為 pending , 就能獲得包含本地交易池pending隊列的nonce值,但是實際情況並不是這樣, 這里的 pending 只包含待放入打包區塊的交易, 假設已寫入交易區塊的數量為20, 又發送了nonce為21,22,23的交易, 通過上面方法取得nonce可能是21(前面的21,22,23均未放入待打包區塊), 也可能是22(前面的21放入待打包區塊了,但是22,23還未放入)。
方案二是每次構建交易時,從geth節點的pending隊列取到最後一筆可執行交易的nonce, 在此基礎上加1,再發送給節點。可以通過 txpool.content 或 txpool.inspect 來獲得交易池列表,裡面可以看到pending及queue的交易列表。
啟動節點時,是可以設置交易池中的每個地址的pending隊列的容量上限,queue隊列的上容量上限, 以及整個交易池的pending隊列和queue隊列的容量上限。所以高並發的批量交易中,需要增加節點的交易池容量。
當然,除了擴大交易池,控制發送頻率,更要設置合理的交易手續費,eth上交易寫入區塊的速度取決於手續費及eth網路的擁堵狀況,發送每筆交易時,設置合理的礦工費用,避免大量的交易積壓在交易池。
『貳』 以太坊是什麼丨以太坊開發入門指南
以太坊是什麼丨以太坊開發入門指南
很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基於以太坊平台,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。
以太坊是什麼
以太坊(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來搭建一個測試網路。
註:本文中為了方便大家理解,對一些概念做了類比,有些嚴格來不是准確,不過我也認為對於初學者,也沒有必要把每一個概念掌握的很細致和准確,學習是一個逐步深入的過程,很多時候我們會發現,過一段後,我們會對同一個東西有不一樣的理解。
『叄』 以太坊錢包不更新
網路不順暢或其它。
節點同步慢原因以及解決方法:1、以太坊錢包節點同步需要聯網操作,如果你的網路不暢通就會造成同步慢這種情況,所以在同步之前請檢查好你的網路,確認網路狀況良好在進行同步。2、節點同步需要佔用大量的內存,如果你的電腦內存不夠就會造成階段同步慢甚至停止同步這種情況,建議用戶在同步節點之前清理一下電腦保證電腦內存充足,目前有用戶反映同步節點內存最高可佔用100G左右內存哦。3、可以在以太坊錢包中修改peer數,默認peer是25個,建議你可以修改成巨大的數值,例如9999個。4、同步階段還需要你的路由器支持uPnP。可以在路由器設置中修改。5、需要公網IP,如果你沒有的話就會慢很多,所以建議設置一個公網IP吧。6、也有網友反映是錢包本身的問題,以太坊錢包軟體本身並不是很成熟,在同步節點的時候會有很多問題出現,這個只有等待以太坊官方修改。7、電腦配置不能太低。8、第一次同步時使用--fast選項,可以更快地同步到最新塊。9、使用的是geth,運行時間長了可能會有問題,可以考慮每天重啟一次geth。10、及時更新geth到最新版本。11、硬碟空間要足夠大,建議至少1T以上。為了運行以太坊全節點,買了500G的硬碟空間,使用--fast同步完成後才佔40多G空間,之後正常模式同步硬碟佔用空間快速增長,3個月左右已經430G了,最近又買了500G磁碟空間。12、交易未被打包時,相同nonce值可以覆蓋之前的交易,覆蓋交易只看nonce值,至於交易的其它部分內容可以相同也可以不同。13、如果有低nonce值還未被打包,新的交易gasPrice再高,也需要先等低nonce值的交易被打包,如果低nonce值的交易因為gasPrice設低了而等待,需要先使用相同nonce值來修改gasPrice。
以太幣(ETH)是以太坊的一種加密數字代幣,被視為「比特幣2。0版」,創始人是傑弗里_維爾克。
『肆』 什麼是區塊鏈擴容
擴容,是當某個容器或承載物不足以支撐或承載現有事物需求時,我們通過擴大容器的容量或承載物的體積來滿足日益增長的需求,從而緩解當前容器或承載物所受壓力的一種手段。
在比特幣誕生之初比特幣創始人中本聰並沒有特意限制區塊的大小,區塊最大可以達到32MB,當時平均每個區塊大小為1~2KB。
時比特幣用戶少,交易量也沒有那麼大,並不會造成區塊擁堵,然而2013年至今隨著比特幣價格的直線上升,用戶越來越多因此造成比特幣網路擁堵,用戶交易費用上升的問題逐漸涌現出來。
到現在,比特幣區塊鏈上最高時有幾十萬筆交易積壓,比特幣的平均交易費用比 2010 年 9 月上漲了 376 倍,每秒 7 筆交易的處理速度已經明顯無法滿足用戶需求,比特幣社區開始探索如何給比特幣「擴容」。
通過修改比特幣底層代碼,從而達到提高交易處理能力的目的。
比特幣擴容本身發展和設計方案有兩種,即第一層和第二層擴容技術。
· 第一層擴容技術即改進區塊鏈自身,把區塊鏈自身變得更快、容量變得更大,總的來說就是改變區塊鏈共識部分的內容。
· 第二層擴容技術目的是把計算移到鏈下,即通過側鏈的技術加以解決問題。
擴容協議及結局
擴容協議一般需要礦工們的支持,大致可以分為修改區塊大小、軟分叉、硬分叉、隔離見證等方式。
以比特幣舉例:
比特幣現在分裂成為大區塊Bitcoin Cash(BCH)和隔離見證。隔離見證現在是市場上公認的比特幣,而大區塊幣被冠名為比特現金。可以預見的往後的發展方向,比特幣將會以鏈下交易為主。包括閃電網路、側鏈。這兩個新東西目前不成熟,但是被很多人寄予厚望的。
比特幣將會大量發展隔離見證交易,並在隔離見證的基礎上做更多的衍生技術。最有可能是以技術推動比特幣往前發展。
比特現金將會以鏈上交易為主,重點發展貨幣功能,以降低交易摩擦為主要方式,以獲利更廣泛的鏈上用戶量為主要發展方向。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
『伍』 Quorum介紹(一):Quorum整體結構概述
一句話概括,就是企業級以太坊模型。與傳統的以太坊模型不同,Quorum既然是企業級應用,那麼准入門檻、共識處理以及交易的安全機制上一定與傳統的公鏈模型不同。稍後我們也將從以下幾個方面詳細介紹Quorum的結構模型和核心功能特色。
Quorum本身支持兩種交易狀態
兩種交易核心不同就是內容是否加密。為了區別兩種交易的類型,Quorum在每筆交易的簽名中設置了一個特殊的value值,當簽名中的value值為27或28時,表示這是一筆公開交易,如果是37或者38則是一筆私密交易。私密交易的內容會被加密,只有具有解密能力的節點才能獲得具體的交易內容。
所以最終每個節點會有兩套賬本:一個是所有人都一樣的公有賬本,另一個是自己本地存儲的私有賬本。
所以Quorum的賬本狀態改變機制 允許以下幾種情況的調用
s 表示交易發起者,(X) 表示私密, X表示公開
上述公式可以翻譯為:
Quorum 不允許以下兩種情況的調用
Quorum具體的狀態狀態校驗(世界狀態)可以調用RPC方法 eth_storageRoot(address[, blockNumber]) -> hash
Quorum核心分為兩大塊:Node節點和隱私管理。
Quorum節點本身是一個輕量版的Geth。沿用Geth可以發揮以太坊社區原有的研發優勢,因此Quorum會隨著Geth未來的版本更新而更新。
Quorum節點基於Geth做了一下改動:
Constellation和Tessera(以下簡稱C&T)是一種用Java和Haskell實現的安全傳輸信息模型,他們的作用就像是網路中的信息傳輸代理(MTA, Message Transfer Agent)所有消息的傳輸都通過會話信息秘鑰進行加密
C&T其實是一種多方參與網路中實現個人消息加密的常用組件,在許多應用中都很常見,並不是區塊鏈領域專有技術(筆者注,其實區塊鏈本身就是各種技術的大雜燴,我們很難專門找到一門技術,說它就是區塊鏈 )。C&T主要包括兩個子模塊:
交易管理模塊主要負責交易的隱私,包括存儲私密交易數據、控制私密交易的訪問、與其他參與者的交易管理器進行私密交易載荷的交換。Transaction Manager 本身並不涉及任何私鑰和私鑰的使用,所有數字加密模塊的功能都由The Enclave來完成。
Transaction Manager屬於靜態/Restful模組,能夠非常容易的被載入。
分布式賬本協議通常都會涉及交易驗證、參與者授權、歷史信息存儲(通過hash鏈)等。為了在加密這一方面實現平行操作的性能擴展和,所有公私鑰生成、數據的加密/解密都由Enclave模塊完成。
『陸』 搭建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 記錄了一些本人搭建使用的命令
『柒』 V神的遺憾
DavidHoffman.eth :你如何定義元宇宙?
V 神: 據我所知,人們用它來指代互聯網+超級沉浸式虛擬現實,或者互聯網+共享狀態 (這樣事物就可以在平台之間移動)。
santi.eth :你如何想像以太坊維持一個普遍的基本收入機制,有助於為每個人創造公平的競爭環境?
V 神: PoH 已經這么做了! 挑戰在於,UBI 代幣需要「匯」,而不僅僅是發行。歸根結底,它歸結為與公共產品融資同樣的問題:我們需要超越個人捐贈,通過機制實現持久承諾。
在後一種情況下,以太坊當然是令人驚訝的中心部分。
三箭資本 CEO Zhu Su:對於 ETH/Doge 合作有什麼好的想法,你對 Doge 這個項目哪些方面感興趣?
V 神: 就我個人而言,我希望 Doge 能盡快切換到 PoS,或許使用以太坊代碼。我也希望他們不要取消 50 億/年的 PoW 發行,而是將其放入某種為全球公共事務提供資金的 DAO 中。這將會很適合 Doge 的精神。
以太坊核心開發者、EIP-1559 聯合作者 eric.eth:我知道 eth1 主節點的位置,但合並後,您是否打算將 eth2 主節點保留在同一位置?如果沒有,你能透露它的位置嗎?
V 神: 是的,有一個計劃是將主節點從 Moria 礦區轉移到 Cirith Ungol,但不幸的是,這個計劃被推遲了,因為 Moria 仍然有 14 天的隔離期。
Taylor Monahan:有什麼事情是你曾經無比自信的,結果卻發現你大錯特錯了?
V 神:「 以太坊將在 1-2 年內轉向 PoS」。
Mo Dong:隨著區塊鏈越來越依賴於中心化控制資產 (如 USDC),將分叉作為最後手段的治理在經濟上變得不可能。這是好還是壞?
V 神: 博弈論看起來越來越不像是和平分裂,而更像是相互毀滅。我想說,這是一個很好的理由,L1 會隨著時間的推移變得更加僵化,L2 也會隨著時間的推移出現更積極的治理。
MyCrypto 創始人兼首席執行官 Taylor Monahan:以太坊哪個應用最讓你吃驚?
V 神: NFT。
Michelle Rempel Garner:政府在保護加密貨幣不受操縱交易行為 (例如社交媒體炒作)?
V 神: 我認為,最好的監管策略需要避免「你必須獲得一個高質量的執照才能參與」的機制,而是在更大的規模中提出更多的要求(我認為現有的社交媒體 KOL 監管制度好像已經這么做了吧?)
另外,如果要在加密領域更難存在和加密領域更難獲得「主流」用戶之間進行權衡,我寧願選擇後者而不是前者,至少在中短期內。
Ian Miers:你認為所有的國家都會擁抱私人電子支付嗎?如果他們不接受的話,我們該怎麼辦?
V 神: 沒有官方「擁抱」torrent 網路,但它們卻依然蓬勃發展。官方們在制裁 torrent 方面付出的努力遠遠少於他們所能做的,部分是因為 torrent 網路還是具有很大的合法性。我認為處於這樣一種灰色地帶是很容易出現的事情。
作家 Bruno Maçães:什麼是加密的本質?一方面,它關於確定的真理。另一方面,它似乎是虛擬的,與物質現實脫節。是無中生有的創造。那麼...... 它是依賴於真理和現實的形而上學還是超越它們?
V 神: 我認為 Lootproject 的哲學是對的:幾乎任何人創造的任何東西都是「存在」的,重要的是其他人在它之上建立的東西有多大范圍、能達到什麼樣的程度。
Osmosis 聯合創始人 Sunny Aggarwal:你在以太坊旅程中最大的遺憾(非技術性的)是什麼?
V 神: 「8 位聯合創始人」的事情,我選擇了他們的時候過於急迫和一視同仁了。
Ava Labs 創始人 Emin Gün Sirer:你從以太坊經歷中學到最難的一課是什麼?
V 神: 在小團體中的人們比我想的更難緊密協調。你沒辦法讓大家圍坐成一圈,然後審視著彼此與生俱來的善良這樣去相處,更不要說還是在面臨著巨大激勵沖突的同時了。
以太坊共有 8 位聯合創始人,分別是 Vitalik Buterin、Mihai Alisie、Anthony Di Iorio、Amir Chetrit、Charles Hoskinson、Gavin Wood、Jeffrey Wilcke、Joseph Lubin,但是目前只剩 Vitalik 還在直接為以太坊工作。導致聯合創始人之間出現裂痕的主要原因是關於以太坊應該成為一家營利性公司還是保持非營利的一次激烈爭吵。當時以太坊很接近成為一家公司,僅剩下最關鍵的文件沒有簽署。這次事件直接導致 Charles Hoskinson 被逐出聯合創始人小組,後來他轉而支持硬分叉產生的以太坊經典,再後來發布了「以太坊殺手」Cardano。
2014年6月7日,在八位聯合創始人的見證下,以太坊的構想在瑞士樹林中被稱為「太空飛船」的出租屋中誕生。如今,8位聯合創始人構想中的這個區塊鏈平台市值,已經高達4000億美元。
今天,八位聯合創始人中,或許只有一位還常被人們冠以「以太坊創始人」的標簽,而另外幾人的名字都不為人所知,而這也是本文將要分享的關於他們的故事。
Vitalik Buterin
以太坊最早是來自於19歲的俄羅斯加拿大計算機天才和比特幣專欄作家——Vitalik Buterin於2013年11月的構想。在 探索 新興的加密行業三年後,Buterin完成了白皮書,指出了比特幣系統的局限性,並提出了一個新平台,使任何可以想像到的去中心化、抗審查應用程序成為可能。
Buterin的神童形象對以太坊的推廣起到了非常大的幫助,同時他對以太坊的技術貢獻也是毋庸置疑的。
近年來,他試圖退居二線,專注於以太坊2.0,也是唯一仍在從事以太坊相關工作的聯合創始人。
Mihai Alisie
Mihai Alisie學的是控制論經濟學專業,在參與以太坊之前,曾與Vitalik Buterin一起為比特幣雜志工作。2011年Alisie與Buterin取得了聯系,他們決定成立比特幣雜志。
Alisie幫助建立了以太坊在瑞士的基地,合並了最初的初創公司,為這家剛起步的加密公司開設了一個銀行帳戶(這不是一個容易的過程),並就預售活動至關重要的法律框架與律師和瑞士官員打交道。
Alisie一直擔任以太坊基金會的副主席,直到2015年底,他將注意力轉向以太坊的社交框架Akasha。
Anthony Di Iorio
Anthony Di Iorio與Buterin一樣,來自多倫多。他曾涉足營銷和風險投資,在地熱鑽探業務上投資超過100萬英鎊。2012年11月,他組織了一次比特幣聚會,並在現場上認識了Buterin。在以太坊確立了非盈利的運營模式後,Di Iorio退居二線。在以太坊之後,Di Iorio短暫地擔任了多倫多證券交易所的首席數字官,但隨後離開了Decentral——Jaxx數字錢包的開發公司,該錢包於2018年5月首次推出。同年,Di Iorio入選《福布斯》雜志排名前20位的加密貨幣最富有人士,估計凈資產為7.5億至10億美元。
Amir Chetrit
2013年9月在阿姆斯特丹舉行的比特幣活動上,Buterin遇到了Amir Chetrit。後者在2008年以前選擇了退學,然後涉足房地產,也在當時開始對傳統金融體系產生懷疑。後來他開始涉足比特幣,在遇到Buterin時,他正在與以色列初創公司Colored Coins合作,該項目旨在管理作為比特幣網路頂部代幣的現實資產。Buterin在提出以太坊之前,也曾參與過該項目。2013年12月,Chetrit受Buterin邀請加入組織。
在2014年6月的聯合創始人會議上,Chetrit因缺乏對以太坊的投入而受到以太坊開發人員和其他聯合創始人的抨擊,並選擇辭職。
Charles Hoskinson
出生於夏威夷的Charles Hoskinson本來想成為一名數學家,但後來卻對比特幣越來越感興趣。在被Anthony Di Iorio介紹給以太坊和巴特林時,已經有過為早期版本的去中心化交易所籌集資金的經驗。
2013年12月Hoskinson被任命為首席執行官,在建立瑞士基金會及其法律框架方面發揮領導作用。後來以太坊迎來硬分叉,Hoskinson選擇支持以太坊經典。與此同時,他推出了Cardano,目前Cardano的市值已躍升為第六大加密貨幣。
Gavin Wood
英國計算機程序員Gavin Wood是被比特幣佈道者Amir Taaki和Johnny Bitcoin帶入加密領域的。他認識了Buterin後,提出了用C++編程語言編寫一個以太坊的想法。2014年4月,他發布了以太坊黃皮書,隨後又發布了以太坊的本機編程語言Solidity。
在以太坊之後,Gavin Wood與Jutta Steiner合夥創立Parity公司,從事以太坊代碼的開發。但是現在,他更專注於Web3 Foundation及其互操作性區塊鏈項目Polkadot(以太坊的競爭對手)。
Jeffrey Wilcke
計算機程序員Jeffrey Wilcke第一次聽說以太坊時,正在荷蘭進行Mastercoin的工作。2014年初,他與Gavin Wood一起加入了創始人團隊。
在Wood開始使用C++編寫以太坊的同一時間,Wilcke也開始了他的開發工作——使用Go語言來編寫以太坊,後來該項目更名為Go Ethereum,簡稱為「Geth」。
在經歷了以太坊硬分叉、一系列黑客事件,以及兒子出生後,Wilcke將Geth的監督權交給了他的得力助手Peter Szilagyi。現在,他與哥哥Joey一起經營著一間 游戲 開發工作室Grid Games,並開始出售一些ETH以資助Grid Games招募開發人員。
Joseph Lubin
Joseph Lubin是八位創始人中經驗最豐富的一位,1987年Lubin從普林斯頓大學畢業,獲得了電子工程和計算機科學的學位。
畢業後,Lubin從事過軟體工程、音樂製作、商業和金融領域的多元化職業。後來,Lubin對加密貨幣產生了興趣,並通過加拿大比特幣聯盟與加拿大同胞Di Iorio取得了聯系。
後來,他被介紹給Buterin,並被邀請加入聯合創始人小組。Di Iorio和Lubin的財力雄厚,使剛起步的以太坊得以生存。
當決定使以太坊成為非盈利組織時,Lubin已經在計劃一家盈利性公司來構建平台的應用程序層。
他創立的公司Consensys已成為其他區塊鏈初創公司的孵化器,在招募有影響力的以太坊合作夥伴方面也發揮了關鍵作用。
『捌』 【ETH錢包開發03】web3j轉賬ETH
在之前的文章中,講解了創建、導出、導入錢包。
【ETH錢包開發01】創建、導出錢包
【ETH錢包開發02】導入錢包
本文主要講解以太坊轉賬相關的一些知識。交易分為ETH轉賬和ERC-20 Token轉賬,本篇先講一下ETH轉賬。
1、解鎖賬戶發起交易。錢包keyStore文件保存在geth節點上,用戶發起交易需要解鎖賬戶,適用於中心化的交易所。
2、錢包文件離線簽名發起交易。錢包keyStore文件保存在本地,用戶使用密碼+keystore的方式做離線交易簽名來發起交易,適用於dapp,比如錢包。
本文主要講一下第二種方式,也就是錢包離線簽名轉賬的方式。
交易流程
1、通過keystore載入轉賬所需的憑證Credentials
2、創建一筆交易RawTransaction
3、使用Credentials對象對交易簽名
4、發起交易
注意以下幾點:
1、Credentials
這里,我是通過獲取私鑰的方式來載入 Credentials
還有另外一種方式,通過密碼+錢包文件keystore方式來載入 Credentials
2、nonce
nonce是指發起交易的賬戶下的交易筆數,每一個賬戶nonce都是從0開始,當nonce為0的交易處理完之後,才會處理nonce為1的交易,並依次加1的交易才會被處理。
可以通過 eth_gettransactioncount 獲取nonce
3、gasPrice和gasLimit
交易手續費由gasPrice 和gasLimit來決定,實際花費的交易手續費是 gasUsed * gasPrice 。所有這兩個值你可以自定義,也可以使用系統參數獲取當前兩個值
關於 gas ,你可以參考我之前的一篇文章。
以太坊(ETH)GAS詳解
gasPrice和gasLimit影響的是轉賬的速度,如果gas過低,礦工會最後才打包你的交易。在app中,通常給定一個默認值,並且允許用戶自己選擇手續費。
如果不需要自定義的話,還有一種方式來獲取。獲取以太坊網路最新一筆交易的 gasPrice ,轉賬的話, gasLimit 一般設置為21000就可以了。
Web3j還提供另外一種簡單的方式來轉賬以太幣,這種方式的好處是不需要管理nonce,不需要設置gasPrice和gasLimit,會自動獲取最新一筆交易的gasPrice,gasLimit 為21000(轉賬一般設置成這個值就夠用了)。
這個問題,我想是很多朋友所關心的吧。但是到目前為止,我還沒有看到有講解這方面的博客。
之前問過一些朋友,他們說可以通過區塊號、區塊哈希來判斷,也可以通過Receipt日誌來判斷。但是經過我的一番嘗試,只有 BlockHash 是可行的,在web3j中根據 blocknumber 和 transactionReceipt 都會報空指針異常。
原因大致是這樣的:在發起一筆交易之後,會返回 txHash ,然後我們可以根據這個 txHash 去查詢這筆交易相關的信息。但是剛發起交易的時候,由於手續費問題或者乙太網絡擁堵問題,會導致你的這筆交易還沒有被礦工打包進區塊,因此一開始是查不到的,通常需要幾十秒甚至更長的時間才能獲取到結果。我目前的解決方案是輪詢的去刷 BlockHash ,一開始的時候 BlockHash 的值為0x00000000000,等到打包成功的時候就不再是0了。
這里我使用的是rxjava的方式去輪詢刷的,5s刷新一次。
正常情況下,幾十秒內就可以獲取到區塊信息了。
區塊確認數=當前區塊高度-交易被打包時的區塊高度。