带有合同部署的AWS上以太坊的两节点设置(第1部分)

我有时会计划模拟以太坊环境。背后的想法是观察以太坊节点如何相互工作,以及不同账户在交易和合同部署中如何相互作用。对于测试,当今大多数合同部署示例主要在testrpc或testnet上,但是对节点之间的合同如何工作对我来说仍然是新的.

我在AWS上部署了这个两节点设置。由于我没有在AWS上使用任何特殊功能,因此它应该适用于其他云环境.

我的设置灵感来自《 JJ’s World(链接),并经过多次修改后进行测试,然后记录下已完成的整个过程,并在此分享有关整个过程的一些经验.

我还使用了Mahesh Murthy(链接)。这是一个简单的合同,最能说明合同在链中的工作方式.

这绝不是详细的分步指南。我省略了某些步骤,并提及了其他人所做的一些工作。例如,可以在此处找到AWS EC2的详细操作,包括使用访问密钥,安全组等设置启动新实例(链接).

在这里阅读第二部分

此设置分为两部分.

第1部分:使用私有区块链创建一个2节点的以太坊网络,两个节点上的账户可以互相发送以太坊.

第2部分:从一个节点部署合同,两个帐户都可以访问和执行此合同上的功能.

步骤1:启动两个EC2实例.

使用带有默认8G SSD的t2.medium(2个vCPU,4 GB RAM)。选择Ubuntu OS。确保两个节点具有相同的安全组,该安全组允许TCP 30303(或30000-30999,因为我可能在此范围内使用更多端口)。默认情况下,端口30303用于节点之间的对等.

经验分享

  • 我首先尝试了t2.micro,因为它是免费套餐。但是,采矿没有成功(没有以太币奖励的“ DAG”循环)。接下来,我尝试了t2.small,采矿工作了。但是,当我部署合同(请参阅第2部分)时,rpc不稳定。最后,我发现t2.medium足以满足我的设置要求.

  • 我通常在测试后停止实例(以节省资金)。请注意,重新启动EC2实例后,其公共IP地址将被更改。这不会影响此处的设置,因为我正在使用这些实例的专用IP地址进行对等连接。即使在我停止/启动实例之后,私有IP地址仍然保留。在任何情况下,如果需要公共IP地址,对等仍然有效,但是您可能每次都需要更改对等地址.

步骤2:在节点1上安装geth客户端

使用ssh和正确的密钥访问节点1。请遵循建议的流程(链接)进行geth安装。从PPA安装就足够了.

节点1

$ sudo apt-get install software-properties-common

$ sudo add-apt-repository -y ppa:ethereum / ethereum

$ sudo apt-get更新

$ sudo apt-get install ethereum

并用$ geth验证它,您将看到geth已正确安装.

步骤3:准备Genesis.json

相同的Genesis.json应用于两个节点,以确保两个节点具有相同的创世块。这是我使用的Genesis.json,从这里开始采用(链接)。我进行了初始分配,因为我不需要在每个新设置中都修改此文件上的地址。每个账户一旦开始挖掘将获得一些以太币.

Genesis.json

{

"配置":{

"chainId":15,

"宅基地块":0,

"eip155块":0,

"eip158块":0

},

"随机数": "0x0000000000000042",

"混合哈希": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000",

"困难": "0x200",

"分配":{},

"币库": "0x0000000000000000000000000000000000000000000000",

"时间戳记": "0x00",

"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000",

"gasLimit": "0xffffffff",

"分配":{

}

}

将此文件保存在某个位置,然后scp到节点,或者仅使用编辑器在两个节点上复制并粘贴.

步骤4:使用Genesis.json初始化geth

节点1

$ geth init Genesis.json

步骤5:立即启动geth

优良作法是并行放置两个屏幕(或拆分终端)。一个屏幕是控制台,另一个屏幕显示日志。打开一个新终端,并通过SSH进入节点1,并继续阅读日志.

节点1 $ geth –nodiscover控制台2>> eth.log

另一个终端$ tail -F eth.log

具有合同部署的AWS上以太坊的两节点设置

经验分享

  • 在许多示例中,建议使用–datadir指定私有以太坊区块链的目录。当您与不同的链进行交互时,这是一个好习惯。我的例子是一个孤立的环境。因此,我忽略了此选项,我的私有链存储在目录〜/ .ethereum /中。.

步骤6:在节点1上创建一个帐户

节点1盖斯

> personal.newAccount()

> eth.getBalance(eth.accounts [0])或 > web3.fromWei(eth.getBalance(eth.accounts [0]),“ ether”)

现在我们在此节点上有一个帐户(始终通过 > eth.accounts [0]或 > eth.coinbase)。目前,帐户余额中没有以太币,因为我们尚未在Genesis.json中分配任何以太币.

第7步:开始挖掘

我们可以开始采矿了.

  1. 在日志终端中,我们将看到“正在生成DAG”,在某个时期之后,正在挖掘一个块.
  2. 开采一个区块后,会将5个以太币添加到帐户余额中。这是采矿成功与否的一个很好的指标.
  3. 如果我们继续进行挖掘,那么随着更多新区块的挖掘,账户余额就会不断增加.

节点1盖斯

> miner.start()

> eth.getBalance(eth.accounts [0])

随时进行采矿,或者我们可以通过以下方式将其关闭 > miner.stop().

现在节点1准备就绪。让我们在节点2上工作.

步骤8:在节点2上重复步骤2-6

确保在节点2上初始化区块链时使用相同的Genesis.json.

不要开始挖掘,因为我们希望节点2与节点1位于同一区块链上(通过对等).

步骤9:凝视

现在我们开始对两个节点进行对等。有几种对等的方式。在这里,我使用“ admin addPeer”进行对等:在节点2中,添加节点1的enode信息以进行对等.

首先,检查两个节点是否没有对等.

节点1 > 管理员

节点2 > 管理员

从节点1获取enode信息

节点1 > admin.nodeInfo.enode

我们将得到如下内容:

"enode:// c667fdf1f6846af74ed14070ef9ffeee33e98ff8ab0dd43f67415868974d8205e0fb7f55f6f37e9e1ebb112adfc0b88755714c7bc83a7ac47d30f8eb53118687 @ [::]:30303?discport = 0"

将此信息添加到节点2。用节点1的专用地址更改[::].

节点2

> admin.addPeer("enode://c667fdf1f6846af74ed14070ef9ffeee33e98ff8ab0dd43f67415868974d8205e[email protected]172.31.62.34:30303?discport = 0")

在检查之后,两个节点以及它们彼此对等.

节点1 > 管理员

节点2 > 管理员

左侧是节点1,右侧是节点2。请注意,之后 > 在节点2上的addPeer()被对等。我们不需要在节点1上做同样的事情.

此外,从日志中,我们看到在对等之后,在节点2日志(右下角的终端)上看到“块同步已开始”和“导入新的链段”。.

经验分享

  • 确保使用相同的Genesis.json来初始化区块链。在一项试验中,我忘记了初始化步骤,并且凝视不成功.
  • AWS EC2实例随附一个私有IP地址和一个公共IP地址。两者在添加对等方方面都可以正常工作,但是使用私有IP地址更为方便,因为在实例STOP / START之后它不会更改.

步骤10:在帐户之间发送以太币

由于两个节点都在同一个以太坊区块链中,因此我们将在账户之间发送一些以太币。在此示例中,将10个以太币从节点1的帐户发送到节点2的帐户。这是验证设置是否成功的最佳方法之一。.

节点1

> web3.fromWei(eth.getBalance(eth.coinbase),“ ether”)

> personal.unlockAccount(eth.coinbase)

> eth.sendTransaction({来自:eth.coinbase,发送至: "0xabc65de992289401dcff3a70d4fcfe643f7d2271", 值:web3.toWei(10,“ ether”)})

> miner.start()

节点2 > web3.fromWei(eth.getBalance(eth.coinbase),“ ether”)

具有合同部署的AWS上以太坊的两节点设置

请注意,由于尚未进行此交易,因此我们看到“待处理交易”。一旦我们开始在节点1上进行挖矿,交易就完成了,节点2上的帐户余额现在为10以太币.

而且我们在节点1中看到45个以太(不是预期的20-10 = 10个以太)。这是因为节点1一直在获得采矿奖励(每个区块5个以太币)。余额将不断增加,直到我们停止开采.

闭幕

现在,我们完成了第一部分:我们在AWS上构建了一个两节点的私有以太坊区块链。您可以直接转到下一部分以部署合同,然后停止该流程和EC2实例以备将来使用。如果由于任何原因更改了对等关系,则可以使用上面的步骤9重新对等节点.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me