若是你是以太坊區塊鏈的新手,那麼你可能會不知所措(至少我是),並試圖瞭解以太坊生態系統中的全部工具和技術。所以,我決定在開始學習以太坊時簡要描述下你常常遇到的各類組件。但願這將有助於你全面瞭解以太坊生態系統以及全部部分如何組合在一塊兒。javascript
以太坊是一個智能合約區塊鏈,你能夠在其上構建去中心化的應用程序(稱爲智能合約)。若是你是技術專家,本白皮書值得一讀:https://github.com/ethereum/wiki/wiki/White-Paper。php
若是你以前已經構建了Web應用程序,我寫了一篇文章,比較以太坊區塊鏈和Web應用程序架構,這可能有助於在更高層次上理解以太坊。java
Geth是以太坊基金會提供的官方客戶端軟件。它是用Go編程語言編寫的。該軟件包含一些值得理解的組件:node
當你啓動此客戶端守護程序時,它將鏈接到網絡中的其餘客戶端(也稱爲節點)並下載區塊鏈的副本。它將不斷與其餘節點通訊,以使其區塊鏈的副本保持最新。它還可以挖掘塊並向區塊鏈添加交易,驗證塊中的交易並執行交易。它還經過公開能夠經過RPC與之交互的API充當服務器。python
這是一個命令行工具,可以讓你鏈接到正在運行的節點,並執行各類操做,如建立和管理賬戶,查詢區塊鏈,簽署並向區塊鏈提交交易等。android
這是用於與節點通訊的桌面應用程序。你使用geth控制檯執行的任何操做均可以經過此圖形用戶界面完成。git
Parity是以太坊協議的另外一個很好的實現,用Rust編程語言編寫。它是一個非官方的客戶端,由一家名爲Parity Inc.的公司維護。任何人均可以實現客戶端軟件並加入以太坊網絡。你能夠按照本黃皮書中的規範來實施你本身的客戶端!程序員
就像你有geth,mist瀏覽器等與ethereum節點進行通訊同樣,還有一個名爲Web3.js的javascript庫,能夠用來與節點進行交互。因爲它是一個javascript庫,你可使用它來構建基於Web的dapps。github
Solidity是用於編寫智能合約以便在以太坊區塊鏈上運行的最流行的編程語言。它是一種高級語言,在編譯時會轉換爲EVM(以太坊虛擬機)字節代碼。這與Java世界很是類似,其中有Scora,Groovy,Clojure,JRuby等JVM語言。編譯時全部這些都生成在JVM(Java虛擬機)中運行的字節代碼。你能夠建立像Solidity這樣的語言,只要你遵循規範而且你的語言編譯爲有效的EVM字節代碼就行!web
還有一個很是好的基於瀏覽器的IDE,你能夠在這裏編寫合約,編譯和部署到區塊鏈:http://remix.ethereum.org/
就像你有Web應用程序開發的框架,如Ruby on Rails,Python/Django等,Truffle和Embark是用於開發dapps的兩個最流行的框架。它們消除了在區塊鏈上編譯和部署合同的許多複雜性。
若是你是Ethereum dapp開發的新手,我寫了一系列的指導教程,能夠在1,2和3開始。
若是你在以太坊社區閒逛超過一週,你將不可避免地遇到Metamask。在撰寫本文時,它是一個用於與以太坊節點交互的chrome插件。對於世界上每一個人來講,運行節點與區塊鏈進行交互是不現實的。所以,Metamask的人員擁有許多節點,所以你沒必要這樣作。你所要作的就是安裝Metamask,它會自動鏈接到他們的節點。
以太坊命名系統是以太坊世界的DNS。就像你將IP地址映射到人類可讀的名稱同樣,你能夠將任何以太坊合約或錢包地址映射到人類可讀的名稱。
例如:146.115.22.177→google.com
。你能夠輸入解析爲該IP地址的google.com,而不是在瀏覽器中鍵入IP地址。
例如:0x80C013d980aB049471c88E1603b8b4a60E03295C
是個人錢包地址。若是你有心情給我發送一些以太幣,你沒必要記住這個地址。一旦ENS啓動,我可能會將它映射到mvmurthy.eth
,你能夠用它來輕鬆地給我錢:)。
區塊鏈能夠存儲少許數據。若是你想存儲患者記錄,銷售合同或某些須要公開時間戳的大型文件,該怎麼辦?在區塊鏈中存儲blob既昂貴又沒法擴展。Swarm用於解決這個問題。Swarm是一種分散的內容存儲和分發服務。你能夠將其視爲CDN,而不是在一家公司的服務器上託管的整個CDN,它經過互聯網分佈在計算機上。就像運行以太坊節點同樣,你運行一個swarm節點來鏈接到羣網絡。
當你將以太坊合約部署到區塊鏈時,你將得到ABI的部署地址和JSON接口(合同接口相似於API)。當你但願某人使用你的合約時,你必須向他們提供已部署的地址和ABI。未來,ABI將存儲在Swarm上,因此任何人均可以經過查看以太坊地址來查找ABI。
IPFS(星際文件系統)在概念上與Swarm徹底類似。它是一個分散的存儲系統。它與以太坊直接無關,但能夠與以太坊集成。
你能夠在這裏閱讀Swarm和IPFS之間的區別:https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM
你沒有聽到不少關於Whisper的信息,但在以太坊生態系統中倒是一項有趣的技術。它是Dapps彼此交互的通訊協議。你能夠在這裏閱讀更多相關信息:https://github.com/ethereum/wiki/wiki/Whisper
下面是嘗試將全部部分組合在一塊兒:
======================================================================
分享一些以太坊、EOS、比特幣等區塊鏈相關的交互式在線編程實戰教程:
- java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和交易等內容。
- 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
- C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
- EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、帳戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
- java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
- php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
- tendermint區塊鏈開發詳解,本課程適合但願使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。
匯智網原創翻譯,轉載請標明出處。這裏是原文以太坊生態系統中的工具和技術