sudo apt-get install ethereum #安装Go Ethereum
2.安装完成后检查
利用命令 geth version,检查是否安装成功
3.建立目录和genesis.json
mkdir tmpPrivate
cd tmpPrivate/
vim genesis.json(如果没有vim命令,可以安装,如图)
vim genesis.json
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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。 |
常遇到的几个错误:
Fatal: invalid genesis file: missing 0x prefix for hex data:这个错误信息意思很明白,就是你的json文件中,对于16
进制数据,需要加上0x前缀
Fatal: invalid genesis file: hex string has odd length: 从v1.6开始,设置的十六进制数值,不能是奇数位, 比如不能是
0x0,而应该是0x00。
Fatal: failed to write genesis block: genesis has no chain configuration :这个错误信息,就是说,你的json文件中,
缺少config部分。看到这个信息,我们不需要把geth退回到v1.5版本,而是需要加上config部分。
Error: invalid sender undefined: 这个错误不会导致初始化失败,但是会在以后的转账(eth.sendTransaction),或者
部署智能合约的时候产生。解决方法就是chainId 不能设置为0。 如果你完全按照github上给的官方配置文件,就会产
生这个错误。
4.执行命令,创建创世区块
geth --datadir "./" --nodiscover console 2>>geth.log
注意:
–datadir 代表文件夹地址,
--nodiscover 表示私有链不要让公网上的节点发现
其中的代码 console 2>> geth.log 代表将控制台的一部分输出,输出到文件geth.log上
去。
打开另一个终端,找到geth.log的所在目录,执行命令 tail -f geth.log 从而持续的输出以太坊的日志
在命令行中执行命令 miner.start(), 开始在我们的区块链上进行挖矿
注意:
1. 挖矿挖到的ether币会默认保在第一个账户中,即eth.acccounts[0]中。
2. 挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能
合约的调用也会不起作用。
3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿
4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存
在的链,此时应该删除之前的数据。在Mac下即删除~/.ethash文件夹和里面的文件即可
5挖矿启动后,查看主账户的以太币数量
acc0 = eth.accounts[0]
eth.getBalance(acc0)
执行命令 tail -f geth.log 从而持续的输出以太坊的日志,生成区块的日志记录截图:
8.交易
每个账户的公钥(地址)是一切以太坊账户操作的核心,但地址字符串太长,我们用ac
c0/acc1 分别代表accounts[0]和[1],另外设置要转移0.01个以太币。
使用eth.sendTransaction来将0.01个以太币从acc0转移到acc1中。
acc0 = eth.accounts[0]
acc1 = eth.accounts[1]
amount = web3.toWei(0.01)
eth.sendTransaction({from: acc0, to: acc1, value: amount})
注意:
1.之所以交易时报错,是因为
这个是以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒
绝,除非把该账户解锁.
这个时候我们就需要执行 personal.unlockAccount(acc0) 并输入密码来解锁acc0才可。(如上图)
2.输入完交易的命令,我立即就查看acc1余额,发现是0!!!
这是因为交易提交未被处理,我们可以通过这可以通过查看txpool.status
来验证,如果我们看到pending:1,pending表
示已提交但还未被处理的交易;
要使交易被处理,必须要挖矿。(如上图,我开启了挖矿)
这个成功转账的截图(但第一次查看仍然是0):
博文地址 : http://m.blog.csdn.net/vinsuan1993/article/details/75208203