為什麼我需要連接到一個節點?以太坊協議定義了一種方法,用於人們通過網絡與智能合約相互作用。www.emoneybtc.com為了獲得關於合約、賬戶余額和新交易狀態等最新的信息,協議需要與網絡上的節點進行連接。這些節點不斷地共享最新的數據。
Web3.Py是用於連接這些節點的Python庫。它不在內部運行它自己的節點。
如何選擇使用哪個節點?由於以太坊的特點,這在很大程度上由個人的偏好來決定,但它會對安全性和可用性有重大影響。此外,節點軟件正在快速發展,所以請需要對當前可選項進行研究。我們不推薦任何特定的節點,但列出一些流行的選項和一些基本細節。
最關鍵的決定之一是使用本地節點還是托管節點。來看看本地VS托管節點的簡單含義:
本地節點:本地節點由你自己啟動並控制。它的安全和你的環境安全性一樣,在於你自身。當你在機器上運行geth或parity時,你就是在運行本地節點。托管節點:托管節點由其他人控制。當連接到Infura時,連接到托管節點。
本地節點比托管節點有更好的安全性。惡意托管節點可以給你提供不正確的信息,用IP地址記錄你發送的交易,或者只是脫機運行。不正確的信息會引起各種各樣的問題,甚至包括資產流失。
另一方面,在本地節點上,你的機器正在逐個驗證網絡上的所有交易,並提供最新狀態。不幸的是,這意味著使用大量的磁盤空間,有時顯著的帶寬和計算。另外,下載完整的區塊鏈歷史記錄有很大的前期成本。
如果希望讓節點管理密鑰(流行的選項),則必須使用本地節點。注意,即使在自己的機器上運行一個節點,你仍然要信任節點軟件,並在該節點上創建的任何帳戶。
最流行的自運行節點選項是:
geth(go-ethereum) [1]parity [2]
你可以在ethdocs.org[3] 中找到一個更完整的節點軟件列表。
有些人認為,從零開始同步本地節點所需的時間太久,尤其是如果它們只是剛開始學習以太坊的話。解決這個問題的一種方法就是使用托管節點。
最流行的托管節點選項是Infura [4]。你可以連接它,就像它是一個本地節點,有幾個注意事項。它不能(也不應該)為你提供私鑰,這意味著一些常見的方法,如w3.eth.sendTransaction()不可直接使用。要向托管節點發送交易,請閱讀有關本地私鑰的工作。
一旦決定要選擇什麼節點選項,就需要選擇連接哪個網絡。通常,你在公有鏈和測試鏈之間進行選擇。
我可以用MetaMask作為節點嗎?MetaMask不是一個節點。它是一個與節點交互的接口。大致上,如果你把Web3.Py變成浏覽器擴展,MetaMask就和web3.py是差不多的。
默認情況下,MetaMask連接到一個Infura節點。也還可以設置MetaMask使用本地運行的節點。
如果你試圖使用已在MetaMask中創建的帳戶,請參閱如何使用Web3.Py中的MetaMask帳戶 [5]?
我應該連接哪個網絡?一旦你回答了我該如何選擇使用哪一個節點?你必須選擇連接哪個網絡。對於某些場景來說,這是很容易的:如果你有以太ether,你想消費它,或者你想與任何生產網絡上的智能合約交互,那麼你連接到以太坊公有鏈網絡上。
如果你想測試這些東西而不使用真正的以太ether,那麼你需要連接到測試鏈。有幾個測試鏈可供選擇。一個測試網絡Ropsten,它是最類似於生產網絡的。然而,當你想測試一個智能合約的時候,已經有垃圾郵件和攻擊發生,這是有破壞性的。
有一些替代網絡限制了垃圾郵件和攻擊的破壞,但是它們對節點軟件沒有完全標准化。geth運行自己的(Rinkeby),Parity運行自己(Kovan)。在這個Stackexchange Q&A [6] 中看到一個完整的比較。
所以我們簡略的講,選擇這樣的方式:
如果使用Parity,連接到Kovan如果使用Geth,連接到Rinkeby如果使用不同的節點,或測試挖掘,連接到Ropsten
他們的每一個網絡都有自己版本的ether。生產網絡即公有鏈以太ether必須購買,自然,測試鏈上的以太ether通常是免費的。看看測試網是如何獲得以太的[7]?
一旦確定了連接哪個網絡,並為該網絡設置節點,就需要決定如何連接它。在大多數節點中有一些選項。請參見選擇如何連接到節點[8]。
文中標注的原文鏈接如下:
[1] https://ethereum.github.io/go-ethereum/[2] https://www.parity.io/[3] http://ethdocs.org/en/latest/ethereum-clients/[4] https://web3py.readthedocs.io/en/stable/infura.io[5] https://web3py.readthedocs.io/en/stable/troubleshooting.html#use-metamask-accounts[6] https://ethereum.stackexchange.com/a/30072/1461[7] https://web3py.readthedocs.io/en/stable/troubleshooting.html#faucets[8] https://web3py.readthedocs.io/en/stable/providers.html#choosing-provider