一、创建目录privatechain
,名字随便起
zhangqiangdeMac-mini:~ zhqmac$ cd Desktop
zhangqiangdeMac-mini:Desktop zhqmac$ mkdir privatechain
zhangqiangdeMac-mini:Desktop zhqmac$ cd privatechain/
二、创建创世块
vi genesis.json
拷贝下面的内容
{
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"config" : {
"chainId" : 110,
"eip155Block" : 0,
"eip158Block" : 0,
"homesteadBlock" : 0
},
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce" : "0x0000000000000042",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
保存退出
参数说明:
参数 | 说明 |
---|---|
mixhash | 与nonce配合用户挖矿,由上一个区块的一部分生成的hash。 |
nonce | nonce就是一个64位随机数,用于挖矿 |
difficulty | 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 |
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以 |
coinbase | 矿工的账号,随便填 |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash值,因为是创世块,所以这个值是0 |
extraData | 附加信息,随便填,可以填你的个性信息 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私链,所以随意写 |
三、初始化区块链,并且创建一个文件夹来存储区块数据
zhangqiangdeMac-mini:privatechain zhqmac$ geth init genesis.json --datadir blockchainData
四、启动私有链节点
geth --datadir blockchainData/ --networkid 110 --rpc console
如果出现Welcome to the Geth JavaScript console!
表示启动成功
参数 | 说明 |
---|---|
identity | 区块链的标示,随便填写,用于标示目前网络的名字 |
init | 指定创世区块文件的位置,并创建初始块 |
datadir | 设置当前区块链网络数据存放的位置 |
port | 网络监听端口 |
rpc | 启动rpc通信,可以进行智能合约的部署和调试 |
rpcapi | 设置允许链接的rpc的客户端,一般为db,eth,net,web3 |
networkid | 设置当前区块链的网络ID,用于区分不同的网络,是个数字,1 表示主网 |
console | 启动命令行模式,可以在geth 中执行命令. |
五、新建账户
查看所有账户
personal.listAccounts
返回为[]
,此时还没有账户
新建账户
personal.newAccount(“123456”)
"123456"
为账户密码
personal.listAccounts
可以查看到刚才创建的钱包地址,在blockchainData
目录下的keystore
目录中多了一个keystore文件,里面保存的即是次账号的一些信息:
{"address":"0a778959e98293bdc1101ec211dbc3135be2b59a","crypto":{"cipher":"aes-128-ctr","ciphertext":"e6e5c00cd34e76f4d64b07f0de100f3a81cfbe8b11b3c7ffc52f7bdad6308a27","cipherparams":{"iv":"498e15f6d7244bab299ff986e4155b2b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"5b0345890294ee5fc050b00e852963ce41cc60ae69ff86302d1a361498b09ba5"},"mac":"2e7f9c197ed4dbb9c5c3888b28639f5d38767ab3bb3359f4b58dc195d9798f2f"},"id":"a1b23559-f59e-44df-a32d-92f6682fd86f","
六、挖矿
- 查看账户余额
eth.getBalance(eth.coinbase)
查询结果为0,eth.coinbase
矿工的账号,默认为personal.listAccounts
第一个账号
- 设置
coinbase
eth.setEtherbase(eth.accounts[0])
因为此时我们只有一个账号,如果想要设置其他账号为挖矿账号,可以新建一个账号,通过eth.accounts[index]
来设置,或者直接将地址填在这里eth.setEtherbase("0x0a778959e98293bdc1101ec211dbc3135be2b59a")
- 开始挖矿
miner.start(1)
1
表示线程数
如果卡在
INFO [07-24|00:48:46.606] Commit new mining work number=2 txs=0 uncles=0 elapsed=129.846µs
没有关系,等着就好,根据电脑性能不同,时间可长可短
- 停止挖矿
miner.stop()
输入可能被挖矿的输出截断,没关系,直接输完,回车就好
- 看下余额
eth.getBalance(eth.coinbase)
这时就应该有以太币了,单位为wei
七、发送交易
- 创建一个账号
personal.newAccount(“123456”)
- 解锁账号
personal.unlockAccount(eth.coinbase)
输入密码
如下输出表示解锁成功
Unlock account 0x0a778959e98293bdc1101ec211dbc3135be2b59a
Passphrase:
true
>
注:解锁的账号,为了安全,一段时间后会自动上锁
- 转账
eth.sendTransaction({from:eth.coinbase,to:eth.accounts[1],value:100000000})
返回结果:
> eth.sendTransaction({from:eth.coinbase,to:eth.accounts[1],value:100000000})
INFO [07-24|01:00:53.132] Submitted transaction fullhash=0xa0517620c64f43e50db46836449a18afcf749200aaa13e5ce8f17b2d86be7b4a recipient=0x19BD3Fe6E7Db24aDaA5Dc012a154A9a03dCCD1fE
"0xa0517620c64f43e50db46836449a18afcf749200aaa13e5ce8f17b2d86be7b4a"
0xa0517620c64f43e50db46836449a18afcf749200aaa13e5ce8f17b2d86be7b4a
为交易hash
或者
amount = web3.toWei(10,’ether’) eth.sendTransaction({from:eth.coinbase,to:eth.accounts[1],value:amount})
- 查看
eth.accounts[1]
的余额
eth.getBalance(eth.accounts[1])
余额还是0
,因为交易还没有被验证,需要矿工挖矿确认。
miner.start() miner.stop()
再查看余额
eth.getBalance(eth.accounts[1])
转账成功
八、查看交易
eth.getTransaction(“0xa0517620c64f43e50db46836449a18afcf749200aaa13e5ce8f17b2d86be7b4a”)
可以查看交易信息。
九、查看当前区块总数
eth.blockNumber
十、通过区块号查看区块
eth.getBlock(6)
十一、交易池状态
txpool.status