『壹』 geth以太坊客戶端輕節點模式啟動怎麼與全節點啟動的geth連接
一般來說,Undefined index就是自己編寫過程中出現了的的確確的寫法問題notice一般提示關於與執行代碼沒有直接關系的錯誤,但不要忘記,notice有時會返回一些多餘的錯誤信息
『貳』 用Go來做以太坊開發④智能合約
在這個章節中我們會介紹如何用Go來編譯,部署,寫入和讀取智能合約。
與智能合約交互,我們要先生成相應智能合約的應用二進制介面ABI(application binary interface),並把ABI編譯成我們可以在Go應用中調用的格式。
第一步是安裝 Solidity編譯器 ( solc ).
Solc 在Ubuntu上有snapcraft包。
Solc在macOS上有Homebrew的包。
其他的平台或者從源碼編譯的教程請查閱官方solidity文檔 install guide .
我們還得安裝一個叫 abigen 的工具,來從solidity智能合約生成ABI。
假設您已經在計算機上設置了Go,只需運行以下命令即可安裝 abigen 工具。
我們將創建一個簡單的智能合約來測試。 學習更復雜的智能合約,或者智能合約的開發的內容則超出了本書的范圍。 我強烈建議您查看 truffle framework 來學習開發和測試智能合約。
這里只是一個簡單的合約,就是一個鍵/值存儲,只有一個外部方法來設置任何人的鍵/值對。 我們還在設置值後添加了要發出的事件。
雖然這個智能合約很簡單,但它將適用於這個例子。
現在我們可以從一個solidity文件生成ABI。
它會將其寫入名為「Store_sol_Store.abi」的文件中
現在讓我們用 abigen 將ABI轉換為我們可以導入的Go文件。 這個新文件將包含我們可以用來與Go應用程序中的智能合約進行交互的所有可用方法。
為了從Go部署智能合約,我們還需要將solidity智能合約編譯為EVM位元組碼。 EVM位元組碼將在事務的數據欄位中發送。 在Go文件上生成部署方法需要bin文件。
現在我們編譯Go合約文件,其中包括deploy方法,因為我們包含了bin文件。
在接下來的課程中,我們將學習如何部署智能合約,然後與之交互。
Commands
Store.sol
solc version used for these examples
如果你還沒看之前的章節,請先學習 編譯智能合約的章節 因為這節內容,需要先了解如何將智能合約編譯為Go文件。
假設你已經導入從 abigen 生成的新創建的Go包文件,並設置ethclient,載入您的私鑰,下一步是創建一個有配置密匙的交易發送器(tansactor)。 首先從go-ethereum導入 accounts/abi/bind 包,然後調用傳入私鑰的 NewKeyedTransactor 。 然後設置通常的屬性,如nonce,燃氣價格,燃氣上線限制和ETH值。
如果你還記得上個章節的內容, 我們創建了一個非常簡單的「Store」合約,用於設置和存儲鍵/值對。 生成的Go合約文件提供了部署方法。 部署方法名稱始終以單詞 Deploy 開頭,後跟合約名稱,在本例中為 Store 。
deploy函數接受有密匙的事務處理器,ethclient,以及智能合約構造函數可能接受的任何輸入參數。我們測試的智能合約接受一個版本號的字元串參數。 此函數將返回新部署的合約地址,事務對象,我們可以交互的合約實例,還有錯誤(如果有)。
就這么簡單:)你可以用事務哈希來在Etherscan上查詢合約的部署狀態: https://rinkeby.etherscan.io/tx/
Commands
Store.sol
contract_deploy.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
一旦使用 abigen 工具將智能合約的ABI編譯為Go包,下一步就是調用「New」方法,其格式為「New<contractname style="box-sizing: border-box; font-size: 16px; -ms-text-size-adjust: auto; -webkit-tap-highlight-color: transparent;">」,所以在我們的例子中如果你 回想一下它將是 NewStore 。 此初始化方法接收智能合約的地址,並返回可以開始與之交互的合約實例。</contractname>
Commands
Store.sol
contract_load.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
在上個章節我們學習了如何在Go應用程序中初始化合約實例。 現在我們將使用新合約實例提供的方法來閱讀智能合約。 如果你還記得我們在部署過程中設置的合約中有一個名為 version 的全局變數。 因為它是公開的,這意味著它們將成為我們自動創建的getter函數。 常量和view函數也接受 bind.CallOpts 作為第一個參數。了解可用的具體選項要看相應類的 文檔 一般情況下我們可以用 nil 。
Commands
Store.sol
contract_read.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
寫入智能合約需要我們用私鑰來對交易事務進行簽名。
我們還需要先查到nonce和燃氣價格。
接下來,我們創建一個新的keyed transactor,它接收私鑰。
然後我們需要設置keyed transactor的標准交易選項。
現在我們載入一個智能合約的實例。如果你還記得 上個章節 我們創建一個名為 Store 的合約,並使用 abigen 工具生成一個Go文件。 要初始化它,我們只需調用合約包的 New 方法,並提供智能合約地址和ethclient,它返回我們可以使用的合約實例。
我們創建的智能合約有一個名為 SetItem 的外部方法,它接受solidity「bytes32」格式的兩個參數(key,value)。 這意味著Go合約包要求我們傳遞一個長度為32個位元組的位元組數組。 調用 SetItem 方法需要我們傳遞我們之前創建的 auth 對象(keyed transactor)。 在幕後,此方法將使用它的參數對此函數調用進行編碼,將其設置為事務的 data 屬性,並使用私鑰對其進行簽名。 結果將是一個已簽名的事務對象。
現在我就可以看到交易已經成功被發送到了以太坊網路了: https://rinkeby.etherscan.io/tx/
要驗證鍵/值是否已設置,我們可以讀取智能合約中的值。
搞定!
Commands
Store.sol
contract_write.go
solc version used for these examples
有時您需要讀取已部署的智能合約的位元組碼。 由於所有智能合約位元組碼都存在於區塊鏈中,因此我們可以輕松獲取它。
首先設置客戶端和要讀取的位元組碼的智能合約地址。
現在你需要調用客戶端的 codeAt 方法。 codeAt 方法接受智能合約地址和可選的塊編號,並以位元組格式返回位元組碼。
你也可以在etherscan上查詢16進制格式的位元組碼 https://rinkeby.etherscan.io/address/#code
contract_bytecode.go
首先創建一個ERC20智能合約interface。 這只是與您可以調用的函數的函數定義的契約。
然後將interface智能合約編譯為JSON ABI,並使用 abigen 從ABI創建Go包。
假設我們已經像往常一樣設置了以太坊客戶端,我們現在可以將新的 token 包導入我們的應用程序並實例化它。這個例子里我們用 Golem 代幣的地址.
我們現在可以調用任何ERC20的方法。 例如,我們可以查詢用戶的代幣余額。
我們還可以讀ERC20智能合約的公共變數。
我們可以做一些簡單的數學運算將余額轉換為可讀的十進制格式。
同樣的信息也可以在etherscan上查詢: https://etherscan.io/token/?a=
Commands
erc20.sol
contract_read_erc20.go
solc version used for these examples
『叄』 以太坊開發人員正在應對最壞情況
以太坊准備好迎接「倫敦」硬分叉了嗎?
隨著以太坊准備在8月4日星期三激活其第11次向後不兼容升級,也稱為「硬分叉」,一些開發人員擔心升級可能會在部署前進行更多測試。
在7月23日星期五舉行的每兩周一次的以太坊核心開發者會議之後不久,以太坊基金會的提姆·貝科在所有的核心開發者Discord 聊天室中寫道,「有幾個人已經聯系或發推文說他們不一定對不延遲[硬分叉]感到滿意……我[在會議上]詢問了這個問題,似乎沒有人有強烈的意見,但有些人提到這可能不是正確的方法。」
在回應貝科的評論時,以太坊軟體客戶端開發人員阿列克謝·阿胡諾夫表示,他同意,鑒於最近發生的事件,在每兩周一次的會議上,沒有更多討論可能推遲被稱為「倫敦」的硬分叉。
「我想我知道為什麼,」阿胡諾夫寫道。「推遲 [倫敦] 是一個敏感話題,沒有人願意承受壓力,這是可以理解的。」
聊天室中的其他人懇求以太坊開發人員認真考慮將倫敦再推遲幾周進行進一步測試。
對倫敦升級風險的擔憂—其中包括影響以太坊費用市場的有爭議的代碼更改,稱為以太坊改進提案(EIP)1559—在以太坊軟體客戶端Geth中發現一個錯誤後增長。
作為背景,Geth是最流行的用於連接以太坊的軟體。據Ethernodes.org稱,在所有同步到以太坊網路的計算機(也稱為節點)中,估計有86%運行Geth客戶端軟體。
7月21日星期三,一個月前啟動倫敦硬分叉的以太坊測試網路Ropsten,在運行Geth的節點將無效交易挖入一個區塊,而運行少數客戶Besu和Open以太坊的節點卻拒絕了它。
幾個小時內,Geth團隊發布了一個補丁程序,並鼓勵所有用戶將他們的軟體更新到最新版本號Terra Nova1.10.6。
雖然沒有開發人員認為該漏洞應該在周五的電話會議期間延遲倫敦的主網路激活,但一些開發人員確實討論了如果在以太坊而不是在測試網路上發現此類漏洞的適當行動方案。
「如果像這樣的事情發生在主網上,我們會怎麼做,尤其是在大多數客戶Geth正在生產區塊的地方?顯然需要幾個小時才能修復,」貝科在會議期間說。
以太坊基金會的馬丁·霍爾斯特·斯溫德強調,這些漏洞在Ropsten上並不是前所未有的,雖然解決它們「很麻煩」,但有兩種方法可以解決它們。
首先,如果用戶的節點遵循錯誤的區塊鏈版本,用戶將需要在鏈分裂之前在內部將鏈「倒回」到區塊,並使用修補過的Geth軟體同步到新鏈。其次,如果用戶的節點尚未同步到區塊鏈的某個版本,但正在嘗試連接到網路以收集有關最近交易的數據或執行交易,則用戶最終可能會連接到錯誤版本的鏈。為了避免這種情況,這些用戶需要將以太坊上遵循正確鏈的某些節點「列入白名單」,並與卡在錯誤鏈上的其他節點隔離。
倒帶和白名單以太坊節點都可以通過Geth完成。Ropsten上的礦工能夠使用這些策略解決上周三發生的鏈分裂問題,盡管一位礦工在周五的會議上指出,在周三的事件發生之前,修復鏈分裂的指令沒有得到有效傳達,因此讓許多礦工對如何正確重啟節點感到困惑。
用戶「AlexSSD7」在Discord 聊天室中寫道,作為以太坊礦池的代表,他們「擔心」Geth中的錯誤,並指出,「一分鍾的[網路]停機時間讓我們付出了很多代價。一小時的停機時間對我們來說是2萬美元。」
客戶端軟體中的意外錯誤確實會對在主網路上運行的交易所和企業造成破壞,這就是為什麼開發人員強調需要一個強大的監控系統,該系統可以快速提醒節點運營商鏈分裂並鼓勵他們暫停運營直到進一步調查。
「這似乎是一個非常容易實現的成果,為生態系統提供了一種價值基調。如果你不確定如何開始,請在Discord中詢問,」貝科在周五的會議上說。
如果在主網上部署倫敦後再次發生類似於周三發生的錯誤,這些解決方案肯定會有所幫助,但它們不一定是用於解決更大規模問題的相同解決方案,例如黑客神奇地列印了1億個ETH。
如果發生如此災難性的事情,以太坊基金會的丹尼·瑞安在周五的會議上表示,很難提前知道開發人員將如何進行。
「我認為對於將出現的多種類型的錯誤和多種類型的特性,只有多種選擇,」瑞安說。
網路漏洞的影響越嚴重,解決漏洞的解決方案就越可能具有侵入性——並且對以太坊作為安全區塊鏈的聲譽的損害就越大。
隨著以太坊發展路線圖的近期硬分叉越來越雄心勃勃,找出最壞情況的潛在解決方案以及與網路權益持有人的損害控制計劃可能很快成為開發人員考慮的當務之急。
Fountain聯合創始人馬修·香森說:「傳統市場的DeFi:當安全代幣出現時。」 。 亮點 : Fountain是以太坊上的一個去中心化交易所,使用戶能夠買賣安全代幣。香森強調了區塊鏈技術提供的流動性和可訪問性,每天24小時可訪問並允許即時結算。證券通證化還有其他一些好處,包括進一步提高可訪問性的資產透明度和分拆。然而,建立一個完全去中心化的證券交易所有很多挑戰。入職客戶和新證券都需要遵守國際法規,包括了解客戶法律和託管許可證。
「信貸授權的力量」,Aave創始人斯坦尼·庫萊霍夫的演講。亮點: Aave是一個建立在以太坊基礎上的去中心化借貸協議。該協議背後的團隊已經開發出一種可以提供零抵押貸款的產品。庫萊霍夫認為,這是在將DeFi流動性引入實體經濟和推動Aave借貸需求方面向前邁出的一步。
以太坊創造者維塔利克·巴特林所說的「DeFi之外的事情」。亮點: 除金融服務外,社交媒體和公共產品融資是以太坊尚未開展的兩項活動。巴特林認為,網路的代幣經濟和抵抗審查是這些活動能夠從建立在去中心化區塊鏈之上獲益的兩個原因。
「Uniswap,DeFi&消費金融的未來」,Uniswap增長負責人Ashleigh Schap的談話。亮點: Uniswap實驗室正試圖與Talos、Paxos和Fireblocks等區塊鏈基礎設施公司建立合作關系,將DeFi解決方案連接到PayPal和E*Trade等知名金融 科技 公司的後端。
Circle協議開發者朱利安·布特盧普談到「為什麼DEX正在吞噬世界」。亮點: 在最好的情況下,[去中心化金融]允許世界公民平等地使用所有貨幣、股票和金融平台。隨著領域的發展,去中心化將成為一種趨勢。監管者將監督傳統金融界使用的協議,用戶仍將有權進入DeFi如今的「狂野西部」試驗場。
『肆』 怎麼接以太坊公鏈
建立連接以接儒以太坊公鏈。
一、1、以太坊客戶端下載,注意:需翻牆,下載版本為1.8.23-stable,否則可能出現與以太坊錢包客戶端存在不匹配問題。
2、以太坊錢包客戶端下載。
3、安裝以太坊客戶端。
二、私有鏈創建:創建創世區塊。
三、安裝並啟動以太坊錢包客戶端。
『伍』 ethermine礦池官網是挖以太坊的嘛
不是。2020年6月29日,Bitfly(Ethermine礦池母公司)官方推特表示,以太坊2.0測試網Altonav0.12已正式啟動,Prysm、Teku、Lighthouse和Nimbus四大客戶端已開始運行測試網(註:Bitfly推文中提到的SigmaPrime是以太坊2.0客戶端Lighthouse的開發團隊)。Ethpool(Ethermine)ETHpool.org是第一個官方的以太坊礦池。此前由於工作量超負荷,該礦池不接受新用戶,只接受老客戶。
『陸』 以太坊平台版本怎麼下載
通過官網下載。
我們的推進非常快:第一個升級的測試網是Ropsten,計劃於3月10日升級。主網升級計劃在4月14日進行。如果你在運行以太坊節點,你應該盡快升級到用於測試網的、兼容柏林的版本,且在4月7日前升級用於主網的版本。查看下面兼容柏林的客戶端版本以及納入此次升級的EIP的細節。柏林升級時間經過多個月得計劃,柏林升級終於要來了!。
繼伊斯坦布Istanbul)與繆爾冰川(MuirGlacier)升級後,柏林升級計劃於以太坊主網區塊高度12,244,000部署。我們期望它在2021年4月14日周三左右上線,但由於區塊時間是可變的,確切日期可能有變。
『柒』 關於以太坊ETH合並的錯誤觀點理清
隨著合並的臨近,越來越多的文章在向人們發出信號:它確實快要臨近了。這也帶來了和 PoS 相關的一系列問題的討論,人們在反復討論著同樣的話題和同樣的誤解。在上周 Kiln 測試網成功合並時,我已經在一定程度上看到了這一狀況,今後我們還會看到更多類似的東西,所以我將一些常見的問題、觀點歸納如下。
每當看到有人提出這些觀點時,我就可以把這篇文章分享給他,我希望大家也可以這樣做。如果本文存在一些紕漏,還望斧正或提出補充建議。
什麼是合並?
更多的信息可以在 ethmerge.com 上找到,所以本部分將簡單介紹。
在合並之後,Ethereum 將採取 PoS(股權證明)而不是 PoW(工作量證明)共識。合並並非「ETH 2.0」、也不存在「ETH 2.0」,這已經是一個過時的術語。
如果是 ETH 持有者,則不需要做任何事情。合並後你仍將持有相同數量的 ETH,沒有「ETH2 幣」,也不需要進行任何遷移。一切都完全相同,只有共識機制發生了變化。
之所以被稱為「合並」,是因為 ETH 將信標鏈(共識層)與現存的鏈(執行層)合並,並拋棄了執行層的 PoW 部分。
解釋一下,「共識」只是一個花哨的詞彙,其含義是指如何對交易進行排序並保證安全性。PoW 和 PoS 都是實現共識的不同手段。
PoW:"打亂區塊順序的成本太高了,因為按規則辦事更劃算。"
PoS:「擾亂區塊順序的成本太高了,因為如果我這樣做就會失去我抵押的所有錢。」
由於只是共識機制的改變,PoS 本身並不會大幅降低 Gas 費用。
為什麼合並?
降低安全成本,因為達成共識所需的能源更少。
對於 PoW 來說,收益需要為礦工使用的所有硬體和能源買單,否則將無人再去挖礦。這就需要大量發行並迅速賣出 Ethereum 以換取法幣來支付賬單。
而 PoS 則不然,PoS 只需要支付給投機者一些收益,讓人們願意存入資本,而不是直接投資到其他地方。除了一台普通的電腦和互聯網連接之外,並不需要支付大額賬單。所以收益率只需要反映所涉及的機會成本和風險。
更具可持續性。
一條鏈的安全性基本上與它的市值成正比。無論是 PoW(更高價值的 Token 獎勵 = 更有理由按規則行事 = 更多的礦工 = 更難以破壞共識)或 PoS(更高價值的抵押 Token = 更有理由按規則行事以避免失去抵押品)都是如此。
新發行的 Token 本質上是將價值從所有持幣人身上轉移走,並重新分配給特定的人。在其他條件相同的情況下,將這些 Token 賣出可以從網路中提取價值。
這為未來的許多擴容解決方案打開了大門:數據分片、無狀態、輕客戶端等等。
通過分離執行層和共識層,這將有助於降低未來的代碼復雜性。
安撫環境和 游戲 玩家當然是一個積極的副作用,但這並非是切換到 PoS 的主因。切換更多是由於外部因素導致的,Ethereum 作為一個協議並沒有對整個網路太多的控制權,例如能源生產、GPU 供應鏈等等。
何時合並?
目前官方尚未公布日期。綜合各方面的原因,開發者和社區對 6 月中旬合並持謹慎樂觀的態度
目前仍在測試之中,在開發人員完全確信不會出現錯誤之前,不會進行合並。
我個人不把希望寄託在 6 月,但我認為至少也會在夏季完成,除非在測試過程中出了極大的問題。例如,出現一個需要幾周時間來修復的關鍵錯誤,或者規範本身存在需要幾個月時間來修復的漏洞。
難度炸彈被設置在 6 月,所以無論屆時是否進行合並,都將進行一次硬分叉。
建議將 wenmerge. com 存入書簽,以便快速查看測試網合並的最新預估。
流傳已久的錯誤觀點
觀點:「你這個白痴!開發團隊會像過去一樣拖延,早在數年前他們就應允合並了,但至今仍未兌現。」
首先是一些說明:現在仍未宣布正式的合並日期,此前也從來宣布過。一個本就不存在的最後期限,何來的拖延之說呢?
類似於「將在 2018 年轉換為 PoS」的說法來自於極端樂觀的態度,並且低估了 PoS 設計的復雜性和從 PoW 到 PoS 的安全過渡的復雜性。此前開發者所做的工作相當於部分完成了 Casper FFG 規范(一個混合 PoW 和 PoS 的機制),但它最終被廢止了。現狀已經存在很多不同了:
經過多年的研究、對潛在的攻擊方向進行分析,現在擁有一個完整的協議規范。
客戶端已經實現,現在只差測試尚未進行。
合並時所有人都在工作,除了合並外沒有其他工作。合並所需的必要步驟都已完成。這甚至不是「他們已經完成了像 EIP1559 這樣復雜的內容,所以現在可以把更多的注意力集中在合並上」,而是:「他們把所有的注意力都集中在合並上」。不可能會出現這種狀況:因為開發者需從事其他內容的工作而導致合並再次被推遲。在合並完成之前,他們沒有其他事情可以做。
自 2020 年 12 月以來,PoS 實際上正在以信標鏈的形式運行。這意味著以太坊的 PoS 已經在生產環境中進行了一年多的測試(在一定程度上),目前有超過 1000 萬 ETH 在運行。它只是還沒有為執行層生產區塊而已。
觀點:「數以百萬計的質押 ETH 將在解鎖的那一刻崩盤。」
可以肯定的是,會有大量的鎖倉者想要最終獲利,尤其是那些在 32 個 ETH 僅價值 1 萬美元時就鎖定了 ETH 的人。但從一角度來看,還有很多需要考慮的問題。
合並並不會解鎖任何 ETH。解鎖將在合並後的第一次硬分叉中進行,可能是 6-8 個月後。這意味著數個月內都將沒有 PoW 方式增發的 ETH(約 13000 ETH/天)被拋售,也沒有 PoS 增發的 ETH 進入流通。
就像存 ETH 要排隊一樣,取 ETH 也要排隊。假設發生大規模拋售事件,每個人都將處於排隊之中,以每天 1125 名的速度依次解鎖。所以不存在 "開閘放水 "的時刻。每個人解凍都需要一年多的時間,一年的時間里,每天有約 38000 個 ETH 進入流通領域(大約是日均量的 1%)。
合並後,驗證者也將開始收到費用獎勵,有預估表明收益率或將翻倍。現在有成千上萬的人在排隊等待進入質押。他們既然可以接受 5% 的 ETH 收益率,我不認為他們會在收益率變成 10% 的時候放棄存入。
到目前為止,抵押所涉及的最大風險是合並本身。一些災難性的事情可能會導致合並出錯,盡管存在這種風險、盡管 ETH 被鎖定到一個未知的未來日期,但人們已經鎖定他們的 ETH 一年多了。有多少人或機構還願意袖手旁觀、等待這種風險消失後再進入呢?
抵押者退出就意味著更少的驗證者,這意味著對不退出的抵押者有更高的獎勵。這也意味著更能激勵其他之前未投資的人開始投資......
當然,這是加密世界,讓加密歸於加密。合並將帶來興奮和波動,可能會出現「sell the news」的跌幅,誰又知道呢?我不會假裝預知未來,但在我看來,更多的 ETH 可能會流入、而不是流出鎖倉。
觀點:「如果 PoS 這么好,Ethereum 為什麼不從一開始就這樣做呢?」
PoW 很容易概念化並實現,PoS 則不然。當我們回到 2014 年,PoS 尚是一個仍在研究的理論概念,只有一些區塊鏈實施了它的某種特定版本。
在考慮實施 PoS 之前,需要從研究角度解決一些基本問題。
沒有放之四海而皆準的 PoS。每個 PoS 區塊鏈都有自己的 PoS 規范,在各方面都有優缺點,所以這並非是「這個鏈做到了,為什麼 Ethereum 不能做同樣的事情」這樣簡單。
以一個 PoW 鏈作為開始,讓任何人都可以在無需許可的條件下開采 crypto,這讓 crypto 的分發機制比那些最初就是 PoS 的鏈要好得多。因為那些鏈從最初就是 PoS,這樣必須決定如何分配初始 crypto,而不是無需許可的分發 Crypto。
Ethereum 存在預挖、預售,但經過多年的換手,現在已經稀釋到一半左右,使其分布更接近 BTC 的分布。所以在 2022 年,當 ETH 作為流動性極強且易於獲得的資產時,這並不是什麼大問題。
觀點:「這實際上只是在多年努力後最後一次坑害礦工的伎倆。」
從第一天起,PoS 就是最終的目標,每個人在挖礦時都知道它早晚有一天會結束。這里並沒有什麼不公正的事情發生。
經濟因素勝過任何形式的礦工對鏈的忠誠度。你可以把一條鏈看作是一個企業,把礦工看作是雇員。
礦工/雇員已經為他們提供的服務(即安全共識)獲得了區塊獎勵。工資由僱主支出,它來自於稀釋現有持幣者的價值。
礦工流向提供獎勵最高的鏈,如果有另一個可由 GPU 開採的 crypto 可以提供更多的獎勵,大多數礦工會立即拋棄 Ethereum。
類似地,如果驗證者能夠以更低的價格完成它所需要的服務,那麼 Ethereum 將支付更少的費用。
這並不完全是排他性的。礦工也可以 ETH 的持有者,以及區塊鏈的使用者。沒有什麼能阻止他們成為抵押者並獲取抵押獎勵。
觀點:「如果挖礦沒有花費現實世界的能源,則這枚 crypto 就不再具有內在價值。」
我不太相信這種說法。反復計算哈希值直到找到一個符合任意要求的哈希值,這並沒有什麼神奇之處。我的意思是,PoW 的區塊鏈其工作是通過解密來完成的,但這並不意味著解密本身就能為世界帶來價值。提高一個 Crypto 的挖礦難度並不會神奇地讓每個人都變得更富有,它只會讓挖礦的利潤降低(當然,如果對這種 Crypto 的需求量也上升則不然)。
在我看來,一個幣的價值最終來自於供給和需求,而需求來自於區塊空間的價值。無論 ETH 是由礦工還是鎖倉者生產的,人們都需要 ETH 來購買區塊空間。當然,礦工越多,安全性/去中心化程度越高,這進一步增加了區塊空間的價值主張,這是一個正反饋循環,但反饋循環也存在於 PoS 的 Ethereum 中,它也同樣酷。
觀點:「PoS 是中心化的不二法門。」
PoS 與 PoW 基本相同,但又存在差異。「更好」或「更壞」只取決於你的看法。在我看來,PoW 實際上只是 PoS 的額外步驟。
Ethereum 作為一個社區高度重視去中心化,任何潛在的中心化趨勢都會被研究團隊注意到並提出緩解的方法,即使是以其他重要的東西為代價,就比如可擴展性(保持低 Gas 限制以便更多的節點可以參與其中,即使這會導致擁堵和高費用)。
盡管目前存在一些缺點,但去中心化是一個緩慢的過程,我們還沒有到那一步。目前有許多中心化的拐杖從長遠來看是需要消失的。我個人認為,想出一大堆東西來解決某個問題比「放棄並說因為某問題而不能做」要吸引人得多。
Ethereum 的 PoS 有一些有趣的設計經常被忽視。單個驗證器癱瘓、搗亂或直接攻擊網路都不會受到很嚴重的懲罰。而一千個驗證器同時這樣做則會受到更嚴重的懲罰。
這意味著,如果你是一個擁有數千個驗證者的大型企業,為了你自己的利益,應該把它們去中心化,避免使用雲主機、使用不同的客戶端等等。當然,資本仍然是集中的,但至少故障點是去中心化的,這對網路的整體 健康 是有利的。
與依靠中心化攤銷成本的大型礦業相比,通過能源更容易發現 PoW 挖礦並被當局關停。在全世界范圍內移動采礦設備是很難的,但鎖倉則不需要,不需要消費級設備以外的任何額外硬體。
觀點:「PoS 實際上就是『越有錢賺得越多』。」
是的。不幸的是,我們生活在一個財富高度不平等的世界。blockchain 並不能解決這個問題。
可這也是 PoW 的真實情況。誰有錢誰就可以買更多的礦機、賺更多的錢。在礦業,投資回報率也在隨著規模經濟的發展而變得更好。集中式的采礦作業可以獲得更好的硬體折扣、並搬到電力便宜的地方。獨立小礦工在現實中根本無法與之競爭。有了 PoS,每個人都能按比例獲得相同的收益,無論他們的股份是 10 美元還是 1000 萬美元。
它可能是中心化,但那些大的采礦業務沒有理由攻擊網路並削弱它,因為他們在基礎設施上投入了數百萬美元。所以……或許你對大型中心化主體的存在沒有意見,只是對他們在網路中存在巨大利益而不滿?
觀點:「存款被動產生利息,這是在無中生有地印錢?這簡直就是中央銀行和法幣的翻版!」
驗證者仍在進行著「工作」:創建區塊和驗證其他區塊。只是這些工作完全由 blockchain 達成共識所需的實際有用的工作組成,而不是一遍又一遍地計算哈希值。
這並不是真正的 "憑空印出的免費的錢",這些資金仍然有成本,它們只是比能源賬單更抽象、更不直觀而已。他主要存在於下面幾個成本:
機會成本:如果另一項投資能給你帶來更好的收益,為什麼還要賭?
流動性差:從你存款的那一刻起資金就被鎖定了。你需要排隊等待你的驗證器激活,而當你取款時,又要排隊才能取回。
固有風險:這仍然是一個相當新事物,可能會出現問題:一個關鍵錯誤、網路被攻擊、你的抵押物受損等等。
波動性:這仍然是一種不穩定的資產,如果你以本國法幣計價,那麼使用一種可能一夜之間下跌 30% 的資產來獲取 5% 的收益率並不是那麼好。
維護:驗證者需要維護驗證器、更新軟體等,以此來確保 100% 的正常運行時間。
這就是它有趣的地方:越多的鎖倉者、每人的獎勵就越低。這也意味著所有成本都將交由市場本身定價。如果質押收益率太低,那麼獎勵就不能證明成本的合理性,人們就會撤出並投資於其他地方,這一舉動會使收益率回升。同樣,如果收益率太高,也會吸引更多的資本使收益回落。
就通貨膨脹而言。假設市場認為 5% 是理想的收益率,其中 3% 來自增發。這樣算下來,每年大約有 3000 萬個 ETH 被抵押,將發行 90 萬個新 ETH。在總供應量為 1.2 億 ETH 的情況下,通貨膨脹率為 0.75%。只要 Gas 費用高於 23gwei,EIP1559 燃燒的 ETH 就將超過這一數量。我要強調的是,Ethereum 很快就會成為一種帶有收益的通縮資產。
「ETH 一直沒有供應上限,且他們一直在改變貨幣政策。」
多年來,Ethereum 的目標一直是「確保網路安全的最低可行發行量」,將網路安全置於控制供應上限之上。對貨幣政策的任何更新都沒有增加供應通貨膨脹。從第一天起低通脹率就一直是目標。
一旦 EIP1559 的燃燒率與發行率相匹配,就會有一個作為有效供應上限的平衡點——再次由市場力量決定對 Ethereum 區塊空間的估值。
並不存在一個 "Ethereum 中央銀行 "任意調整利率並向親信印鈔。市場本身決定了有多少通貨膨脹/通貨緊縮,並不存在一個可以像中央銀行控製法幣通貨膨脹率那樣的實體控制 Ethereum。
觀點:「巨鯨有足夠的錢來接管和改變 游戲 規則,並打擊誠實的鎖倉者。」
不,Ethereum 沒有任何形式的鏈上治理。
協議更新是社區的努力(Layer 0),你不需要鎖倉 ETH 來提出不良的提案、參與協議更新。
這一過程與 PoW 完全相同。即使你擁有 99% 的算力,你也不能在沒有私鑰的情況下進行無效的交易、竊取他人資產、改變協議規則,或者除了重組區塊之外真的做些什麼。1% 的誠實節點將拒絕任何不遵守規則的區塊,你將在一個無效的/無用的鏈上挖礦。現在把「哈希算力/挖礦」換成「質押金額/鎖倉」,PoS 也是如此。不過不同的是,被發現重組區塊的人將被銷毀他們的整個權益,而鏈不能完全摧毀采礦機。
簡單地說,這涉及到大量的 ETH。在合並之前高達 1000 萬計數的 ETH,約合 300 億美元。鎖倉的 ETH 數額和 ETH 的價值預計都會上升,所以攻擊變得越來越不可能,因為做一次攻擊所涉及的經濟成本太高了。而且如果攻擊來自外部行為者,他能夠獲得這么多 ETH 就是很荒謬的,你在哪裡能買到 1000 萬 ETH 來擁有 51% 的股份?
觀點:「32 個 ETH 太多了,普通人沒有這么多錢。」
我同意這是一個很大的問題。之所以有這么高的數字,是因為它必須落在一個技術的平衡點上:它必須低到有充足的驗證者來保證鏈的安全,但又要高到避免驗證者太多以使鏈的開銷膨脹。
從技術角度來看,有一大問題涉及到 32ETH,當時 32ETH 價值約 7000 美元。2017 年的早期曾有人甚至建議最低超過 1000ETH。
值得慶幸的是,就像礦池的存在一樣,也有鎖倉池,允許用戶以小金額參與鎖倉。這歸功於像 RocketPool、Secret Shared Validators 這些使用智能合約的無許可、去中心化的非託管協議。而且由於上面提到的二次懲罰,我相信從長遠來看,去中心化的鎖倉操作會比中心化的要好。像 Rocket Pool 這樣的協議最好被看作是基礎鎖倉的高級抽象,而不是 "只是一個鎖倉池"。
觀點:「PoS 還沒有被證明,而我們知道 PoW 是有效的。」
這實際上是完全公正,顯然我們無法真正的反駁這一點,只有時間會證明。只是我認為在 Ethereum 正在轉向 PoS 的背景下,這是無關的。如果你不相信它,就不要參與/投資它。我個人相信一個長期可持續的 PoS Ethereum,但即使如此,我也樂於見到 bitcoin 繼續沿用它的 PoW。
這都是我們一生中偉大的 crypto 實驗的一部分。PoS Ethereum 要麼只是一陣風,失敗直至默默無聞,要麼將成功地創造出能夠超越人類的怪物般的強大網路。
我在 bitcoin 和 Ethereum 中看到,為了實現這一目標,優先考慮去中心化是關鍵。盡管兩者的理念大不相同,但我很高興能同時擁有這兩種東西,以真正看到長期的價值。
『捌』 以太坊錢包哪款比較好用,交易平台哪個靠譜
本周,比特幣錢包公司 KryptoKit 發布了以太坊錢包 Ethereumwallet 的測試版。雖然以太坊這樣的比特幣2.0平台非常具有創新性,但是要使其成功,首先必須要有易於使用的應用。以太坊擁有眾多非常有前景的概念,但是許多人不得不承認以太坊對於普通消費者來說仍然不具備實際可操作性。因此,Cointelegragh 將介紹3個專為以太坊用戶開發的錢包,這些錢包易於使用,甚至連上了年紀的爺爺奶奶都能使用哦。 Ethereumwallet.com Ethereumwallet 是一款跨平台客戶端網頁錢包,由比特幣錢包公司 KryptoKit 於9月4日發布,KryptoKit 的 CEO 是以太坊的聯合創始人安東尼•迪•約里奧(Anthony Di iorio)。 Ethereumwallet 類似於 KryptoKit 推出的比特幣錢包 Rushwallet,Ethereumwallet 的測試版仍然是基於URL書簽系統而創建的錢包。當然最基本的功能都具備,你可以發送和接收以太幣並加密你的私鑰。 錢包目前支持的功能包括: 1.創建錢包、發送和接收以太幣 2. 創建客戶端錢包、簽署交易(密鑰不會被發送到外部伺服器) 3. 可通過「查看頁面源代碼」審查代碼 4. 可以通過下載網頁錢包(Ctrl + S),離線創建錢包 5. 基於書簽客戶端鏈接,無需用戶名或登錄信息。 即將發布的一些功能包括: 1.導出私鑰功能 2.支持安卓系統掃描的二維碼 3.即將發布 KryptoKit、 iOS 和 Android 版的錢包,支持跨平台。 更多詳情,見 Reddit 帖子。 EthereumWallet.org EthereumWallet.org 的開發者艾倫•鄧克利告訴 Cointelegraph : [...]
『玖』 選擇以太坊客戶端
有很多以太坊客戶端供我們選擇。我們推薦在開發和部署時使用不同的客戶端。
我們推薦 Ganache ,它是一個運行在你個人電腦上的私有連客戶端。它是 truffle 套種中的一部分,
Ganache 將智能合約和交易放在前台並且中心化,從而簡化了dapp的開發。使用 Ganache 你可以
快速查看你們的應用是如何影響區塊鏈的,並且對賬戶,余額,智能合約創建以及燃料消費進行自省。
Ganache 運行在 http://127.0.0.1:7545 。默認會創建是個賬戶,重啟後賬戶依然不會變,
當然也可以手動隨機賬戶,你也可以用你自己的賬戶。
我們同樣也推薦使用 truffle develop ,它是 truffle 內置的開發鏈工具。不需要任何的額外安裝,
你要使用它只需要一條命令行即可:
Truffle Develop 運行在 http://127.0.0.1:9545 上。
當你的開發機沒有圖形界面時就無法直接使用 Ganache ,而 Ganache CLI 就提供了沒有圖形界面系統的能力。
有很多官方和非官網的以太坊客戶端你可以選擇。以下是部分:
『拾』 用Go來做以太坊開發⑤事件日誌
智能合約具有在執行期間「發出」事件的能力。 事件在以太坊中也稱為「日誌」。 事件的輸出存儲在日誌部分下的事務處理中。 事件已經在以太坊智能合約中被廣泛使用,以便在發生相對重要的動作時記錄,特別是在代幣合約(即ERC-20)中,以指示代幣轉賬已經發生。 這些部分將引導您完成從區塊鏈中讀取事件以及訂閱事件的過程,以便交易事務被礦工打包入塊的時候及時收到通知。
為了訂閱事件日誌,我們需要做的第一件事就是撥打啟用websocket的以太坊客戶端。 幸運的是,Infura支持websockets。
下一步是創建篩選查詢。 在這個例子中,我們將閱讀來自我們在之前課程中創建的示例合約中的所有事件。
我們接收事件的方式是通過Go channel。 讓我們從go-ethereum core/types 包創建一個類型為 Log 的channel。
現在我們所要做的就是通過從客戶端調用 SubscribeFilterLogs 來訂閱,它接收查詢選項和輸出通道。 這將返回包含unsubscribe和error方法的訂閱結構。
最後,我們要做的就是使用select語句設置一個連續循環來讀入新的日誌事件或訂閱錯誤。
我們會在下個章節介紹如何解析日誌。
Commands
Store.sol
event_subscribe.go
智能合約可以可選地釋放「事件」,其作為交易收據的一部分存儲日誌。讀取這些事件相當簡單。首先我們需要構造一個過濾查詢。我們從go-ethereum包中導入 FilterQuery 結構體並用過濾選項初始化它。我們告訴它我們想過濾的區塊范圍並指定從中讀取此日誌的合約地址。在示例中,我們將從在 智能合約章節 創建的智能合約中讀取特定區塊所有日誌。
下一步是調用ethclient的 FilterLogs ,它接收我們的查詢並將返回所有的匹配事件日誌。
返回的所有日誌將是ABI編碼,因此它們本身不會非常易讀。為了解碼日誌,我們需要導入我們智能合約的ABI。為此,我們導入編譯好的智能合約Go包,它將包含名稱格式為 <Contract>ABI 的外部屬性。之後,我們使用go-ethereum中的 accounts/abi 包的 abi.JSON 函數返回一個我們可以在Go應用程序中使用的解析過的ABI介面。
現在我們可以通過日誌進行迭代並將它們解碼為我么可以使用的類型。若您回憶起我們的樣例合約釋放的日誌在Solidity中是類型為 bytes32 ,那麼Go中的等價物將是 [32]byte 。我們可以使用這些類型創建一個匿名結構體,並將指針作為第一個參數傳遞給解析後的ABI介面的 Unpack 函數,以解碼原始的日誌數據。第二個參數是我們嘗試解碼的事件名稱,最後一個參數是編碼的日誌數據。
此外,日誌結構體包含附加信息,例如,區塊摘要,區塊號和交易摘要。
若您的solidity事件包含 indexed 事件類型,那麼它們將成為 主題 而不是日誌的數據屬性的一部分。在solidity中您最多隻能有4個主題,但只有3個可索引的事件類型。第一個主題總是事件的簽名。我們的示例合約不包含可索引的事件,但如果它確實包含,這是如何讀取事件主題。
正如您所見,首個主題只是被哈希過的事件簽名。
這就是閱讀和解析日誌的全部內容。要學習如何訂閱日誌,閱讀上個章節。
命令
Store.sol
event_read.go
首先,創建ERC-20智能合約的事件日誌的interface文件 erc20.sol :
然後在給定abi使用 abigen 創建Go包
現在在我們的Go應用程序中,讓我們創建與ERC-20事件日誌簽名類型相匹配的結構類型:
初始化以太坊客戶端
按照ERC-20智能合約地址和所需的塊范圍創建一個「FilterQuery」。這個例子我們會用 ZRX 代幣:
用 FilterLogs 來過濾日誌:
接下來我們將解析JSON abi,稍後我們將使用解壓縮原始日誌數據:
為了按某種日誌類型進行過濾,我們需要弄清楚每個事件日誌函數簽名的keccak256哈希值。 事件日誌函數簽名哈希始終是 topic [0] ,我們很快就會看到。 以下是使用go-ethereum crypto 包計算keccak256哈希的方法:
現在我們將遍歷所有日誌並設置switch語句以按事件日誌類型進行過濾:
現在要解析 Transfer 事件日誌,我們將使用 abi.Unpack 將原始日誌數據解析為我們的日誌類型結構。 解包不會解析 indexed 事件類型,因為它們存儲在 topics 下,所以對於那些我們必須單獨解析,如下例所示:
Approval 日誌也是類似的方法:
最後,把所有的步驟放一起:
我們可以把解析的日誌與etherscan的數據對比: https://etherscan.io/tx/#eventlog
Commands
erc20.sol
event_read_erc20.go
solc version used for these examples
要讀取 0x Protocol 事件日誌,我們必須首先將solidity智能合約編譯為一個Go包。
安裝solc版本 0.4.11
為例如 Exchange.sol 的事件日誌創建0x Protocol交易所智能合約介面:
Create the 0x protocol exchange smart contract interface for event logs as Exchange.sol :
接著給定abi,使用 abigen 來創建Go exchange 包:
Then use abigen to create the Go exchange package given the abi:
現在在我們的Go應用程序中,讓我們創建與0xProtocol事件日誌簽名類型匹配的結構體類型:
初始化以太坊客戶端:
創建一個 FilterQuery ,並為其傳遞0x Protocol智能合約地址和所需的區塊范圍:
用 FilterLogs 查詢日誌:
接下來我們將解析JSON abi,我們後續將使用解壓縮原始日誌數據:
為了按某種日誌類型過濾,我們需要知曉每個事件日誌函數簽名的keccak256摘要。正如我們很快所見到的那樣,事件日誌函數簽名摘要總是 topic[0] :
現在我們迭代所有的日誌並設置一個switch語句來按事件日誌類型過濾:
現在要解析 LogFill ,我們將使用 abi.Unpack 將原始數據類型解析為我們自定義的日誌類型結構體。Unpack不會解析 indexed 事件類型,因為這些它們存儲在 topics 下,所以對於那些我們必須單獨解析,如下例所示:
對於 LogCancel 類似:
最後是 LogError :
將它們放在一起並運行我們將看到以下輸出:
將解析後的日誌輸出與etherscan上的內容進行比較: https://etherscan.io/tx/
命令
Exchange.sol
event_read_0xprotocol.go
這些示例使用的solc版本