爲何我須要鏈接到一個節點?html
以太坊協議定義了一種方法,用於人們經過網絡與智能合約相互做用。爲了得到關於合約、帳戶餘額和新交易狀態等最新的信息,協議須要與網絡上的節點進行鏈接。這些節點不斷地共享最新的數據。python
Web3.Py是用於鏈接這些節點的Python庫。它不在內部運行它本身的節點。git
因爲以太坊的特色,這在很大程度上由我的的偏好來決定,但它會對安全性和可用性有重大影響。此外,節點軟件正在快速發展,因此請須要對當前可選項進行研究。咱們不推薦任何特定的節點,但列出一些流行的選項和一些基本細節。github
最關鍵的決定之一是使用本地節點仍是託管節點。來看看本地VS託管節點的簡單含義:web
geth
或parity
時,你就是在運行本地節點。Infura
時,鏈接到託管節點。本地節點比託管節點有更好的安全性。惡意託管節點能夠給你提供不正確的信息,用IP地址記錄你發送的交易,或者只是脫機運行。不正確的信息會引發各類各樣的問題,甚至包括資產流失。瀏覽器
另外一方面,在本地節點上,你的機器正在逐個驗證網絡上的全部交易,並提供最新狀態。不幸的是,這意味着使用大量的磁盤空間,有時顯著的帶寬和計算。另外,下載完整的區塊鏈歷史記錄有很大的前期成本。安全
若是但願讓節點管理密鑰(流行的選項),則必須使用本地節點。注意,即便在本身的機器上運行一個節點,你仍然要信任節點軟件,並在該節點上建立的任何賬戶。網絡
最流行的自運行節點選項是:ide
你能夠在ethdocs.org中找到一個更完整的節點軟件列表。學習
有些人認爲,從零開始同步本地節點所需的時間過久,尤爲是若是它們只是剛開始學習以太坊的話。解決這個問題的一種方法就是使用託管節點。
最流行的託管節點選項是Infura。你能夠鏈接它,就像它是一個本地節點,有幾個注意事項。它不能(也不該該)爲你提供私鑰,這意味着一些常見的方法,如w3.eth.sendTransaction()
不可直接使用。要向託管節點發送交易,請閱讀有關本地私鑰的工做。
一旦決定要選擇什麼節點選項,就須要選擇鏈接哪一個網絡。一般,你在公有鏈和測試鏈之間進行選擇。
MetaMask
不是一個節點。它是一個與節點交互的接口。大體上,若是你把Web3.Py變成瀏覽器擴展,MetaMask就和web3.py是差很少的。
默認狀況下,MetaMask鏈接到一個Infura節點。也還能夠設置MetaMask使用本地運行的節點。
若是你試圖使用已在MetaMask中建立的賬戶,請參閱如何使用Web3.Py中的MetaMask賬戶?
一旦你回答了我該如何選擇使用哪個節點?你必須選擇鏈接哪一個網絡。對於某些場景來講,這是很容易的:若是你有以太ether,你想消費它,或者你想與任何生產網絡上的智能合約交互,那麼你鏈接到以太坊公有鏈網絡上。
若是你想測試這些東西而不使用真正的以太ether,那麼你須要鏈接到測試鏈。有幾個測試鏈可供選擇。一個測試網絡Ropsten
,它是最相似於生產網絡的。然而,當你想測試一個智能合約的時候,已經有垃圾郵件和攻擊發生,這是有破壞性的。
有一些替代網絡限制了垃圾郵件和攻擊的破壞,可是它們對節點軟件沒有徹底標準化。geth運行本身的(Rinkeby),Parity運行本身(Kovan)。在這個Stackexchange Q&A.中看到一個完整的比較。
因此咱們簡略的講,選擇這樣的方式:
Parity
,鏈接到Kovan
Geth
,鏈接到Rinkeby
Ropsten
他們的每個網絡都有本身版本的ether。生產網絡即公有鏈以太ether必須購買,天然,測試鏈上的以太ether一般是免費的。看看測試網是如何得到以太?
一旦肯定了鏈接哪一個網絡,併爲該網絡設置節點,就須要決定如何鏈接它。在大多數節點中有一些選項。請參見選擇如何鏈接到節點。
分享咱們的python以太坊教程,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。