[爆卦]go-ethereum是什麼?優點缺點精華區懶人包

雖然這篇go-ethereum鄉民發文沒有被收入到精華區:在go-ethereum這個話題中,我們另外找到其它相關的精選爆讚文章

在 go-ethereum產品中有3篇Facebook貼文,粉絲數超過3,460的網紅Taipei Ethereum Meetup,也在其Facebook貼文中提到, 📜 [專欄新文章] TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架 ✍️ Phini Yang 📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium TEM 區塊鏈基礎教...

 同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...

  • go-ethereum 在 Taipei Ethereum Meetup Facebook 的最佳貼文

    2019-11-22 09:14:06
    有 7 人按讚

    📜 [專欄新文章] TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架
    ✍️ Phini Yang
    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架

    本課程著重在進入區塊鏈產業所需具備的基礎知識。

    區塊鏈技術是橫跨多領域所組成,並又接著在各領域知識的基礎上創新。從網路結構的外觀來看,系統以眾多節點以點對點架構組成,相異於主流日常生活使用網路服務的主從式架構。節點間對資料取得共識的機制也須追溯到分散式系統的研究。

    在以太坊以來,客製化虛擬機以進行運算也成顯學,這塊又屬於編譯器的領域知識。不論在共識層或應用層,系統倚賴密碼學的工具。最後利用區塊鏈簿記上的資產進行獎勵或懲罰來讓系統參與者作出行動,需要經濟學上的工具。

    即使在五年之前進入區塊鏈圈,要能夠一次把這所有的領域接觸過也非容易。這次課程取得在各自領域專精的講者,把每個領域重要的概念提過,並點出與區塊鏈關聯的重點。

    目標並非讓學習者能夠完全掌握所有的領域,而是

    降低日後自行學習的障礙,知道可以從哪裡開始看

    知道哪些領域有學習者自己領域能夠切入合作的缺口

    知道各種領域的瓶頸及前沿研究是什麼。

    課程的安排除了前述眾領域的介紹,最後有一門「客戶端原始碼分析」,全節點便是整個抽象共識機制的具體軟體實作,有了前面的基礎,看到程式碼會比較知道背後設計的原因。

    為什麼從以太坊開始學?

    以太坊鏈上的 Dapp ,不論是在數量或是應用的範圍上,皆遙遙領先其他主鏈。各大主流區塊鏈應用的衍生,也是以以太坊為基礎發展而成。 以太坊目前仍是區塊鏈中最具開源文化的生態系之一,技術支援也是所有公鏈中最完整的,有著最豐富的研究者社群與概念創新。

    課程時數與費用

    課程將分成三階段,每階段授課 12 小時,形式包含講課與實作。
    每一階段 12 小時收費 $4,800 元,早鳥票 $3,600,三人團報價 $3,000/1 人。
    課程人數最多 30 人為主,最低開班人數 10 人。

    🎁 立馬去購票 🎁

    https://www.accupass.com/event/1911150750032715966110

    ❓有任何問題,請聯繫 Phini Yang (Mail)

    以下為每堂課程詳細介紹,以供學員理解:

    1. 經濟學原理 — 賽局理論/供需 By 梁智程, 以太坊基金會

    為什麼要學習這項課程?

    區塊鏈無論是底層協議,或是去中心化應用,系統經常需要設計誘因,並假設系統的多數參與者會依據誘因,做出對自己最有利的行動,利用那樣的行動維持系統運作。

    要討論、分析、設計誘因,經濟學上已有累積已久的語言與工具。因此我們常會在區塊鏈的文章中看到從古典的供給與需求[1]、共有財的悲劇[2] 、或是較現代的賽局理論、機制設計、拍賣等術語。

    這些觀念可能對無經濟學背景的開發者較難掌握。我會試圖在有限時間之內,介紹主要常用的經濟學概念,並點出有運用到這些概念的相關區塊鏈文獻。我們也會介紹到因為區塊鏈特殊的環境,所產生新的機制設計的挑戰以及機會。

    這項技術可運用在哪?

    要設計區塊鏈相關系統,通常需要理解經濟學相關知識。

    課程大綱

    1⃣ 經濟學原理
    - 供給與需求
    - 外部性與公共財
    - 區塊鏈範例:區塊鏈運算資源

    2⃣ 賽局
    基本定義:玩家、報酬、策略、均衡
    非合作賽局 vs 合作賽局

    3⃣ 機制設計
    - VCG 最佳機制設計
    - 區塊鏈範例
    第二價拍賣的手續費 [3]
    賄賂攻擊 [4]、反機制 [5] 與全知識證明 [6]
    - 激進市場範例
    平方投票

    2. 虛擬機 EVM By 戴宏穎 (海帶), Second State

    為什麼要學習這項課程?

    虛擬機就像是肝臟,雖然是人體中沈默的器官,但沒有這個元件,整個系統就會失去作用。

    對於使用者而言,不論是在 Ethereum 上轉 Ether 、部署合約、或者呼叫合約,基本上都不會注意到有虛擬機的存在。可這個無感的存在卻是合約能夠執行的核心關鍵。如果今天沒有虛擬機,那 Ethereum 就無法撰寫 smart contract 、無法執行 DApp (迷戀貓、去中心化交易所等應用)。

    這項技術可運用在哪?

    除了是設計有執行合約能力的區塊鏈系統中必備的元件外,理解虛擬機也能幫助我們在裡頭進行效能的最佳化與增加新的特殊功能(產生隨機數、進行 hash 運算等)。

    課程大綱

    1⃣ 深入淺出 EVM
    - 虛擬機概論
    - EVM 核心元件
    - 理解 EVM 內部的運作過程

    2⃣ 實作
    - 增加一個新的 opcode magic
    - 增加產生隨機數的 opcode rand (EVM 的隨機該怎麼做)

    3⃣ Eth 2.0
    - Ewasm Virtual Machine

    3. 共識機制—PBFT/PoS/Casper FFG By 邱駿, UnityChain

    為什麼要學習這項課程?

    PBFT(Practical Byzantine Fault Tolerance)誕生至今已逾 20 年。它的發明源於分散式系統中一個著名的共識難題:拜占庭將軍問題(Byzantine Generals Problem)。PBFT 並不是一個針對全開放環境的共識協定 — 事實上在區塊鏈出現之前,並未出現任何一個針對開放環境的拜占庭容錯共識。區塊鏈的橫空出世啟發了研究人員再度審視 PBFT 這個經典。

    PBFT 具有一些與區塊鏈截然不同的特性,這提供了改進區塊鏈一些有用的思路,例如以PBFT為基礎建立的權益證明(Proof-of-stake)模型。儘管在區塊鏈蓬勃發展的今日,PBFT這個經典仍然蘊含許多值得研究人員反覆推敲的巧思,其後續也衍生出非常多新協定,例如 Tendermint / HotStuff / Harmony FBFT 等等。

    以太坊對權益證明(Proof-of-Stake, PoS)的研究最早可追朔至 2014 年。從此之後,以太坊研究員們便一直朝「實現基於 PoS 的共識協定」此一目標前進。PoS 共識的設計是一個跨領域且相當複雜的問題,其包含計算機科學 / 經濟學 / 密碼學等面向。以太坊擁有區塊鏈生態系中最跨領域的團隊,對 PoS 的研究可以說是相當透徹。

    課程大綱

    1⃣ 什麼是共識?
    - 什麼是狀態機?
    - 為什麼需要共識?
    - 為什麼共識這麼難?
    - 正確的共識:安全性(Safety)與活躍性(Liveness)
    - 共識一定可以達成嗎?

    2⃣ PBFT 共識協定
    - 協定概論
    - 安全性與活躍性分析
    - 特性分析

    3⃣ PoS 共識協定
    - 什麼是砍押金/砍押金條件?
    - PBFT 最小砍押金條件
    - 為什麼 PoS 這麼難設計?

    4⃣ Casper FFG
    - 協定
    - 特性分析
    - 改進 PBFT
    - 與 Eth 2.0 整合

    4. 密碼學原理 — 橢圓曲線/零知識證明 By 吳偉誠 (Kimi), UnityChain

    為什麼要學習這項課程?

    隱私在現今世界越來越受重視,但是區塊鏈上任何的交易都是公開透明的,要如何在使用區塊鏈的同時又享有隱私,零知識證明是目前最好的解決方案。

    這項技術可運用在哪?

    零知識證明除了使用在隱私外,也能有效率的驗證資料,進而提高交易速度。

    課程大綱

    1⃣ 橢圓曲線簡介

    2⃣ Shamir’s Secret Sharing 介紹與應用

    3⃣ 零知識證明
    - 零知識證明簡介
    - zk-SNARKs
    - 零知識技術的應用與比較

    4⃣ 手把手實作
    - circom 語法及指令

    5. 點對點 p2p 系統 By 賈脈瑄, 以太坊基金會

    為什麼要學習這項課程?

    區塊鏈本身基於點對點(Peer-to-Peer, 簡稱 P2P)網路。大家都知道共識層的重要,但常常沒意識到網路層的安全也很重要。

    P2P 網路的術語及概念本身也很分散,經常散落在網路各處難以系統化的學習。不同的使用情景造就了不同的設計,近年區塊鏈興起,也帶起了和區塊鏈有關的 P2P 系統研究。這門課會帶過 P2P 系統中常用及重要的設計與理由,並介紹區塊鏈系統們怎麼應用這項技術。

    這項技術可運用在哪?

    實作去中心化網路,譬如區塊鏈網路。不同區塊鏈可以設計特化且有效率的 P2P network。

    課程大綱

    1⃣ P2P networking 基礎
    - 歷史背景
    - Overlay
    - Requirements for p2p networks
    - Unstructured networks
    - Structured networks: DHT
    - Gossiping

    2⃣ 區塊鏈的 P2P networking
    - Difference from the classical p2p networks
    - Cases study
    ・Ethereum or Bitcoin
    ・Ethereum 2.0
    - Library: libp2p

    6. 客戶端(Geth)原始碼分析 By Miya Chen, AMIS

    為什麼要學習這項課程?

    Ethereum 擁有非常活躍的開發生態系,以 go-ethereum 為例,透過分析原始碼更加了解 Ethereum 協議運作過程。

    這項技術可運用在哪?

    根據自身需求客製化模組邏輯,例如:修改 miner 打包 transaction 的順序。

    新增 RPC API,例如:subscribe API。

    記錄額外的 blockchain 資料,例如:每一個 block 其所有 account balance 和 storage 的差值。

    課程大綱

    1⃣ Geth 架構介紹

    2⃣ 理解 tx pool 運作過程

    3⃣ Event subscription 的實作

    4⃣ 手把手實作: 客製化 tx pool

    課程時數與費用

    課程將分成三階段,每階段授課 12 小時,形式包含講課與實作。
    每一階段 12 小時收費 $4,800 元,早鳥票 $3,600,三人團報價 $3,000/1 人。
    課程人數最多 30 人為主,最低開班人數 10 人。

    🎁 立馬去購票 🎁

    https://www.accupass.com/event/1911150750032715966110

    ❓有任何問題,請聯繫 Phini Yang (Mail)

    TEM 區塊鏈基礎教育第三階段 — 跨出工程師只會寫 Code 的既有框架 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • go-ethereum 在 Taipei Ethereum Meetup Facebook 的最佳解答

    2019-10-29 10:52:34
    有 24 人按讚

    📜 [專欄新文章] Ethereum PoA Consortium Chain to Support Inter-Hospital Data Sharing test 使用以太坊 Proof-of-Authority…
    ✍️ Tommy Chen
    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    Ethereum PoA Consortium Chain to Support Inter-Hospital Data Sharing 使用以太坊 Proof-of-Authority 聯盟鏈進行跨醫院的資料共享

    Crosslink 2019 Taiwan 第二天的議程中,其中一個議程由政治大學的陳恭教授跟我們分享他與醫院合作,解決醫療資料交換不便的案例。建立一個照護資訊整合平臺,透過以太坊聯盟鏈的智能合約,讓民眾以App就能將醫療資料授權給指定的醫護人員,解決病歷資料在交換時不便的情形。

    Kung Chen, Professor . source: Crosslink 2019 Taiwan

    電子病歷交換中心EMR(Electronic Medical Record) Exchange Center (EEC) 在台灣發展已有數年的時間,但因為繁瑣的授權流程,民眾要在不同醫院間來回奔波、申請病歷資料,以及醫護人員至偏鄉和離島看診時,無病歷可查詢。

    陳恭老師和他的團隊運用區塊鏈建立一個照護資訊整合平臺來改進電子病例交換的過程

    病人可以自行決定要將EMR授權給誰、多久、資料的種類

    病人授權的紀錄儲存在個別的智能合約上

    病人可以透過手機app來簽屬/查看/修改他們的授權

    醫療人員需要病人的授權才能查看他們的EMR

    解決方法

    A Blockchain-Based Framework for EMR Sharing

    建立一個由各個醫療院所組成的以太坊聯盟鏈,來管理跨機構的EMR共享

    使用go-ethereum,PoA consensus,考慮到隱私的問題

    民眾要先經過身分驗證,才能透過使用智能合約管理EMR授權

    Main Design Features

    民眾的EMR 儲存在原本的醫療院所

    以索引方式整合跨機構的EMR

    EMR的存取權限記錄在智能合約上

    User Types & Roles:

    Front-End:

    病人(監護人) : 監護人可以代替病人做授權的動作

    Hospital clerks:負責驗證病人的身分

    Back-End:

    提供醫療照護的人 : 查看EMR 提供病人醫療照護的人

    系統管理員: 管理醫院系統和區塊鏈整合平台

    運作流程

    運作流程分為民眾端和醫療人員端

    民眾端

    1. 病人下載照護授權APP”

    2. 使用APP完成註冊

    3. 由醫療機構人員作為核對人(RAO)確認註冊者的身分

    4. 確認後,民眾可取得一組帳號(public/private keys),接著可以把授權資訊紀錄在個人的智能智能合約上

    病人授權的資料

    病人對於他們的授權的資料有絕對的控制權

    授權的資料種類 : 健康促進、醫療照護……

    授權的機構 : 可以指定聯盟鏈裡面的任何醫院

    授權人員 : 行政人員 、 長照服務人員……

    授權期限 : 1天、1周、1個月、1年

    以上的這些授權資料,病人可以隨時View/Modify/Cancel

    病人將要授權資訊以private key做簽章,部署到鏈上後,授權資訊紀錄在病人的智能合約

    醫療人員端

    根據區塊鏈智能合約紀錄的授權資訊,照護資訊整合平臺以索引列表顯示醫療人員被授權調閱的照護資訊,授權的醫療人員在調閱後,可以直接顯示在系統平臺上,平臺可在平板、手機和電腦上使用。

    優勢與限制

    優勢

    病人對於他們自己的EMR有控制權

    平臺整合了EMR,提升了醫療照護質量

    平臺可以使用手機操作,所以隨時、隨地都能授權或顯示EMR

    限制:

    Text or File based EMR only; no images (X-Ray, …)

    Ongoing works

    System improvements

    加強App使用者的體驗

    Fix minor bugs

    Vertical expansion

    Recruit second-tier participants: clinics affiliated with participating hospitals

    Horizontal expansion

    邀請更多醫院加入這個聯盟

    Ethereum PoA Consortium Chain to Support Inter-Hospital Data Sharing test 使用以太坊 Proof-of-Authority… was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • go-ethereum 在 Taipei Ethereum Meetup Facebook 的最佳解答

    2017-04-18 05:37:49
    有 7 人按讚


    By Frank Wang

    [使用 go-ethereum 1.6 Clique PoA consensus 建立 Private chain (1)] -- by Frank Wang
    Ethereum Proof of Authority

    在 Ethereum 官方的共識機制是使用 PoW,Miner 必須靠使用算力去解決密碼學問題來取得寫帳(打包 Block)權。但 PoW 機制在私有鏈或聯盟鏈上並不是一個那麼有效率的共識機制,私有鏈的維運者必須花費多餘的算力來維持私有鏈的運作。

    而 Proof of Authority 思維是直接指定哪些節點有寫帳權,其他節點透過演算法如果是被授權的節點打包 Block 則判定 Block 有效。

    Ethereum Client 中有不同語言的實作,之前 Parity 版本的實作就有提供 PoA 的共識機制(介紹)。而在前段時間發佈的 geth 1.6 也支援了 PoA 的共識機制。不過 geth 的 PoA 使用方法跟機制和 Parity 的版本不同,geth 實作了 ethereum/EIPs#225 一個稱作 Clique 的共識機制。所以這篇主要筆記如何建立一個 geth Clique Private chain。

    情境中會使用 4 個節點,分別代表兩個普通的節點發起交易,一個創世塊指定的授權節點,一個後期加入的授權節點來玩玩 Clique 。

    安裝 geth

    由於 go-ethereum 使用 golang 開發的,所有的程式都被編譯成單一的可執行檔了,執接下載下來就可以直接執行。

    geth & tools 1.6 — https://ethereum.github.io/go-ethereum/downloads/

    找到相對應 OS 後下載,記得下載 geth & tools 的版本,接下來會使用 geth 1.6 版本的一個創 Private chain 的工具 puppeth 來建立 Clique Private chain。

    最後記得將這些執行檔加入 PATH 方便呼叫。

    環境準備

    待會要建置的環境將會使用 4 個 ethereum 節點,並且全部節點跑在同一台機器上,這樣比較省事。先創好 4 個資料夾,分別叫 node1 node2 signer1 signer2 ,node 是一般的 ethereum client,signer 在接下來的情境中當成打包 block 的角色。

    -> % lsnode1 node2 signer1 signer2

    建立 Ethereum 帳號

    接著我們要替這四個角色各建立一個 Ethereum 帳號。

    frank@frank-linux [10:51:22 AM] [~/src/eth-poa] -> % cd node1

    frank@frank-linux [10:55:08 AM] [~/src/eth-poa/node1] -> % geth --datadir ./data account newWARN [04–18|10:55:30] No etherbase set and no accounts found as default Your new account is locked with a password. Please give a password. Do not forget this password.Passphrase: Repeat passphrase: Address: {c7873030c2532aafe540d9dfd02a08330ee06465}

    在這步驟切換到每個目錄底下,指令 geth --datadir ./data account new 這段指令是指要使用當下目錄底下的 data 目錄當作 geth 存放資料的地方,並且創一個新的 Account。在剛剛建立的 node1, node2, signer1, signer2 都下相同指令創一個帳號。

    一下是我創好的每個角色的 Account address:

    node1: c7873030c2532aafe540d9dfd02a08330ee06465

    node2: 6d650780d493056f679a30b2c65cfa5e07835ad6

    signer1: 5cc640ae524f70c39081d65bc699b3b61a67bd3f

    signer2: 0fe2d8747d24156b342c9fa5c5e7138cf4047a8d

    創好帳號後就可以開始建立 Private chain 了

    建立創世塊設定

    由於 Clique 並不像 Parity 版本的 PoA 靠設定檔設定授權的節點。Clique 是將授權節點的相關資訊放在 Block Header 中,所以我們必須對創世塊做一些設定才可以讓授權機制生效。(但這並不意味著新增或刪除授權節點需要更換創世塊,晚點介紹怎麼新增授權節點)

    Clique 是將授權的資訊放在 extraData 中,但資料結夠的格式並沒有那麼直覺,所以在此使用 geth 1.6 提供的建立 Private Chain 的工具 puppeth 來建立創世塊,puppeth 是各互動式的程式,直接啟動照著指示輸入相關資訊。

    frank@frank-linux [11:19:16 AM] [~/src/eth-poa] -> % 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)> poa_for_fun

    這裡會希望你給你的 Private chain 一個名字

    Sweet, you can set this via — network=poa_for_fun next time!

    INFO [04–18|11:19:21] Administering Ethereum network name=poa_for_funWARN [04–18|11:19:21] No previous configurations found path=/home/frank/.puppeth/poa_for_fun

    What would you like to do? (default = stats) 1. Show network stats 2. Configure new genesis 3. Track new remote server 4. Deploy network components> 2

    這裡選 2 ,要建立一個新的創世塊設定

    Which consensus engine to use? (default = clique) 1. Ethash — proof-of-work 2. Clique — proof-of-authority> 2

    共識機制,選 2,Clique PoA

    How many seconds should blocks take? (default = 15)> 10

    多少秒數會產出一個 Block,在這裡設 10 秒。當然你可以自己設定你想要的

    Which accounts are allowed to seal? (mandatory at least one)> 0x5cc640ae524f70c39081d65bc699b3b61a67bd3f> 0x

    指定一個 Account address 作為授權打包的角色。這裡使用上面產出的 Signer1 的 address。

    Which accounts should be pre-funded? (advisable at least one)> 0xc7873030c2532aafe540d9dfd02a08330ee06465> 0x5cc640ae524f70c39081d65bc699b3b61a67bd3f> 0x

    指定要不要事先給一些 ether。這裡選 node1 和 signer1 的 address,當然這隨你指定

    Specify your chain/network ID if you want an explicit one (default = random)>

    Network Id,直接用 random

    Anything fun to embed into the genesis block? (max 32 bytes)>

    沒什麼需要特別加入 genesis 的,留空

    What would you like to do? (default = stats) 1. Show network stats 2. Save existing genesis 3. Track new remote server 4. Deploy network components> 2

    選 2 存檔

    Which file to save the genesis into? (default = poa_for_fun.json)> INFO [04–18|11:19:50] Exported existing genesis block

    What would you like to do? (default = stats) 1. Show network stats 2. Save existing genesis 3. Track new remote server 4. Deploy network components> ^C

    ctrl+c 離開,會在當下目錄看到一個 poa_for_fun.json 檔案。

    替 4 個節點初始化 Private chain

    使用 geth init 指令,分別替換 4 個 node 的 datadir

    frank@frank-linux [11:38:07 AM] [~/src/eth-poa] -> % lsnode1 node2 poa_for_fun.json signer1 signer2frank@frank-linux [11:38:07 AM] [~/src/eth-poa] -> % geth --datadir node1/data init poa_for_fun.json INFO [04–18|11:39:10] Allocated cache and file handles database=/home/frank/src/eth-poa/node1/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:10] Writing custom genesis block INFO [04–18|11:39:10] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:10 AM] [~/src/eth-poa] -> % geth --datadir node2/data init poa_for_fun.jsonINFO [04–18|11:39:14] Allocated cache and file handles database=/home/frank/src/eth-poa/node2/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:14] Writing custom genesis block INFO [04–18|11:39:14] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:14 AM] [~/src/eth-poa] -> % geth --datadir signer1/data init poa_for_fun.jsonINFO [04–18|11:39:21] Allocated cache and file handles database=/home/frank/src/eth-poa/signer1/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:21] Writing custom genesis block INFO [04–18|11:39:21] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:21 AM] [~/src/eth-poa] -> % geth --datadir signer2/data init poa_for_fun.jsonINFO [04–18|11:39:24] Allocated cache and file handles database=/home/frank/src/eth-poa/signer2/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:24] Writing custom genesis block INFO [04–18|11:39:24] Successfully wrote genesis state hash=5722d7…47e737

    到目前我們已經準備好讓節點可以啟動和互相連線了。

    啟動 geth client 並設定 peers 間的連線

    分別在 node1, node2 目錄使用指令啟動 geth

    geth --datadir ./data --networkid 55661 --port 2000 console

    這裡需要注意的是 datadir 參數沒問題,先前的步驟已經在每個節點各自的目錄都建立了 data 目錄。networkid 大家一定都要用同一個值才可以互相連線。port 用來讓 geth 跟其他 geth 連線所 listen 的一個 port,由於四個節點都在本機,所以這裡必須都指定不同的值。以下使用 node1 2000, node2 2001, signer1 2002, signer 2003 當範例。

    如果節點是授權打包 block 的節點,那你啟動時要先 unlock 你的 account,這樣才可以進行交易的打包。多帶一個 unlock 參數,以及你要解鎖的 account address。啟動後會要求輸入當時創 account 時的 passphrase。所以在這裡啟動 signer1 和 signer2 時都要用 unlock 參數帶入他們各自的 address 解鎖。

    geth --datadir ./data --networkid 55661 --port 2002 --unlock 5cc640ae524f70c39081d65bc699b3b61a67bd3f console

    啟動後會看到這樣的結果,如果沒噴任何錯誤就是啟動成功了,同時會啟動一個 console 的互動介面,可以打像是 admin.nodeInfo 這類的指令來操作 geth。

    在啟動訊息中有一段

    INFO [04–18|12:01:31] RLPx listener up self=enode://87692411dd1af113ccc04d3f6d3d7d47366c81e595525c861c7a3c902ca0a86f46e8d7a837f431536822dbb012f68d942ed96910385805864e990efdf3839a1e@[::]:2000

    由於目前是在 private chain 上,沒有設定啟動節點也沒設定 static node,各節點啟動後是沒辦法找到對方的。所以在此我們把 node2, singer1, signer2 都加入 node1 為自己的節點連上。geth 要連上對方的節點就必須好 enode://@:這格式,複製剛剛啟動 node1 時出現的 enode 資訊將 [::] 換為 127.0.0.1 讓其他節點加入就可以連上了。

    在 node2, signer1, signer2 的 geth console 頁面分別打入指令

    >admin.addPeer(“enode://87692411dd1af113ccc04d3f6d3d7d47366c81e595525c861c7a3c902ca0a86f46e8d7a837f431536822dbb012f68d942ed96910385805864e990efdf3839a1e@127.0.0.1:2000”)

    完成後回到 node1 的 geth console 打入 admin.peers 應該要看到三個節點資訊。

    到這步 geth 節點已經連上可以開始進行 PoA 挖礦和交易了。

    啟動 Miner

    到 signer1 的 console 打入 miner.start() 這時候如果你本機之前沒有啟動過 miner,geth 會先產生 DAG 等 DAG 產生完後就會開始挖礦了。

    在 signer1 的 console 會出現正在 mining 的訊息。

    其他節點則會收到 import block 的訊息。

    Make a transaction

    到這裡 Clique 的 Private chain 已經設定完成了,我們可以開始在這條鏈上做一些交易。接下來為了方便會使用 geth 的 console 來做 send ether 交易,如果你不習慣的話也可以使用 mist 這類的 UI 錢包來做。

    node1 console

    還記得在建立創世塊的時候有先給了 node1 和 signer1 的 address 一些 ether 吧?先用這令看看這些 ether 有沒有真的在鏈上。使用指令 ")" target="_blank">eth.getBalance("

    ") 來查詢。

    > eth.getBalance(“c7873030c2532aafe540d9dfd02a08330ee06465”)9.04625697166532776746648320380374280103671755200316906558262375061821325312e+74> eth.getBalance(“6d650780d493056f679a30b2c65cfa5e07835ad6”)0>

    確定 node1 有 ether 但 node2 沒有,接著用 eth.sendTransaction 指令來把一些 ether 從 node1 轉到 node2 吧。

    現在 node1 的 console 把自己的 Account unlock

    > personal.unlockAccount("c7873030c2532aafe540d9dfd02a08330ee06465")

    Unlock account c7873030c2532aafe540d9dfd02a08330ee06465Passphrase:true>

    轉出 0.05 ether 到 6d650780d493056f679a30b2c65cfa5e07835ad6

    >eth.sendTransaction({from:"c7873030c2532aafe540d9dfd02a08330ee06465", to:"6d650780d493056f679a30b2c65cfa5e07835ad6", value: web3.toWei(0.05, "ether")})INFO [04-18|12:39:53] Submitted transaction fullhash=0xa7a9da239b8f96b9f6fe4007ee88773915f034be2365b2dab234fd8c0545aa37 recipient=0xc7873030c2532aafe540d9dfd02a08330ee06465"0xa7a9da239b8f96b9f6fe4007ee88773915f034be2365b2dab234fd8c0545aa37">

    如果你 singer1 的 miner 沒關掉的話,在幾秒後就會看到一個含有一筆交易的 block 產出

    再來看看 node1 和 node2 的 ether

    > " target="_blank">eth.getBalance("c7873030c2532aafe540d9dfd02a08330ee06465")9.04625697166532776746648320380374280103671755200316906558211535061821325312e+74> " target="_blank">eth.getBalance("6d650780d493056f679a30b2c65cfa5e07835ad6")50000000000000000>

    交易完成!

    加入一個新的信任節點

    在 Clique 共識機制中是使用 Clique 提供的 API 來做節點管理,現在只 demo 加入節點進入信任名單。

    signer2

    signer2 是一開始沒設定在創世塊中信任列表的節點,如果這時候讓它啟動 miner 會怎麼樣呢?會噴一個未授權的錯誤

    > miner.start()INFO [04-18|12:49:51] Starting mining operationnull> INFO [04-18|12:49:51] Commit new mining work number=46 txs=0 uncles=0 elapsed=284.189µsWARN [04-18|12:49:51] Block sealing failed err=unauthorized

    必須回到已經在授權名單內的節點將新的節點加入。

    signer1

    回到 signer1 的 console 輸入加入的指令

    > clique.propose("0x0fe2d8747d24156b342c9fa5c5e7138cf4047a8d", true)

    singer2

    接著回到 signer2 的 cosole

    開始打包交易了

    結語

    由於 geth 1.6 才發佈不久,關於 Clique 的相關文章還蠻少的。提供如何使用 geth 1.6 建立一個 Clique private chain 的簡單教學,其實大部分都是我自己在建置時的筆記,內容省略了很多關於 Clique 的一些特性和原理,有興趣的建議直接看 ethereum/EIPs#225。希望這篇可以幫助到使用 geth 但又想用用 PoA 共識機制的同伴們XD

  • go-ethereum 在 コバにゃんチャンネル Youtube 的最讚貼文

    2021-10-01 05:19:08

  • go-ethereum 在 大象中醫 Youtube 的精選貼文

    2021-10-01 05:10:45

  • go-ethereum 在 大象中醫 Youtube 的精選貼文

    2021-10-01 05:09:56

你可能也想看看

搜尋相關網站