什么是testnet?
测试网络(简称testnet)用于模拟以太坊主网的行为。有一些公开的测试网络只是替代的以太坊区块链。这些网络上的货币毫无价值,但它们仍然有用,因为可以在不破坏以太坊主网或使用真钱的情况下测试合约和协议变更的功能。当以太坊协议的任何重大变化即将被包含在主网络(简称主网络)中时,其测试主要在这些测试网络上完成。在将应用程序部署到主网络之前,大量开发人员还使用这些测试网络来测试应用程序。
使用Testnets
您可以连接到公共测试网络,也可以生成自己的专用测试网络。首先,让我们使用公共测试网络来更容易地进行设置。要使用公共testnet,需要一些testnet以及与该网络的连接。对于testnet ether,使用“水龙头”,缓慢分配测试ether,向任何要求的人“分配”少量。要连接到testnet,您需要一个以太坊客户端,可以是完整的客户端(如geth),也可以是通向完整客户端的网关,例如MetaMask。
获得测试以太
由于测试网络不能用真钱操作,因此矿工保护测试网络的动机很小。因此,测试网必须以不同方式保护自己免受滥用和攻击。结果,为这些测试网络创建了水龙头,以便以受控的方式将免费的测试ether分配给开发人员(大多数水龙头每隔几秒左右分发一次ether)。这种受控的以太分配可防止用户滥用链,因为提供有限的以太供应会阻止用户过多地写入链或执行过多的交易。此外,一些测试网已经实现了身份验证证明方案,其中使用水龙头需要具有适当凭据的社交媒体站点的身份验证。
连接到Testnets
Metamask
Metamask完全支持Ropsten、Kovan和Rinkeby测试网络,但也可以连接到其他测试网和本地网络。在Metamask中,只需单击“主网络”下拉菜单即可切换网络。MetaMask还提供“购买”测试以太的选项,它可以引导您进入可以请求免费测试以太的水龙头。如果使用Ropsten测试网,可以从Ropsten测试水龙头服务获得以太。您可以从此页面访问此水龙头。它需要Metamask扩展才能工作。https://faucet.metamask.io/
Infura
当MetaMask连接到测试网络时,它使用Infura服务提供程序进行JSON-RPC接口访问。Infura产生的目的是为ConsenSys内部项目提供稳定可靠的RPC访问。除了JSON-RPC API之外,Infura还提供REST(代表性状态转移)API,IPFS(行星际文件系统,即分布式存储)API和Websockets(即流式)API。
Infura为以太坊主网、Ropsten、Kovan、Rinkeby和INFURAnet(Infura的自定义测试网)提供网关API。
要通过MetaMask使用Infura进行初级的操作,您不需要帐户。要直接使用API,您需要注册一个帐户并使用Infura提供的API密钥。
有关Infura的更多信息,请访问:
混合集成开发环境(IDE)
Remix IDE可用于在主网和测试网上部署和交互智能合约,包括Ropsten、Rinkeby和Kovan(使用Infura地址和API密钥的Web3提供程序或通过Injected Web3使用MetaMask中选择的网络)和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网络。要连接到Ropsten网络,请使用命令行参数:
geth --testnet
这将开始同步Ropsten区块链。将在主Ethereum数据目录中创建名为testnet的新目录。密钥库目录将在testnet内创建,并将存储您的testnet帐户的私钥。在写这篇文章时,Ropsten区块链明显小于主要的以太坊区块链:大约14GB的数据。由于testnet需要的资源较少,因此首先在testnet上设置和测试代码更为简单。
与testnet交互类似于mainnet。您可以通过运行以下命令启动Geth testnet:
geth --testnet console
这使得可以执行诸如打开新帐户、检查余额、检查其他以太坊地址的余额等操作。当在Geth控制台外部运行时,可以执行与在mainnet上类似的操作,只需将--testnet参数添加到命令行指令即可。以列出所有可用的testnet帐户及其地址为例,运行:
geth --testnet account list
Tip | 虽然要小得多,但测试网仍需要一段时间才能完全同步。 |
---|
您可以通过在geth interactive console中运行以下命令来检查geth是否已完成同步testnet:
eth.getBlock("latest").number
一旦您的testnet节点完全同步,这应该返回0以外的数字。您可以将数字与已知testnet块浏览器中的最新块进行比较,例如https://ropsten.etherscan.io/
同样,要连接到Rinkeby测试网络,请使用命令行参数:
geth --rinkeby
Parity
Parity客户端支持Ropsten和Kovan测试网络。您可以使用chain参数选择要连接的网络。例如,要同步Ropsten测试网络:
parity --chain ropsten
同样,要同步Kovan测试网络,请使用:
parity --chain kovan
以太坊测试网络深入
在这个阶段你可能会想:“我理解为什么我可能会使用测试网络。但为什么会有这么多呢?”
https://www.ethnews.com/ropsten-to-kovan-to-rinkeby-ethereums-testnet-troubles
工作证明(采矿)与权威证明(联合签名)
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网络上开始测试合约,你可以从几个水龙头中找到Ropsten ethers。如果水龙头不起作用,请尝试不同的水龙头。
http://faucet.ropsten.be:3001/
这个水龙头提供了应该接收测试以太的地址队列的可能性。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上发布公开信息。 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/
以太经典测试网络
Morden
以太坊经典目前运行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
以太坊测试网络的历史
Olympic、Morden到Ropsten、Kovan、Rinkeby
Olympic testnet(网络ID:0)是Frontier的首个公共测试网(简称以太坊0.9)。它于2015年初推出,并于2015年中期被Morden取代时弃用。
Ethereum的Morden testnet(网络ID:2)与Frontier一起推出,从2015年7月开始运行,直到2016年11月被弃用。虽然任何使用以太坊的人都可以创建一个测试网,但Morden是第一个“官方”公共测试网并取代了Olympic测试网。由于来自臃肿的区块链的长同步时间以及Geth和Parity客户之间的共识问题,testnet重新启动并命名为Ropsten。
Ropsten(网络ID:3)是Homestead的公共跨客户端测试网络,于2016年底推出,并作为公共测试网络顺利运行至2017年2月底。根据以太坊的核心开发人员PéterSzilágyi的说法, 2月是“恶意行为者决定滥用低PoW并逐渐将封锁gas限制扩大到90亿(从正常的470万),此时发送巨大的交易使整个网络陷入瘫痪”。Ropsten于2017年3月恢复.https://github.com/ethereum/ropsten
Kovan(网络ID:42)是Homestead的公共Parity测试网络,由Parity的权威证明(PoA)一致性算法提供支持。testnet不受垃圾邮件攻击,因为以太供应由受信任方控制。那些受信任的组织是积极开发以太坊的公司。虽然看起来这应该是以太坊的测试网络问题的解决方案,但在以太坊社区中似乎存在关于Kovan测试网络的共识问题。https://github.com/kovan-testnet/proposal
Rinkeby(网络ID:4)是Homestead的公共Geth测试网络,由Ethereum团队于2017年4月启动并使用PoA共识协议。以Stockholm的地铁站命名,它几乎不受垃圾邮件攻击(因为以太网供应由受信任方控制)。请参阅EIP 225:https://github.com/ethereum/EIPs/issues/225
工作证明(采矿)与权威证明(联合签名)
https://github.com/ethereum/guide/blob/master/poa.md
TODO:写出两种机制的利弊
工作证明是一种协议,其中必须执行挖掘(昂贵的计算机计算)以在区块链(分布式分类帐本)上创建新区块(无信任交易)。缺点:能源效率低下。集中的哈希能源与集中的采矿场,而不是真正的去中心化。挖掘新区块所需的大量计算能力及其对环境的影响。
权威证明是一种协议,仅将授权负载分配给授权和可信赖的签名者,并且这些签名者可以自行决定在任何时间以怎样的创建频率来创建新区块。https://github.com/ethereum/EIPs/issues/225 优点:通过算法选择拥有最多身份的区块链参与者,以获得验证区块以交付交易的权利。
https://www.deepdotweb.com/2017/05/21/generalized-proof-activity-poa-forking-free-hybrid-consensus/
运行本地测试网络
Ganache:以太坊开发的个人区块链
您可以使用Ganache部署合约,开发应用程序并运行测试。它可用作Windows、Mac和Linux的桌面应用程序。
网站:http://truffleframework.com/ganache
Ganache CLI:Ganache作为命令行工具
该工具以前称为“ethereumJS TestRPC”。
https://github.com/trufflesuite/ganache-cli/
$ npm install -g ganache-cli
让我们开始以太坊区块链协议的节点模拟。
- [ ]检查--networkId和--port标志值是否与truffle.js中的配置--gasLimit相匹配
- [ ]检查标志值是否与https://ethstats.net上显示的最新主网络Gas Limit(即8000000 gas)相匹配,以避免遇到out of gas不必要地异常。请注意,--gasPrice400,000,000表示gas价格为4 gwei。
- [ ]可选择输入--mnemonic标志值以恢复以前的HD钱包和相关地址
$ ganache-cli \
--networkId = 3 \
--port =“8545”
--verbose \
--gasLimit = 8000000 \
--gasPrice = 4000000000;