这是我们以太坊从零到英雄指南的第二部分。 如果您还没有阅读本部分,我强烈建议您在继续学习之前阅读它。
在本文中,我们将为以太坊开发和实验建立一个基本的私有测试网环境。
步骤0:要求
- 您正在使用MacOS
- 您对软件开发有基本的了解
- 您知道以太坊是什么,并了解它的基本用法。
- 您对MacOS Terminal的使用有基本的了解。
- 您已安装自制软件
步骤1:设定测试网
当我们学习以太坊开发的来龙去脉时,我们可能不想使用真实的以太坊来测试真实的生产网络。
为此,有多个以太坊测试网,例如Rinkeby和Morden 。 但是,与此网络进行交互仍然需要我们通过挖掘或从其他用户那里获取以太坊来获取以太坊。
虽然我们最终将与公共测试网络合作,但对于像我们这样刚入门的初学者而言,这远非理想,而且可能难以获得大量的以太。
更好的选择是设置我们的专用测试网 ,以便我们可以弯曲和扭曲。 同时,它将使我们对以太坊网络的内部运作有更深入的了解。
我们走吧
我们将需要安装geth,这是一个go CLI客户端,它将允许我们在本地运行完整的以太坊节点。
brew tap ethereum/ethereum brew install ethereum
我们可以通过输入以下内容来验证所有安装是否正确:
geth version
哪个应该给您类似于以下的输出:
步骤2:创世块
为了使我们的私人测试网开始,我们将需要一个创世纪模块。 每个区块链都需要一个创世块,这实际上是我们区块链的配置文件。
创世块是区块链的起点-第一个块,块0,并且是唯一不指向先前块的块。 该协议确保除非其他节点具有相同的创世块,否则其他节点都不会同意您的区块链版本,因此您可以根据需要创建尽可能多的私有测试网区块链!
- 创建一个项目目录,例如
ethereum_0hero - 打开您的首选编辑器,然后创建一个名为
HeroGenesis.json的文件。 - 复制以下内容并保存文件:
如您所见,文件内容在json中,并且在大多数情况下是不言自明的,但是让我们快速遍历每个参数来阐明它们的用途。
- coinbase :成功地开采了该区块而获得的所有奖励(以太币 )已转移到的160位地址。 这可以是Genesis块中的任何内容,因为该值是在创建新块时由矿工的设置来设置的。
- timestamp :一个标量值,在此块开始时等于Unix time()函数的合理输出。 最后两个块之间的时间间隔较小会导致难度级别增加,因此需要额外的计算才能找到下一个有效块。
- 难度 :它定义挖掘目标,可以从上一个区块的难度级别和时间戳计算得出。 难度越高,矿工在统计上发现有效区块所进行的计算就越多。 该值用于控制区块链的区块生成时间,将区块生成频率保持在目标范围内。 在测试网络上,我们将此值保持较低,以避免在测试期间等待,因为要在区块链上执行交易需要发现有效的区块。
- gasLimit :一个标量值,它等于当前每块天然气消耗链范围的极限。 在我们的案例中为高,以避免在测试期间受到此阈值的限制。
最后,那里的config参数可以确保从一开始就可以进行某些协议升级 。
有关完整说明,请在stackexchange中检查此答案
接下来,我们需要通过运行以下命令来初始化链:
geth --datadir ./TestNetData init HeroGenesis.json
设置数据目录非常重要,因为否则我们将覆盖真实的以太坊网络的默认数据目录。
输出应返回类似于以下内容的内容:
步骤3:运行本地节点
现在我们创建了初始链,我们可以通过执行以下命令来运行它:
geth --datadir ./TestNetData --identity "HeroNode1" --rpc --rpcport "8080" --rpccorsdomain "*" --port "30303" --nodiscover --rpcapi "db,eth,net,web3" --maxpeers 0 --networkid 24 console
此命令执行以下操作:
- 利用我们之前创建的Genesis块
- 它使用自定义数据目录而不是默认目录
- 将网络ID设置为24,以防止我们与主网络打扰
- 禁用对等发现
- 通过将maxpeers设置为0来禁用网络
- 启动geth控制台,以便我们可以与区块链/节点进行交互
输出应该类似于以下内容:
此时,您应该已启动并运行,并且在geth控制台中已准备好执行某些操作,但是会怎样?
好吧,让我们将注意力转移到以下警告:
警告未设置etherbase,也未找到默认帐户
我们已经启动并运行了节点,但是没有任何帐户将不会有太多用处。
步骤4:建立帐户
由于我们已经在Geth控制台中,因此更容易进行操作并直接从那里创建一个帐户,因此在终端中键入以下内容:
personal.newAccount()
控制台将要求输入密码短语,请不要丢失密码! ,并传回具有以下内容的:
0xe857331e4e3354bb72b3751cce419c8444e89e17
然后通过运行以下命令来验证该帐户是否存在:
> eth.getBalance("0xe857331e4e3354bb72b3751cce419c8444e89e17") 0
现在,让我们在该帐户中添加一些以太币。
第5步:让我们来盖斯矿业
快速回顾:
- 我们有一个工作的专用网络,其中一个节点在本地运行
- 我们创建一个在所述专用网络上的测试帐户
- 该帐户中没有任何以太币,我们需要解决该问题
现在,尽管我们可以使用Genesis区块轻松地向我们的账户发行以太币 ,但让我们玩得开心,在我们的专用网络上挖掘Ether。
打开一个新的终端选项卡,然后运行以下命令:
get attach ./<DirectoryName>/geth.ipc
这将把第二个终端连接到现有的geth实例,并打开Javascript控制台。 在控制台内运行以下命令:
miner.setEtherbase("0xe857331e4e3354bb72b3751cce419c8444e89e17") miner.start()
如果我们回到第一个终端,我们将看到以下情况:
让我们回到第二个终端并停止矿工并检查余额:
miner.stop() eth.getBalance('0xe857331e4e3354bb72b3751cce419c8444e89e17') 75000000000000000000
恭喜你! 现在,我们已经创建了专用网络并挖掘了少量的以太币,并且我们拥有一个可用于开发智能合约和DApp的有效网络。
在本系列的下一篇文章中,我们将开始使用Solidity和Smart Contracts进行开发。
本文最初发布 在我自己的网站上 。
From: https://hackernoon.com/ethereum-zero-to-hero-setting-a-development-environment-d45e11532105