以太坊本地开发环境搭建
本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。 作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具:
这些工具的安装在官方文档上都有非常详细的讲解,这边就不多赘述了。 目录结构下文中的文件均已该目录为当前路径。 先新建好如下初始目录, . ├── 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" } 大概解释下其中的几个参数:
初始化接下来我们就需要将创世区块的初始信息写入区块链中,使用 # 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 其中 启动让我们接下来启动私有链吧! # geth --datadir data --networkid 31415926 --rpc --rpccorsdomain "*" --nodiscover console 输出如下即表示成功进入 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"] 多说一句,我们此时去看看 . ├── UTC--2018-03-12T11-46-09.722094891Z--880004bb64282fb01a3a2500ddf1f4bb5ad4b64a └── UTC--2018-03-12T11-48-04.771328116Z--29a079bdbc6d4d122178fbe01558e5df2d008523 这时候让我们看看账户里有没有 ether, > eth.getBalance(eth.accounts[0]) 0 挖矿一开始大家的账户里都没有 ether,那么都需要通过挖矿来获取。使用 > 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] |