所有命令都是在powershell上执行的
创建一个 hdgenesis.json文件,拷贝到geth根目录
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x40000",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00",
"alloc": {}
}
参数说明如下图:
(同一个网络中,创世块必须是一样的,否则无法联通)
cd E:\blockchain\private_chain_env\1_node
cat .\hdgenesis.json
geth --datadir ".\" init hdgenesis.json --datadir 参数是指定数据存放文件夹
netstat -ano | findstr "30303"
(查找所有占用30303端口的进程)
get-process -Id 11276
(如何能查到进程,说明已经开启了Mist.exe,将其关闭,否则geth命令无法执行)
geth --identity "HDetherum" --rpc --rpccorsdomain "*" --datadir ".\" --port "30303" --rpcapi "db,eth,net,web3,personal" --networkid 95520 console
启动节点, 加上console 表示启动后,启用命令行;第二次也执行该命令
注意 networkid 95520,以太坊节点之间能够互相链接需要满足
1)相同的协议版本
2)相同的networkid
所以搭建私有网络最方便的方法就是通过geth命令中的--networkid选项,设置一个与主网不同的networkid(主网的networkid为1),这也是官方推荐的方法.
参数解析:
--identity 自定义节点名称
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象,一般为 db,eth,net,web3
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境
更多参数说明:(https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options )
在shell内,可以执行exit退出shell
1)telnet localhost 8545
ctrl+] 退出shell
quit退出telnet
2)netstat -ano | findstr "30303"
(查找所有占用30303端口的进程)
3)另外打开一个powershell的geth客户端访问
geth attach http://127.0.0.1:8545
(这种方式访问时,必须增加 personal选项 (资料来源于:https://ethereum.stackexchange.com/questions/3996/error-personal-unlockaccount-method-not-implemented))
4)通过mist客户端访问
5)示意图
personal.newAccount("123456")
(geth console启动后,运行如上命令创建一个主账户(没有账户不允许挖矿),根据提示设置交易密码,创建成功后就可以使用console进行相关的单节点命令操作)
测试环境设置两个账号:挖矿账号和普通账号
account[0] -- 挖矿账户
account[1] -- 普通账户
思路:把账户赋值给某一个变量,同时查询账户中的余额
//查看挖矿账户余额
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)
//查看普通账户的余额
account1 = eth.accounts[1]
num1=eth.getBalance(account1)
miner.start()
miner.stop()
num = eth.getBalance(eth.accounts[0])
web3.fromWei(num)
baseAccount = eth.accounts[0]
num = eth.getBalance(baseAccount)
account1 = eth.accounts[1]
num1=eth.getBalance(account1)
//从baseAccount账户转给account1账户1eth
personal.unlockAccount(baseAccount,"123456")
eth.sendTransaction({from : baseAccount, to : account1 , value : web3.toWei(1,"ether")})
// 查看账户余额
num = eth.getBalance(baseAccount)
num1=eth.getBalance(account1)
eth.pendingTransactions
提交转账之后,观察挖矿shell的输出,会出现一条打包转账交易的记录,等待新的区块继续生成的时候,account1 账户的余额才会更新。
待续….
手机扫一扫
移动阅读更方便
你可能感兴趣的文章