资讯专栏INFORMATION COLUMN

以太坊本地开发环境搭建

fancyLuo / 3062人阅读

摘要:本文所搭建的环境是在上的开发环境,其他操作系统上与此非常相似,依然有参考价值。作为一枚区块链开发工程师,本地的开发环境是必不可少的。因为我们是私有链,所以可以写的大一些,方便开发测试。

本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。

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

go-ethereum

solc

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]            
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24058.html

相关文章

  • SegmentFault 技术周刊 Vol.41 - 深入学习区块链

    摘要:和比特币协议有所不同的是,以太坊的设计十分灵活,极具适应性。超级账本区块链的商业应用超级账本超级账本是基金会下的众多项目中的一个。证书颁发机构负责签发撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 从比特币开始 一个故事告诉你比特币的原理及运作机制 这篇文章的定位会比较科普,尽量用类比的方法将比特币的基本原理讲出来...

    qianfeng 评论0 收藏0
  • 搭建以太本地开发环境

    摘要:本文所搭建的环境是在上的开发环境,其他操作系统上与此非常相似,依然有参考价值。作为一枚区块链开发工程师,本地的开发环境是必不可少的。因为我们是私有链,所以可以写的大一些,方便开发测试。 本文所搭建的环境是在 Mac 上的开发环境,其他操作系统上与此非常相似,依然有参考价值。 作为一枚区块链开发工程师,本地的开发环境是必不可少的。我们首先看看需要哪些工具: go-ethereum so...

    Ethan815 评论0 收藏0
  • 以太是什么 - 以太开发入门指南

    摘要:以太坊是什么以太坊是一个建立在区块链技术之上,去中心化应用平台。运行环境以太坊虚拟机是以太坊中智能合约的运行环境。是由以太坊客户端提供的是典型的开发以太坊时使用的客户端,基于语言开发。 本文首发于深入浅出区块链社区原文链接:以太坊是什么 - 以太坊开发入门指南原文已更新,请读者前往原文阅读 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗...

    tomlingtm 评论0 收藏0
  • 登链钱包(一款功能强大的以太钱包)完全开源

    摘要:再也不用傻乎乎找人开发以太坊钱包了,直接拿去用吧再也不用担心私钥会被上传到别人的服务器上。功能够全面吧,尤其是最后一个功能支持以太坊官方测试网络及及本地测试网络,估计是开发者的最爱,做为开发者的我,懂你们的痛可以获取到免费的以太币用于测试。 你是否和我前段时间一样,苦苦的寻找一款好用的开源以太坊钱包,你会发现可用都很少,因为很多钱包说开源,仅仅是开源部分代码,现在不需要再找了, 登链钱...

    _ivan 评论0 收藏0
  • Mac环境搭建以太私有链

    摘要:原文地址石匠的为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链。网络在连接到其他节点的时候会用到,以太坊公网的网络是,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络。当设置为表示使用发布该链。 原文地址: 石匠的blog 为了测试以太坊智能合约,最方便的是在本地搭建一个以太坊私有链。在mac上搭建环境主要需要以下步骤。 geth安装 geth是go-ether...

    张金宝 评论0 收藏0

发表评论

0条评论

fancyLuo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<