使用homebrew下载
brew tap ethereum/ethereum
brew install ethereum
如果报错brew未识别,先下载homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
注意:下载homebrew建议不使用校园网,即使科学上网速度也会极慢,大概率会下载失败,选择手机开热点即可。
{
"config": {
"chainId": 744,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
chainId为该链的网络ID,建议设置大一点的数,其中1为以太坊公链ID。
alloc包含初始化的账号信息以及以太币,这里为空,在后面再手动添加。
difficulty代表挖矿难度,数值越小难度反而越大,所以为了挖矿更加简单,可以把这个值设置大一点。
gasLimit是一个区块所消耗的最大gas数,如果超过这个数将不被允许,因为智能合约的部署以及调用需要消耗的gas比普通转账要多,所以建议将该值设置大一点。
geth –datadir ./ init genesis.json
./代表当前目录,init genesis.json表示使用这个文件初始化创世区块。
整句话的意思是在genesis.json的当前目录下初始化,然后执行完后会生成两个文件夹,geth以及keystore,分别存放该链数据以及用户密钥。也可以将./替换成你想放的目录下。
加入私有链
geth --datadir ./ console 2>>geth.log
./代表的是geth和keystore文件所在目录,因为我是在当前目录,所以使用./,如果是其他注意修改路径。
console是JavaScript控制台。
2>>gets.log命令是指将日志输出到geth.log文件上(没有的话就新建),如果选择不加这个参数的话日志将会在console输出,这个看个人喜好。
如果在创世区块没有写明chainId,或者使用exit命令退出该链后想重新加进去,需修改为以下命令
geth --datadir ./ --networkid 744 console 2>>geth.log
744为刚刚设置的ID。这样就会重新回到那条链上。
通过输入eth.accounts
返回一个空数组说明当前并无账号
使用以下命令创建账号
personal.newAccount()
回车后会让你连续输入密码,这个密码就是你这个账号的私钥,同时会返回账号哈希,并将账号信息存储到keystore文件中。
连续添加两个账号,记得使用不同私钥。
然后使用eth.accounts
就可以返回账号数组,eth.accounts[0]
代表第一个账号。
查看第一个账号余额,返回结果为0,因为该账号没有任何收入。
eth.getBalance(eth.accounts[0])
获取区块数
eth.blockNumber
挖矿,其中1为挖矿线程数,如果挖矿成功返回null,挖矿收入转给第一个账号,关于如何修改默认矿工账号这里不讲。
miner.start(1)
如果不立即停止挖矿,该矿工会一直挖下去,因为只有一个节点且挖矿难度极低,所以区块数会一直增加(但是是空的,即交易量为0),矿工账号即第一个账号余额会一直增加。
停止挖矿
miner.stop()
也可以选择以下命令,使矿工挖出一个区块后停止挖矿,也可以修改指定块数后停止。
miner.start(1);admin.sleepBlocks(1);miner.stop()
这是使用查询账号余额和区块数都会发生链改变,但账号二余额仍为0,因为它不是矿工账号。
可以使用转账交易来将账号一的钱部分转给账号二,将1.5e+10单位wei转给账号二。
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:1.5e+10})
但会发现报错
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at <anonymous>:1:1
这时候你需要使用私钥将发送方的账号解锁,证明你拥有他的使用权才可以转账。
personal.unlockAccount(eth.accounts[0])
然后输入私钥,返回true即证明正确。
再执行以上命令,返回交易哈希(即交易ID),证明可以转账。
"0x41ff4bf9468c92aeb723037e396ac36bf0a367e61e3b3d298a071e5dd2945068"
注意是可以转账,而不是已经转账,因为此时还没有矿工将这个交易打包到区块中去。
使用txpool.status
查看交易池,得到以下返回值:1代表有一个交易需要打包。
{
pending: 1,
queued: 0
}
挖矿,返回null证明挖矿成功,这时转账完成。
miner.start(1);admin.sleepBlocks(1);miner.stop()
智能合约的部署以及调用都是属于交易的一种,下一篇博客再讲。