我应该运行一个完整的节点吗?

区块链的健康,弹性和抗审查取决于拥有有多少独立运营和地理上分散的完整节点。每个完整节点都可以帮助其他新节点获取块数据以引导其操作,并为运营商提供对所有交易和合约的权威和独立验证。

但是,运行完整的节点会导致硬件资源和带宽的巨大成本。完整的节点必须下载超过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合约)。