搭建以太坊

一、准备工作

本教程所用环境:windows 7 64bits

安装geth:
https://ethfans.org/wikis/Ethereum-Geth-Mirror

二、搭建过程

1.启动私有链,创建帐户

cmd进入geth安装目录

geth --datadir chain1 --nodiscover console

进入geth控制台模式,其中chain1为帐户和区块数据目录

eth.accounts命令查看现有帐户,当前是空。

下面创建两个帐户,其中1234为密码:

personal.newAccount(“1234”)
“0xc9228294cc6bc3e3fcdba0f5d393d68f920c7789”
personal.newAccount(“1234”)
“0x5f0880e6c3507f609548732151a99f6ddc71cb95”

eth.getBalance

命令可以用于获取帐户余额,上述两个帐户目前余额都是0.

2.创建创世块

在geth目录下新建gensis.json文件,文件内容如下:

{
   "alloc": {
      "0xc9228294cc6bc3e3fcdba0f5d393d68f920c7789": {
      "balance": "999000000000000000000"
      }
   },
    "config":{
        "chainId":10,
        "homesteadBlock":0,
        "eip155Block":0,
        "eip158Block":0
    },
    "nonce":"0x0000000000000042",
    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x2000",
    "alloc": {},
    "coinbase":"0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "",
    "gasLimit":"0xffffffff"
}

注意:你需要修改上述alloc中的帐户地址,要用你自己机器上第一步骤中实际创建的帐户地址。

别看balance值有很多0,其实只有999个以太币。

各个参数的含义如下:

mixhash:与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。.
nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase: 矿工的账号,随便填
timestamp: 设置创世块的时间戳
parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
extraData: 附加信息,随便填,可以填你的个性信息
gasLimit: 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

用如下命令创建创世块:

 geth --datadir chain1 init genesis.json 

出现错误提示如下:

 Fatal: Failed to write genesis block: database already contains an incompatible genesis block

原因是前面启动私有链时候已经创建了默认的创世块。

我们需要先删除原来创世块,如下:

 geth removedb --datadir chain1

然后再次执行如下命令,即可创建创世块成功。

 geth --datadir chain1 init genesis.json 

 

如下命令再次进入geth控制台

 geth --datadir chain1 --nodiscover console

用eth.getBalance可以查看到帐户0现在的余额是999以太币。

eth.accounts
[“0xc9228294cc6bc3e3fcdba0f5d393d68f920c7789”, “0x5f0880e6c3507f609548732151a99f6ddc71cb95”]
eth.getBalance(eth.accounts[0])
999000000000000000000
web3.fromWei(eth.getBalance(eth.accounts[0]))
999

注:Wei是以太币的最小单位,web3.fromWei可以把Wei单位转换成以太币单位。

3.转账交易:从帐户0转10个以太币到帐户1

a0=eth.accounts[0]
“0xc9228294cc6bc3e3fcdba0f5d393d68f920c7789”
a1=eth.accounts[1]
“0x5f0880e6c3507f609548732151a99f6ddc71cb95”
personal.unlockAccount(a0,“1234”)
true
eth.sendTransaction({from:a0, to:a1, value:web3.toWei(10,“ether”)})
INFO [03-25|23:30:40] Submitted transaction fullhash=0x701113bdeaa9b14d424babf8d
x5f0880E6c3507F609548732151a99F6dDc71Cb95
“0x701113bdeaa9b14d424babf8df19852d26e9f23198aa5d7cd2c092581f666468”

注:付款帐户在转账前,需要用personal.unlockAccount命令进行解锁。

现在用eth.getBalance查两个帐户的余额,但遗憾地发现转账交易并未生效。

eth.getBalance(a0)
999000000000000000000
eth.getBalance(a1)
0

原因是交易需要矿工的参与,当前并无启动挖矿的节点。

4.挖矿

启动一个cmd新控制台来挖矿,用下面的命令来attach到已启动的私有链上

 geth attach \\.\pipe\geth.ipc

miner.start()命令启动挖矿,在第一个cmd窗口会看到挖矿成功的信息。

INFO [03-25|23:36:30] Successfully sealed new block number=1 hash=232457…18534b
INFO [03-25|23:36:30]

miner.stop()命令停止挖矿。

此时再用eth.getBalance查两个帐户的余额,发现帐户1收到了10个以太币,你会奇怪地发现帐户0的余额反而增加了,那是因为挖矿奖励默认存入帐户0

三、小结

本教程是用动手实践方式让你认识以太坊,要知教程操作背后的原理,建议阅读文章
《深入浅出比特币的交易和挖矿》,原理上比特币和以太币是相通的。

想进一步学习以太坊,推荐网站:

https://ethfans.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值