下载geth
https://geth.ethereum.org/downloads/
geth管理api说明:http://blog.hubwiz.com/2019/01/08/geth-admin-apis/
创建创世区块
新建 genesis.json
{
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": { },
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
部分配置说明
属性 | 说明 |
---|---|
coinbase | 矿工的账号 |
difficulty | 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 |
extraData | 附加信息,随便填 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和 |
nonce | 就是一个64位随机数,用于挖矿 |
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash |
parentHash | 上一个区块的hash值,创世块为0 |
timestamp | 设置创世块的时间戳 |
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号 |
cmd执行初始化
geth --datadir 私链的数据目录 init 配置
geth --datadir chain init genesis.json
如果用比较短的negative代码写初始块,会报错:
Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0
启动geth
启动执行
geth --datadir chain --port 30303 --networkid 99 --nodiscover console
新建账户 personal.newAccount(“密码”)
personal.newAccount("123")
查看所有账户
personal.listAccounts
挖矿
开始挖矿
miner.start();
挖矿时默认的是创建的第一个账号的地址
停止挖矿
miner.stop()
查余额
可以声明变量
// 将创建的第一个账号赋值给my
my=eth.accounts[0]
查余额
eth.getBalance(my)
// 或者
eth.getBalance("0x60d8a1f85966b6c75634a6ef840fe3e0d64616f8")
转账交易
解锁
personal.unlockAccount("0x60d8a1f85966b6c75634a6ef840fe3e0d64616f8")
// 或者
personal.unlockAccount(my)
不解锁转账不了
创建另一个账户
personal.newAccount('456')
// 赋值方便操作
he=eth.accounts[1]
转账
将my的账户转账给he账户,数量为30
eth.sendTransaction({from:my, to:he, value:30})
// 执行之后会要求输入密码,密码是隐式的
转账之后一定要进行挖矿,挖矿成功才是转账成功
// 开始挖矿
miner.start()
// 结束挖矿
miner.stop()
// 查询账户余额
eth.getBalance(he)//30