加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

以太坊本地开发环境搭建

发布时间:2020-12-16 19:14:44 所属栏目:大数据 来源:网络整理
导读:本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。 作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具: go-ethereum solc Ethereum Wallet 这些工具的安装在官方文档上都有非常详细的
本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。

作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具:

  1. go-ethereum
  2. solc
  3. Ethereum Wallet

这些工具的安装在官方文档上都有非常详细的讲解,这边就不多赘述了。

目录结构

下文中的文件均已该目录为当前路径。

先新建好如下初始目录,

.
├── data
└── genesis.json
  • genesis.json:初始化私有链的配置文件。
  • data:存放区块链数据的目录。

配置文件

以太坊支持自定义创世区块,要运行私有链那么就必须定义自己的创世区块。创世区块的信息就写在 genesis.json 中,内容如下:

{
  "config": {
    "chainId": 15,"homesteadBlock": 0,"eip155Block": 0,"eip158Block": 0
  },"alloc": {},"nonce": "0x0000000000000042","difficulty": "0x020000","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","coinbase": "0x0000000000000000000000000000000000000000","timestamp": "0x00","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit": "0x4c4b40"
}

大概解释下其中的几个参数:

  • alloc:用来预设置账号以及账号的 ether 数量。因为私有链挖矿比较容易,所以我们不需要预设置账号。比如,{"0x880004bb64282fb01a3a2500ddf1f4bb5ad4b64a":{"balance":"100000000000000000000000000000"}}
  • nonce:一个64位随机数,用于挖矿。
  • mixhash:和 nonce 配合用于挖矿,由上一个区块的一部分生成的 hash。
  • difficulty:设置当前区块的难度,如果难度过大,cpu挖矿就很难,所以这边设置的很小,不要跟自己过不去嘛。
  • coinbase:默认挖矿的矿工账号。
  • timestamp:设置创世块的时间戳。
  • parentHash:上一个区块的hash值,因为是创世块,所以值是0。
  • extraData:附加信息,随便填。
  • gasLimit:设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和。因为我们是私有链,所以可以写的大一些,方便开发测试。

初始化

接下来我们就需要将创世区块的初始信息写入区块链中,使用 geth init 命令。

# geth --datadir "./data" --networkid 31415926 --rpc --rpccorsdomain "*" init ./genesis.json

大致会输出如下信息:

INFO [03-12|19:36:02] Allocated cache and file handles
INFO [03-12|19:36:02] Writing custom genesis block
INFO [03-12|19:36:02] Persisted trie from memory database
INFO [03-12|19:36:02] Successfully wrote genesis state

此时的目录结构就变成如下:

.
├── data
│  ├── geth
│  │  ├── chaindata
│  │  │  ├── 000001.log
│  │  │  ├── CURRENT
│  │  │  ├── LOCK
│  │  │  ├── LOG
│  │  │  └── MANIFEST-000000
│  │  └── lightchaindata
│  │      ├── 000001.log
│  │      ├── CURRENT
│  │      ├── LOCK
│  │      ├── LOG
│  │      └── MANIFEST-000000
│  └── keystore
└── genesis.json

其中 keystore 目录用来保存账户信息,geth 目录用来保存区块信息。

启动

让我们接下来启动私有链吧!

# geth --datadir data --networkid 31415926 --rpc --rpccorsdomain "*" --nodiscover console

输出如下即表示成功进入 geth 的控制台:

Welcome to the Geth JavaScript console!

instance: Geth/v1.8.2-stable/darwin-amd64/go1.10
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

创建账户

先别急着去挖矿,我们得先创建一个账户,不然挖出的 ether 塞哪里去呢!

ether 也就是我们说的以太币(ETH)。

先来看看是否已存在账户了,

> eth.accounts
[]

那我们新建两个(用于后面账户间的转账演示),

> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x880004bb64282fb01a3a2500ddf1f4bb5ad4b64a"

> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x29a079bdbc6d4d122178fbe01558e5df2d008523"

现在我们就有两个账户了,

> eth.accounts
["0x880004bb64282fb01a3a2500ddf1f4bb5ad4b64a","0x29a079bdbc6d4d122178fbe01558e5df2d008523"]

多说一句,我们此时去看看 keystore 目录,多出了两个文件,也就是我们刚才创建的两个账户密钥(丢了它,你就等于丢了币)

.
├── UTC--2018-03-12T11-46-09.722094891Z--880004bb64282fb01a3a2500ddf1f4bb5ad4b64a
└── UTC--2018-03-12T11-48-04.771328116Z--29a079bdbc6d4d122178fbe01558e5df2d008523

这时候让我们看看账户里有没有 ether,

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

挖矿

一开始大家的账户里都没有 ether,那么都需要通过挖矿来获取。使用 miner.start() 命令开启挖矿,默认挖出的 ether 是存到 eth.coinbase 账户中的,也就是第一个账户。

> eth.coinbase
INFO [03-12|19:55:13] Etherbase automatically configured       address=0x880004Bb64282fb01A3A2500DDF1F4bB5AD4b64A
"0x880004bb64282fb01a3a2500ddf1f4bb5ad4b64a"

如果我们想要把挖到的矿存入其他账户,可以这样:

> miner.setEtherbase(eth.accounts[1])
true

好了,我们开始挖吧~

> miner.start(1)
> INFO [03-12|20:00:44] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=513.188μs
INFO [03-12|20:00:47] Generating DAG in progress               epoch=0 percentage=0 elapsed=1.668s
INFO [03-12|20:00:49] Generating DAG in progress               epoch=0 percentage=1 elapsed=3.368s

等到 percentage 达到100就能挖出来了,请耐心等待~

INFO [03-12|20:04:15] Successfully sealed new block            number=4 hash=81db99…4db568
INFO [03-12|20:04:15]                        

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读