什么是testnet?
測試網(wǎng)絡(luò)(簡稱testnet)用于模擬以太坊主網(wǎng)的行為。有一些公開的測試網(wǎng)絡(luò)只是替代的以太坊區(qū)塊鏈。這些網(wǎng)絡(luò)上的貨幣毫無價值,但它們?nèi)匀挥杏?,因為可以在不破壞以太坊主網(wǎng)或使用真錢的情況下測試合約和協(xié)議變更的功能。當以太坊協(xié)議的任何重大變化即將被包含在主網(wǎng)絡(luò)(簡稱主網(wǎng)絡(luò))中時,其測試主要在這些測試網(wǎng)絡(luò)上完成。在將應(yīng)用程序部署到主網(wǎng)絡(luò)之前,大量開發(fā)人員還使用這些測試網(wǎng)絡(luò)來測試應(yīng)用程序。
使用Testnets
您可以連接到公共測試網(wǎng)絡(luò),也可以生成自己的專用測試網(wǎng)絡(luò)。首先,讓我們使用公共測試網(wǎng)絡(luò)來更容易地進行設(shè)置。要使用公共testnet,需要一些testnet以及與該網(wǎng)絡(luò)的連接。對于testnet ether,使用“水龍頭”,緩慢分配測試ether,向任何要求的人“分配”少量。要連接到testnet,您需要一個以太坊客戶端,可以是完整的客戶端(如geth),也可以是通向完整客戶端的網(wǎng)關(guān),例如MetaMask。
獲得測試以太
由于測試網(wǎng)絡(luò)不能用真錢操作,因此礦工保護測試網(wǎng)絡(luò)的動機很小。因此,測試網(wǎng)必須以不同方式保護自己免受濫用和攻擊。結(jié)果,為這些測試網(wǎng)絡(luò)創(chuàng)建了水龍頭,以便以受控的方式將免費的測試ether分配給開發(fā)人員(大多數(shù)水龍頭每隔幾秒左右分發(fā)一次ether)。這種受控的以太分配可防止用戶濫用鏈,因為提供有限的以太供應(yīng)會阻止用戶過多地寫入鏈或執(zhí)行過多的交易。此外,一些測試網(wǎng)已經(jīng)實現(xiàn)了身份驗證證明方案,其中使用水龍頭需要具有適當憑據(jù)的社交媒體站點的身份驗證。
連接到Testnets
Metamask
Metamask完全支持Ropsten、Kovan和Rinkeby測試網(wǎng)絡(luò),但也可以連接到其他測試網(wǎng)和本地網(wǎng)絡(luò)。在Metamask中,只需單擊“主網(wǎng)絡(luò)”下拉菜單即可切換網(wǎng)絡(luò)。MetaMask還提供“購買”測試以太的選項,它可以引導(dǎo)您進入可以請求免費測試以太的水龍頭。如果使用Ropsten測試網(wǎng),可以從Ropsten測試水龍頭服務(wù)獲得以太。您可以從此頁面訪問此水龍頭。它需要Metamask擴展才能工作。https://faucet.metamask.io/
Infura
當MetaMask連接到測試網(wǎng)絡(luò)時,它使用Infura服務(wù)提供程序進行JSON-RPC接口訪問。Infura產(chǎn)生的目的是為ConsenSys內(nèi)部項目提供穩(wěn)定可靠的RPC訪問。除了JSON-RPC API之外,Infura還提供REST(代表性狀態(tài)轉(zhuǎn)移)API,IPFS(行星際文件系統(tǒng),即分布式存儲)API和Websockets(即流式)API。
Infura為以太坊主網(wǎng)、Ropsten、Kovan、Rinkeby和INFURAnet(Infura的自定義測試網(wǎng))提供網(wǎng)關(guān)API。
要通過MetaMask使用Infura進行初級的操作,您不需要帳戶。要直接使用API??,您需要注冊一個帳戶并使用Infura提供的API密鑰。
有關(guān)Infura的更多信息,請訪問:
混合集成開發(fā)環(huán)境(IDE)
Remix IDE可用于在主網(wǎng)和測試網(wǎng)上部署和交互智能合約,包括Ropsten、Rinkeby和Kovan(使用Infura地址和API密鑰的Web3提供程序或通過Injected Web3使用MetaMask中選擇的網(wǎng)絡(luò))和Ganache( Web3 Provider Endpoint http://localhost:8545)
https://github.com/ethereum/remix/blob/master/docs/run_tab.rst https://medium.com/swlh/deploy-smart-contracts-on-ropsten-testnet-through-ethereum-remix-233cd1494b4b
Geth
Geth本身支持Ropsten和Rinkeby網(wǎng)絡(luò)。要連接到Ropsten網(wǎng)絡(luò),請使用命令行參數(shù):
geth --testnet
這將開始同步Ropsten區(qū)塊鏈。將在主Ethereum數(shù)據(jù)目錄中創(chuàng)建名為testnet的新目錄。密鑰庫目錄將在testnet內(nèi)創(chuàng)建,并將存儲您的testnet帳戶的私鑰。在寫這篇文章時,Ropsten區(qū)塊鏈明顯小于主要的以太坊區(qū)塊鏈:大約14GB的數(shù)據(jù)。由于testnet需要的資源較少,因此首先在testnet上設(shè)置和測試代碼更為簡單。
與testnet交互類似于mainnet。您可以通過運行以下命令啟動Geth testnet:
geth --testnet console
這使得可以執(zhí)行諸如打開新帳戶、檢查余額、檢查其他以太坊地址的余額等操作。當在Geth控制臺外部運行時,可以執(zhí)行與在mainnet上類似的操作,只需將--testnet參數(shù)添加到命令行指令即可。以列出所有可用的testnet帳戶及其地址為例,運行:
geth --testnet account list
| Tip | 雖然要小得多,但測試網(wǎng)仍需要一段時間才能完全同步。 |
|---|
您可以通過在geth interactive console中運行以下命令來檢查geth是否已完成同步testnet:
eth.getBlock("latest").number
一旦您的testnet節(jié)點完全同步,這應(yīng)該返回0以外的數(shù)字。您可以將數(shù)字與已知testnet塊瀏覽器中的最新塊進行比較,例如https://ropsten.etherscan.io/
同樣,要連接到Rinkeby測試網(wǎng)絡(luò),請使用命令行參數(shù):
geth --rinkeby
Parity
Parity客戶端支持Ropsten和Kovan測試網(wǎng)絡(luò)。您可以使用chain參數(shù)選擇要連接的網(wǎng)絡(luò)。例如,要同步Ropsten測試網(wǎng)絡(luò):
parity --chain ropsten
同樣,要同步Kovan測試網(wǎng)絡(luò),請使用:
parity --chain kovan
以太坊測試網(wǎng)絡(luò)深入
在這個階段你可能會想:“我理解為什么我可能會使用測試網(wǎng)絡(luò)。但為什么會有這么多呢?”
https://www.ethnews.com/ropsten-to-kovan-to-rinkeby-ethereums-testnet-troubles
工作證明(采礦)與權(quán)威證明(聯(lián)合簽名)
https://github.com/ethereum/guide/blob/master/poa.md
Morden(The Original Testnet)
https://blog.ethereum.org/2016/11/20/from-morden-to-ropsten/
Ropsten
如果你想在Ropsten網(wǎng)絡(luò)上開始測試合約,你可以從幾個水龍頭中找到Ropsten ethers。如果水龍頭不起作用,請嘗試不同的水龍頭。
http://faucet.ropsten.be:3001/
這個水龍頭提供了應(yīng)該接收測試以太的地址隊列的可能性。bitfwd Ropsten Faucet
Ropsten龍頭可在https://faucet.bitfwd.xyz/獲得。Kyber Network Ropsten Faucet
另一款Ropsten水龍頭可在https://faucet.kyber.network/上找到。MetaMask Ropsten Faucet
https://faucet.metamask.io/Ropsten Testnet 礦池
http://pool.ropsten.ethereum.org/Etherscan Ropsten Pool https://ropsten.etherscan.io/
Rinkeby
Rinkeby水龍頭位于https://faucet.rinkeby.io/。要請求測試以太,有必要在Twitter、Google Plus或Facebook上發(fā)布公開信息。 https://www.rinkeby.io/ https://rinkeby.etherscan.io/
Kovan
Kovan testnet支持請求測試以太的各種方法。更多信息可以在位于https://github.com/kovan-testnet/faucet/blob/master/README.md的Kovan testnet GitHub倉庫中找到。
- https://medium.com/@Digix/announcing-kovan-a-stable-ethereum-public-testnet-10ac7cb6c85f
- https://kovan-testnet.github.io/website/
- https://kovan.etherscan.io/
以太經(jīng)典測試網(wǎng)絡(luò)
Morden
以太坊經(jīng)典目前運行Morden testnet的一個變體,該變體的特性與Ethereum Classic的live network保持一致。你可以通過連接的gastracker RPC或通過提供一個flag,連接到geth或parity。
- Faucet: http://testnet.epool.io/
- Gastracker RPC: https://web3.gastracker.io/morden
- Block Explorer: http://mordenexplorer.ethertrack.io/home
- Geth flag: geth --chain=morden
- Parity flag: parity --chain=classic-testnet
以太坊測試網(wǎng)絡(luò)的歷史
Olympic、Morden到Ropsten、Kovan、Rinkeby
Olympic testnet(網(wǎng)絡(luò)ID:0)是Frontier的首個公共測試網(wǎng)(簡稱以太坊0.9)。它于2015年初推出,并于2015年中期被Morden取代時棄用。
Ethereum的Morden testnet(網(wǎng)絡(luò)ID:2)與Frontier一起推出,從2015年7月開始運行,直到2016年11月被棄用。雖然任何使用以太坊的人都可以創(chuàng)建一個測試網(wǎng),但Morden是第一個“官方”公共測試網(wǎng)并取代了Olympic測試網(wǎng)。由于來自臃腫的區(qū)塊鏈的長同步時間以及Geth和Parity客戶之間的共識問題,testnet重新啟動并命名為Ropsten。
Ropsten(網(wǎng)絡(luò)ID:3)是Homestead的公共跨客戶端測試網(wǎng)絡(luò),于2016年底推出,并作為公共測試網(wǎng)絡(luò)順利運行至2017年2月底。根據(jù)以太坊的核心開發(fā)人員PéterSzilágyi的說法, 2月是“惡意行為者決定濫用低PoW并逐漸將封鎖gas限制擴大到90億(從正常的470萬),此時發(fā)送巨大的交易使整個網(wǎng)絡(luò)陷入癱瘓”。Ropsten于2017年3月恢復(fù).https://github.com/ethereum/ropsten
Kovan(網(wǎng)絡(luò)ID:42)是Homestead的公共Parity測試網(wǎng)絡(luò),由Parity的權(quán)威證明(PoA)一致性算法提供支持。testnet不受垃圾郵件攻擊,因為以太供應(yīng)由受信任方控制。那些受信任的組織是積極開發(fā)以太坊的公司。雖然看起來這應(yīng)該是以太坊的測試網(wǎng)絡(luò)問題的解決方案,但在以太坊社區(qū)中似乎存在關(guān)于Kovan測試網(wǎng)絡(luò)的共識問題。https://github.com/kovan-testnet/proposal
Rinkeby(網(wǎng)絡(luò)ID:4)是Homestead的公共Geth測試網(wǎng)絡(luò),由Ethereum團隊于2017年4月啟動并使用PoA共識協(xié)議。以Stockholm的地鐵站命名,它幾乎不受垃圾郵件攻擊(因為以太網(wǎng)供應(yīng)由受信任方控制)。請參閱EIP 225:https://github.com/ethereum/EIPs/issues/225
工作證明(采礦)與權(quán)威證明(聯(lián)合簽名)
https://github.com/ethereum/guide/blob/master/poa.md
TODO:寫出兩種機制的利弊
工作證明是一種協(xié)議,其中必須執(zhí)行挖掘(昂貴的計算機計算)以在區(qū)塊鏈(分布式分類帳本)上創(chuàng)建新區(qū)塊(無信任交易)。缺點:能源效率低下。集中的哈希能源與集中的采礦場,而不是真正的去中心化。挖掘新區(qū)塊所需的大量計算能力及其對環(huán)境的影響。
權(quán)威證明是一種協(xié)議,僅將授權(quán)負載分配給授權(quán)和可信賴的簽名者,并且這些簽名者可以自行決定在任何時間以怎樣的創(chuàng)建頻率來創(chuàng)建新區(qū)塊。https://github.com/ethereum/EIPs/issues/225 優(yōu)點:通過算法選擇擁有最多身份的區(qū)塊鏈參與者,以獲得驗證區(qū)塊以交付交易的權(quán)利。
https://www.deepdotweb.com/2017/05/21/generalized-proof-activity-poa-forking-free-hybrid-consensus/
運行本地測試網(wǎng)絡(luò)
Ganache:以太坊開發(fā)的個人區(qū)塊鏈
您可以使用Ganache部署合約,開發(fā)應(yīng)用程序并運行測試。它可用作Windows、Mac和Linux的桌面應(yīng)用程序。
網(wǎng)站:http://truffleframework.com/ganache
Ganache CLI:Ganache作為命令行工具
該工具以前稱為“ethereumJS TestRPC”。
https://github.com/trufflesuite/ganache-cli/
$ npm install -g ganache-cli
讓我們開始以太坊區(qū)塊鏈協(xié)議的節(jié)點模擬。
- [ ]檢查--networkId和--port標志值是否與truffle.js中的配置--gasLimit相匹配
- [ ]檢查標志值是否與https://ethstats.net上顯示的最新主網(wǎng)絡(luò)Gas Limit(即8000000 gas)相匹配,以避免遇到out of gas不必要地異常。請注意,--gasPrice400,000,000表示gas價格為4 gwei。
- [ ]可選擇輸入--mnemonic標志值以恢復(fù)以前的HD錢包和相關(guān)地址
$ ganache-cli \
--networkId = 3 \
--port =“8545”
--verbose \
--gasLimit = 8000000 \
--gasPrice = 4000000000;