这些天不知道反反复复失败了多少次,造成的那一瞬间,心里简直无法言喻,激动地站了起来,然后发现在办公室,然后若无其事地装着去厕所洗了把脸。
1.作为如今最大的区块链开源平台,必须要安装 以太坊
Geth windows官方安装指南:
https://github.com/ethereum/go-ethereum/wiki/Installation-instructions-for-Windows(全英文的,建议用gogle浏览器,直接右键翻译)
ps:安装的时候在c盘中找到cmd.exe 右键利用管理员权限安装,因为需要安装许多安装包,不然会报错
2.看白皮书,看白皮书,看白皮书,重要事情说三遍
区块链白皮书地址:
https://github.com/ethereum/wiki/wiki/White-Paper
3.因为geth需要同步所有区块,所以时间超级超级的长,我用了一天的时间才同步完
4.以上按照官方文档操作即可,都准备好后,建立创世纪区文件,为json格式,然后在json文件里面填入新区块配置:
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": { }
}
解释一下各个参数的作用:
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的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。 |
5.启动区块链节点:
进入windows的以太坊目录下,创建文件夹chain,存放区块资料,然后把之前创建好的json文件放在里面,我下载安装的默认路径如图:
piccgenesis.json即为创世区块配置
6.
a.进入geth安装目录:C:\Users\admin\AppData\Roaming\Ethereum
b.执行:geth --datadir "%cd%\chain" init piccgenesis.json
c.穿件数据存放地址并初始化创世模块:
启动Geth即可以启动以太坊的区块链,为了构建私有链 ,需要在Geth启动时加入一些参数,指令如下:
geth --identity "PICCetherum" --rpc --rpccorsdomain "*" --datadir "%cd%\chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 93318 console
执行成功后,会进入javascript 控制台:
以太坊私有网络搭建成功
PS: Geth参数含义如下:
identity |
区块链的标示,随便填写,用于标示目前网络的名字 |
init |
指定创世块文件的位置,并创建初始块 |
datadir |
设置当前区块链网络数据存放的位置 |
port |
网络监听端口 |
rpc |
启动rpc通信,可以进行智能合约的部署和调试 |
rpcapi |
设置允许连接的rpc的客户端,一般为db,eth,net,web3 |
networkid |
设置当前区块链的网络ID,用于区分不同的网络,是一个数字 |
console |
启动命令行模式,可以在Geth中执行命令 |
7.进入的JS控制台后使用节点创建账号:
a.输入指令查看账号信息:
指令:eth.accounts
正常情况下是没有的 下面的输出为[],因为之前我创建过,所以我才有账号,
b.创建账户:
指令:personal.newAccount("wangyaxing"),
d.再次输入查询账号指令:eth.accounts
可见我有两个账号以数组形式存放
!!!!!!
8.账户已经有了,而且这个区块链使我们自己创建的,里面的货币数量是也我们定义的,那么,嘿嘿嘿,当然是开始赚钱,赚很多很多的钱
赚钱方法英文叫Mining 俗称挖矿
a. 在命令行 执行开始挖矿:
指令:miner.start()
因为是私有节点,并且没有竞争者,所以我们一分钟 就会有获得很多的奖励,
输入指令:miner.stop(),停止挖矿
然后再来看看我们账户钱包有多少矿了:
查询钱包余额指令:eth.getBalance(eth.accounts[0])
看看我们的账户,有多少以太币,是不是 惊呆了? 哈哈哈哈哈哈哈哈哈哈哈哈哈!!!
PS:查询的是第一个账户的余额,当我们挖矿时,奖励金存储默认的是第一个账户,如果第二个账户需要,我们可以执行转账指令;
eth.sendTransaction({from:"第一个账户的账号",to:"第二个账户的账号",value:web3.toWei(1000000,"ether")})
当直接执行此方法时会抛出异常:
account is locked
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at <anonymous>:1:1
是没解锁的原因
解锁指令:
personal.unlockAccount("第一个账户的账号","设定的密码")
然后需要执行挖矿命令,才会把转账真正完成,会看到转的账户数字增加。