$ sudo apt-get install openssl libssl-dev libudev-dev
以太坊客戶端
以太坊客戶端 (Ethereum client) 是一隻軟體應用程式,它依以太坊協定標準實現,並且在點對點網路 (peer-to-pper network) 上與其它以太坊客戶端溝通。不同的以太坊客戶端只要遵守這些協定及通訊,就可以互相操作。雖然不同的以太坊客戶端由不同的團隊或不同的程式語言來實現,而它們說的是相同的語言並且遵照相同規定;因此,在同一個以太坊網路下,這些客戶端可以彼此操作與互動。
以太坊是一個開放原始碼 (open source) 專案,原始碼可在開源授權(LGPL v3.0)許可下使用,可免費下載並用於任何目的。開放原始碼意味著不僅僅是免費使用。這也意味著以太坊由開源社群的志願者所開發,任何人都可以修改。越多人關注此專案,它的程式碼就越可以被信賴。
一個名為"黃皮書 (Yellow Paper)" 的正式標準定義了以太坊。(請見以太坊黃皮書,連結:https://ethereum.github.io/yellowpaper/paper.pdf)
這與比特幣相反,比特幣沒有任何正式的定義。比特幣的“規範”是比特幣核心的參考實現,以太坊的規範定義在一篇結合了英文和數學的(正式的)規範的論文中。 這個正式的規範,除了各種以太坊改進建議之外,還定義了以太坊客戶端的標準行為。隨著對以太坊的重大改變,黃皮書會定期更新。
作為以太坊明確的正式規範的結果,以太坊客戶端有許多獨立開發的,可互操作的軟體實現。以太坊在網路上運行的實現方式比任何其他區塊鏈都多。
以太坊網路
現今存在各式各樣基於乙太坊的網路,它們雖然大程度符合以太坊黃皮書 (Ethereum Yellow Paper) 的正式規範。但它們之間並不一定能互相操作。
這些基於以太坊的網路有:Ethereum、Ethereum Classic、Ella,Expanse、Ubiq、Musicoin 等等。雖然它們幾乎相容於乙太坊協議(Ethereum protocol),但這些網路通常各自有一些特別功能及屬性,而乙太坊用戶端 (Ethereum client) 軟體為了支持這些不同網路,需要為各別網路進行小修改才有辦法達成。因此,並非每個版本的乙太坊用戶端 (Ethereum client) 軟體總能夠支持所有基於以太坊的網路。
目前,乙太坊協議 (Ethereum protocol) 有六種實作,以不同的程式語言編寫完成:Go 語言編寫的 Geth、Rust 語言編寫的 parity、C++ 編寫的 cpp-ethereum、Python 編寫的 pyethereum 、Scala 編寫的 mantis 以及 Java 編寫的harmony。
在本節中,我們將看看兩個最常見的乙太坊客戶端,Geth 和 Parity。我們將學習如何使用它們的客戶端去啟動節點(node),並且探索它們的命令列(command-line options) 操作方式以及應用程式編程介面(API)。
我應該運行一個全節點 (full node) 嗎?
區塊鏈的健康、彈性以及抗審查性,需要依靠大量分佈於世界各地並且獨立運作的全節點 (full node) 。每個全節點會協助新節點取得區塊資料,這麼作不僅能幫助營運的新節點取得受到公信力及獨立性驗證過的合約及交易資料,也能讓新節點能自行完整的營運。
但是,運行完整的節點會導致硬體資源和帶寬的巨大成本。完整的節點必須下載超過80GB的數據(截至2018年4月;取決於客戶端)並將其儲存在本地硬碟上。隨著新的交易和區塊的添加,這種數據負擔每天都會迅速增加。完整節點的硬體要求 中有關於此主題的更多資訊。
在以太坊開發中,運行在活躍網路(主網)上的完整節點不是必需的。你可以使用testnet節點(它儲存小型公共測試區塊鏈的副本),或本地私有區塊鏈(參見 [ganache]),或服務提供商提供的基於雲的以太坊客戶端(參見 [infura]),做幾乎任何事。
你還可以選擇運行輕量級客戶端,該客戶端不會儲存區塊鏈的本地副本或驗證塊和交易。這些客戶端提供錢包的功能,並可以創建和廣播交易。
輕量級客戶端可用於連接到現有網路,例如你自己的完整節點,公共區塊鏈,公開或許可的(PoA)測試網或私有本地區塊鏈。在實踐中,你可能會使用輕量級客戶端,如MetaMask、Emerald Wallet、MyEtherWallet或MyCrypto作為在所有不同節點選項之間切換的便捷方式。
儘管存在一些差異,術語“輕量級客戶端”和“錢包”可以互換使用。通常,輕量級客戶端除了提供錢包的交易功能外,還提供API(如web3js API)。
不要將以太坊中輕量級錢包的概念與比特幣中簡化支付驗證(SPV)客戶端的概念混淆。SPV客戶驗證區塊頭並使用merkle證明來驗證區塊鏈中是否包含交易。以太坊輕量級客戶端通常不驗證區塊頭或交易。他們完全信任由第三方運營的完整客戶端,讓他們通過RPC訪問區塊鏈。
完整節點的優點和缺點
選擇運行一個完整的節點可以幫助各種基於以太坊的網路,但也會給你帶來一些溫和的或適中的成本。我們來看看一些優點和缺點。
優點:
-
支持基於以太坊的網路的彈性和抗審查。
-
權威性驗證所有交易。
-
可以與公共區塊鏈上的任何合約進行交互(無需中介)。
-
如有必要,可以離線查詢(只讀)區塊鏈狀態(帳戶、合約等)。
-
可以在不讓第三方知道你正在讀取的資訊的情況下查詢區塊鏈。
-
可以直接將自己的合約部署到公共區塊鏈中(無需中介)。
缺點:
-
需要大量且不斷增長的硬體和帶寬資源。
-
需要幾個小時或幾天才能完成第一次初始下載的同步。
-
必須維護,升級並保持聯機才能保持同步。
公共測試網的優點和缺點
無論你是否選擇運行完整節點,你可能都需要運行公共testnet節點。我們來看看使用公共測試網的一些優點和缺點。
優點:
-
測試網路節點需要同步並儲存少得多的數據,根據網路大小約為10GB(截至2018年4月)。
-
測試網路節點可以在幾個小時內完全同步。
-
部署合約或進行交易需要測試ether,它沒有價值,可以從幾個“faucet”免費獲得。
-
Testnets是與其他許多用戶和合約共享的區塊鏈,運行“live”。
缺點:
-
你不能在測試網上使用“真實”的錢,它以測試ether運轉。
-
因此,你無法針對真正對手進行安全性測試,因為沒有任何風險。
-
公共區塊鏈的某些方面無法在testnet上真實地測試。例如,交易費雖然是發送交易所必需的,但由於gas是免費的,因此不需要在測試網上考慮。測試網不會像公共網路那樣經歷網路擁塞。
本地實例(TestRPC)的優點和缺點
對於許多測試目的,最好的選擇是使用 testrpc 節點啟動一個實例私有區塊鏈。TestRPC創建一個本地私有區塊鏈,你可以與之交互,而無需任何其他參與者。它分享了公共測試網的許多優點和缺點,但也有一些差異。
優點:
-
不同步,硬碟上幾乎沒有數據。你自己挖掘第一塊。
-
無需測試ether,你可以將挖礦獎勵“獎勵”給自己,用於測試。
-
沒有其他用戶,只有你。
-
沒有其他合約,只有你啟動後部署的合約。
缺點:
-
沒有其他用戶意味著它不像公共區塊鏈一樣。沒有交易空間或交易排序的競爭。
-
除你之外沒有礦工意味著採礦更具可預測性,因此你無法測試公開區塊鏈上發生的一些情況。
-
沒有其他合約意味著你必須部署所有你想測試的內容,包括依賴項和合約庫。
-
你不能重新創建一些公共合約及其地址來測試一些場景(例如DAO合約)。
運行以太坊客戶端
如果你有時間和資源,你應該嘗試運行一個完整的節點,即使只是為了更多地瞭解這個過程。在接下來的幾節中,我們將下載,編譯和運行以太坊客戶Go-Ethereum(Geth)和Parity。這需要熟悉在作業系統上使用命令行界面。無論你選擇將它們作為完整節點,作為testnet節點還是作為本地私有區塊鏈的客戶端運行,都值得安裝這些客戶端。
完整節點的硬體要求
在我們開始之前,你應該確保你有一臺具有足夠資源的計算機來運行以太坊完整節點。你將需要至少80GB的硬碟空間來儲存以太坊區塊鏈的完整副本。如果你還想在以太坊測試網上運行完整節點,則至少需要額外的15GB。下載80GB的區塊鏈數據可能需要很長時間,因此建議你使用快速的Internet連接。
同步以太坊區塊鏈是非常密集的輸入輸出(I / O)。最好有一個固態硬碟(SSD)。如果你有機械硬碟驅動器(HDD),則至少需要8GB的RAM能用作緩存。否則,你可能會發現你的系統速度太慢,無法完全保持同步。
最低要求:
-
2核心CPU。
-
固態硬碟(SSD),至少80GB可用空間。
-
最小4GB記憶體,如果你使用HDD而不是SSD,則至少8GB。
-
8+ MBit/sec下載速度的互聯網。
這些是同步基於以太坊的區塊鏈的完整(但已修剪)副本的最低要求。
在編寫本文時(2018年4月),Parity程式碼庫的資源往往更輕,如果你使用有限的硬體運行,那麼使用Parity可能會看到最好的結果。
如果你想在合理的時間內同步並儲存我們在本書中討論的所有開發工具,庫,客戶端和區塊鏈,你將需要一臺功能更強大的計算機。
推薦規格:
-
4個以上核心的快速CPU。
-
16GB+ RAM。
-
至少有500GB可用空間的快速SSD。
-
25+ MBit/sec下載速度的互聯網。
很難預測區塊鏈的大小會增加多快,以及何時需要更多的硬碟空間,所以建議你在開始同步之前檢查區塊鏈的最新大小。
構建和運行客戶端(節點)的軟體要求
本節介紹Geth和Parity客戶端軟體。並假設你正在使用類Unix的命令行環境。這些範例顯示了在運行Bash shell(命令行執行環境)的Ubuntu Linux作業系統上輸入的輸出和命令。
通常,每個區塊鏈都有自己的Geth版本,而Parity支持多個以太坊區塊鏈(Ethereum、Ethereum Classic、Ellaism、Expanse、Musicoin)。
在我們開始之前,我們可能需要滿足一些先決條件。如果你從未在你當前使用的計算機上進行任何軟體開發,則可能需要安裝一些基本工具。對於以下範例,你需要安裝 git,源程式碼管理系統; Golang,Go程式語言和標準庫; 和Rust,一種系統程式語言。
可以按照以下說明安裝Git: https://git-scm.com/
可以按照以下說明安裝Go: https://golang.org/
Note
|
Geth的要求各不相同,但如果你堅持使用Go版本1.10或更高版本,你應該能夠編譯你想要的任何版本的Geth。當然,你應該總是參考你選擇的Geth的文件。 如果安裝在你的作業系統上的Golang版本或者從系統的軟體包管理器中獲得的版本遠遠早於1.10,請將其刪除並從golang.org安裝最新版本。 |
Rust可以按照以下說明進行安裝: https://www.rustup.rs/
Note
|
Parity需要Rust版本1.24或更高版本。 |
Parity還需要一些軟體庫,例如OpenSSL和libudev。要在Linux(Debian)兼容系統上安裝,請執行以下操作:
對於其他作業系統,請使用作業系統的軟體包管理器或遵循Wiki說明(https://github.com/paritytech/parity/wiki/Setup)來安裝所需的庫。
現在你已經安裝了 git、golang、rust 和必要的庫,讓我們開始工作吧!
Parity
Parity是完整節點以太坊客戶端和DApp瀏覽器的實現。Parity是由Rust從頭開始編寫的,系統程式語言是為了構建一個模塊化,安全和可擴展的以太坊客戶端。Parity由英國公司Parity Tech開發,並以GPLv3開源許可證發佈。
Note
|
披露:本書的作者之一Gavin Wood是Parity Tech的創始人,並撰寫了大部分Parity客戶端。Parity代表了約28%的以太坊客戶端。 |
要安裝Parity,你可以使用Rust包管理器cargo或從GitHub下載源程式碼。軟體包管理器也下載源程式碼,所以兩種選擇之間沒有太大區別。在下一節中,我們將向你展示如何自己下載和編譯Parity。
安裝 Parity
Parity Wiki提供了在不同環境和容器中構建Parity的說明:
我們將從源程式碼構建奇偶校驗。這假定你已經使用 rustup 安裝了Rust(見 構建和運行客戶端(節點)的軟體要求)。
首先,讓我們從GitHub獲取源程式碼:
$ git clone https://github.com/paritytech/parity
現在,我們轉到parity目錄並使用cargo構建可執行檔案:
$ cd parity $ cargo build
如果一切順利,你應該看到如下所示的內容:
$ cargo build Updating git repository `https://github.com/paritytech/js-precompiled.git` Downloading log v0.3.7 Downloading isatty v0.1.1 Downloading regex v0.2.1 [...] Compiling parity-ipfs-api v1.7.0 Compiling parity-rpc v1.7.0 Compiling parity-rpc-client v1.4.0 Compiling rpc-cli v1.4.0 (file:///home/aantonop/Dev/parity/rpc_cli) Finished dev [unoptimized + debuginfo] target(s) in 479.12 secs $
讓我們通過調用--version選項來運行parity以查看它是否已安裝:
$ parity --version Parity version Parity/v1.7.0-unstable-02edc95-20170623/x86_64-linux-gnu/rustc1.18.0 Copyright 2015, 2016, 2017 Parity Technologies (UK) Ltd License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. By Wood/Paronyan/Kotewicz/Drwięga/Volf Habermeier/Czaban/Greeff/Gotchac/Redmann $
現在已安裝了Parity,我們可以同步區塊鏈並開始使用一些基本的命令行選項。
Go-Ethereum (Geth)
Geth是Go語言實現的,它被積極開發並被視為以太坊客戶端的“官方”實現。通常情況下,每個基於以太坊的區塊鏈都會有自己的Geth實現。如果你正在運行Geth,那麼你需要確保使用以下某個儲存庫鏈接為區塊鏈獲取正確的版本。
版本庫鏈接
Ethereum Classic: https://github.com/ethereumproject/go-ethereum
Musicoin: https://github.com/Musicoin/go-musicoin
Note
|
你也可以跳過這些說明併為你選擇的平臺安裝預編譯的二進制檔案。預編譯的版本安裝起來更容易,可以在上面版本庫的“版本”部分找到。但是,你可以通過自己下載和編譯軟體來了解更多資訊。 |
複製儲存庫
我們的第一步是複製git倉庫,以獲得源程式碼的副本。
要創建此儲存庫的本地副本,請使用 git 命令,如下所示,在你的主目錄或用於開發的任何目錄下:
$ git clone <Repository Link>
在將儲存庫複製到本地系統時,你應該看到進度報告:
Cloning into 'go-ethereum'... remote: Counting objects: 62587, done. remote: Compressing objects: 100% (26/26), done. remote: Total 62587 (delta 10), reused 13 (delta 4), pack-reused 62557 Receiving objects: 100% (62587/62587), 84.51 MiB | 1.40 MiB/s, done. Resolving deltas: 100% (41554/41554), done. Checking connectivity... done.
現在我們有了Geth的本地副本,我們可以為我們的平臺編譯一個可執行檔案。
從源程式碼構建Geth
要構建Geth,切換到下載源程式碼的目錄並使用 make 命令:
$ cd go-ethereum $ make geth
如果一切順利,你將看到Go編譯器構建每個組件,直到它生成+ geth +可執行檔案:
build/env.sh go run build/ci.go install ./cmd/geth >>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth github.com/ethereum/go-ethereum/common/hexutil github.com/ethereum/go-ethereum/common/math github.com/ethereum/go-ethereum/crypto/sha3 github.com/ethereum/go-ethereum/rlp github.com/ethereum/go-ethereum/crypto/secp256k1 github.com/ethereum/go-ethereum/common [...] github.com/ethereum/go-ethereum/cmd/utils github.com/ethereum/go-ethereum/cmd/geth Done building. Run "build/bin/geth" to launch geth. $
讓我們在停止並更改它的配置之前運行 geth 以確保它工作:
$ ./build/bin/geth version Geth Version: 1.6.6-unstable Git Commit: 58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c Architecture: amd64 Protocol Versions: [63 62] Network Id: 1 Go Version: go1.8.3 Operating System: linux GOPATH=/usr/local/src/gocode/ GOROOT=/usr/local/go
你的 geth version 命令可能會稍微不同,但你應該看到類似上面的版本報告。
最後,我們可能希望將 geth 命令複製到作業系統的應用程式目錄(或命令行執行路徑上的目錄)。在Linux上,我們使用以下命令:
$ sudo cp ./build/bin/geth /usr/local/bin
先不要開始運行 geth,因為它會以“緩慢的方式”開始將區塊鏈同步,這將花費太長的時間(幾周)。基於以太坊的區塊鏈首次同步 解釋了以太坊區塊鏈的初始同步帶來的挑戰。
基於以太坊的區塊鏈首次同步
通常,在同步以太坊區塊鏈時,你的客戶端將下載並驗證自創世區塊以來的每個區塊和每個交易。
雖然可以通過這種方式完整同步區塊鏈,但同步會花費很長時間並且對計算資源要求較高(RAM更多,儲存速度更快)。
許多基於以太坊的區塊鏈在2016年底遭受了拒絕服務(DoS)攻擊。受此攻擊影響的區塊鏈在進行完全同步時傾向於緩慢同步。
例如,在以太坊中,新客戶端在到達區塊2,283,397之前會進展迅速。該塊在2016年9月18日開採,標誌著DoS攻擊的開始。從這個區塊到2,700,031區塊(2016年11月26日),交易驗證變得非常緩慢,記憶體密集並且I/O密集。這導致每塊的驗證時間超過1分鐘。以太坊使用硬分叉實施了一系列升級,以解決在拒絕服務中被利用的底層漏洞。這些升級還通過刪除由垃圾郵件交易創建的大約2000萬個空帳戶來清理區塊鏈。<<[1]>>
如果你正在使用完整驗證進行同步,則客戶端會放慢速度並可能需要幾天或更長時間才能驗證受此DoS攻擊影響的任何塊。
大多數以太坊客戶端包括一個選項,可以執行“快速”同步,跳過交易的完整驗證,同步到區塊鏈的頂端後,再恢復完整驗證。
對於Geth,啟用快速同步的選項通常稱為 --fast。你可能需要參考你選擇的以太坊鏈的具體說明。
對於Parity,較舊版本(<1.6),該選項為 --warp,較新版本(>=1.6)上預設啟用(無需設置配置選項)。
Note
|
Geth和Parity只能在空的區塊資料庫啟動時進行快速同步。如果你已經開始沒有“快速”模式的同步,則Geth和Parity無法切換。刪除區塊鏈數據目錄並從頭開始“快速”同步比繼續完整驗證同步更快。刪除區塊鏈數據時請小心不要刪除任何錢包! |
JSON-RPC接口
以太坊客戶端提供應用程式編程接口(API)和一組遠程過程調用(RPC)命令,這些命令被編碼為JavaScript物件表示法(JSON)。這被稱為JSON-RPC API。本質上,JSON-RPC API是一個接口,允許我們將使用以太坊客戶端的程式作為gateway編寫到以太坊網路和區塊鏈中。
通常,RPC接口作為連接埠8545上的HTTP服務提供。出於安全原因,預設情況下,它僅受限於從本地主機(你自己的計算機的IP地址為127.0.0.1)接受連接。
要訪問JSON-RPC API,可以使用專門的庫,用你選擇的程式語言編寫,它提供與每個可用的RPC命令相對應的“樁(stub)”函數調用。或者,你可以手動構建HTTP請求併發送/接收JSON編碼的請求。你甚至可以使用通用命令行HTTP客戶端(如 curl )來調用RPC接口。讓我們嘗試一下(確保你已經配置並運行了Geth):
$ curl -X POST -H "Content-Type: application/json" --data \ '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \ http://localhost:8545 {"jsonrpc":"2.0","id":1, "result":"Geth/v1.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}
在這個例子中,我們使用 curl 建立一個HTTP連接來訪問 http://localhost:8545。我們已經運行了 geth,它將JSON-RPC API作為連接埠8545上的HTTP服務提供。我們指示 curl 使用HTTP POST 命令並將內容標識為 Content-Type: application/json。最後,我們傳遞一個JSON編碼的請求作為我們HTTP請求的data部分。我們的大多數命令行只是設置 curl 來正確地建立HTTP連接。有趣的部分是我們發佈的實際的JSON-RPC命令:
{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":4192}
JSON-RPC請求根據JSON-RPC 2.0規範格式化,你可以在這裡看到: http://www.jsonrpc.org/specification
每個請求包含4個元素:
- jsonrpc
-
JSON-RPC協議的版本。這必須是“2.0”。
- method
-
要調用的方法的名稱。
- params
-
一個結構化值,用於保存在調用方法期間要使用的參數值。該元素可以省略。
- id
-
由客戶端建立的識別碼,必須包含字串,數字或NULL值(如果包含)。如果包含,伺服器必須在Response物件中使用相同的值進行回覆。該元素用於關聯兩個物件之間的上下文。
Tip
|
id 參數主要用於在單個JSON-RPC調用中進行多個請求的情況,這種做法稱為批處理。批處理用於避免每個請求的新HTTP和TCP連接的開銷。例如,在以太坊環境中,如果我們想要在一個HTTP連接中查詢數千個交易,我們將使用批處理。批處理時,為每個請求設置不同的 id,然後將其與來自JSON-RPC伺服器的每個響應中的id進行匹配。實現這個最簡單的方法是維護一個計數器併為每個請求增加值。 |
The response we receive is:
{"jsonrpc":"2.0","id":4192, "result":"Geth/v1.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}
這告訴我們JSON-RPC API由Geth客戶端版本1.8.0提供服務。
讓我們嘗試一些更有趣的事情。在下一個例子中,我們要求JSON-RPC API獲取當前的gas價格,以wei為單位:
$ curl -X POST -H "Content-Type: application/json" --data \ '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \ http://localhost:8545 {"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}
響應 0x430e23400 告訴我們,當前的gas價格是1.8wei(gigawei或十億wei)。
Parity的Geth兼容模式
有一個特殊的“Geth兼容模式”,它提供了一個與geth相同的JSON-RPC API。要在Geth兼容模式下運行奇偶校驗,請使用--geth開關:
$ parity --geth
輕量級以太坊客戶
輕量級客戶端提供了完整客戶端的一部分功能。他們不儲存完整的以太坊區塊鏈,因此它們的啟動速度更快,所需的數據儲存量也更少。
輕量級客戶端提供以下一項或多項功能:
-
管理錢包中的私鑰和以太坊地址。
-
創建、簽署和廣播交易。
-
使用數據與智能合約進行交互。
-
瀏覽並與DApps交互。
-
提供到區塊瀏覽器等外部服務的鏈接。
-
轉換ether單位並從外部來源查詢匯率。
-
將web3實例作為JavaScript物件注入到Web瀏覽器中。
-
使用另一個客戶端提供/注入瀏覽器的web3實例。
-
在本地或遠程以太網節點上訪問RPC服務。
一些輕量級客戶端(例如行動(智慧型手機)錢包)僅提供基本的錢包功能。其他輕量級客戶端是完全開發的DApp瀏覽器。輕量級客戶端通常提供完整節點以太坊客戶端的某些功能,而無需同步以太坊區塊鏈的本地副本。
我們來看看一些最受歡迎的輕量級客戶端及其提供的功能。
行動(智慧型手機)錢包
所有的行動錢包都是輕量級的客戶端,因為智慧型手機沒有足夠的資源來運行完整的以太坊客戶端。
流行的行動錢包包括Jaxx,Status和Trust Wallet。我們列舉這些作為流行手機錢包的例子(不是對這些錢包的安全或功能的認可)。
- Jaxx
-
基於BIP39助記種子的多幣種手機錢包,支持比特幣、萊特幣、以太坊、以太坊經典、ZCash、各種ERC20代幣和許多其他貨幣。Jaxx可在Android、iOS上作為瀏覽器插件錢包使用,桌面錢包可用於各種作業系統。可以在https://jaxx.io找到它。
- Status
-
行動錢包和DApp瀏覽器,支持各種代幣和流行的DApps。適用於iOS和Android智慧型手機。可以在https://status.im找到它。
- Trust Wallet
-
支持ERC20和ERC223代幣的行動以太坊,以太坊經典錢包。Trust Wallet適用於iOS和Android智慧型手機。可以在https://trustwalletapp.com/找到它。
- Cipher Browser
-
全功能的啟用以太坊的行動DApp瀏覽器和錢包。允許與以太坊應用程式和代幣集成。可以在https://www.cipherbrowser.com找到它
瀏覽器錢包
各種錢包和DApp瀏覽器可用作瀏覽器的插件或擴展,例如Chrome和Firefox:運行在瀏覽器內的輕量級客戶端。
一些比較流行的是MetaMask、Jaxx和MyEtherWallet/MyCrypto。
MetaMask
MetaMask 在 [intro] 中介紹,它是一個多功能的基於瀏覽器的錢包,RPC客戶端和基本合約瀏覽器。它可用於Chrome、Firefox、Opera和Brave Browser。在以下位置找到MetaMask:
乍看,MetaMask是一款基於瀏覽器的錢包。但是,與其他瀏覽器錢包不同,MetaMask將web3實例注入瀏覽器,作為連接到各種以太坊區塊鏈(例如mainnet、Ropsten testnet、Kovan testnet、本地RPC節點等)的RPC客戶端。能夠注入web3實例並充當外部RPC服務的入口,使MetaMask成為開發人員和用戶非常強大的工具。例如,它可以與MyEtherWallet或MyCrypto相結合,充當這些工具的web3提供者和RPC網關。
MyEtherWallet (MEW)
MyEtherWallet是一款基於瀏覽器的JavaScript輕量級客戶端,提供:
-
在JavaScript中運行的軟體錢包。
-
通往諸如Trezor和Ledger等流行硬體錢包的橋樑。
-
一個web3界面,可以連接到另一個客戶端注入的web3實例(例如MetaMask)。
-
可以連接到以太坊完整客戶端的RPC客戶端。
-
給定合約地址和應用程式二進制接口(ABI),可以與智能合約交互的基本接口。
MyEtherWallet對於測試和作為硬體錢包界面非常有用。它不應該被用作主要的軟體錢包,因為它在瀏覽器環境中會受到威脅,並且不是一個安全的密鑰儲存系統。
訪問MyEtherWallet和其他基於瀏覽器的JavaScript錢包時,你必須非常小心,因為它們經常是釣魚攻擊的目標。始終使用書籤而不是搜索引擎或鏈接訪問正確的網址。MyEtherWallet可以在以下網址找到:
MyCrypto
就在本書第一版出版之前,MyEtherWallet項目分為由兩個獨立開發團隊主導的競爭實現:一個“分叉”,就像在開源開發中所稱的那樣。這兩個項目被稱為MyEtherWallet(原始品牌)和MyCrypto。在拆分時,MyCrypto提供與MyEtherWallet相同的功能。由於兩個開發團隊採取不同的目標和優先事項,這兩個項目可能會出現分歧。
與MyEtherWallet一樣,在瀏覽器中訪問MyCrypto時必須非常小心。始終使用書籤,或者非常小心地輸入URL(然後將其書籤以備將來使用)。
MyCrypto可以在以下網址找到:
Mist
Mist是以太坊基金會創建的第一個啟用以太坊的瀏覽器。它還包含一個基於瀏覽器的錢包,這是有史以來第一個實現ERC20代幣標準的(Fabian Vogelsteller,ERC20的作者也是Mist的主要開發人員)。Mist也是第一個引入camelCase校驗和的軟體包(EIP-155,參見 [eip-155] )。Mist運行一個完整的節點,並提供完整的DApp瀏覽器,支持基於Swarm的儲存和ENS地址。可以在以下網址找到:
References
-
[1] EIP-161: http://eips.ethereum.org/EIPS/eip-161