本机配置是Windows10企业版64位系统,其他好像没什么比要注意的地方
老师给我的py脚本不能运行经过排查发现是request出的问题.经过调试成功安装go-ethereum,脚本从而顺利运行.
./genesis
(随便一个文件夹)中创建一个genesis.json
(随意一个名字)文件,填入生成创世区块的配置.{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x1000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000002242",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"},
"0x0000000000000000000000000000000000000003": {"balance": "111111111"},
"0x0000000000000000000000000000000000000004": {"balance": "222222222"},
"0x0000000000000000000000000000000000000005": {"balance": "111111111"},
"0x0000000000000000000000000000000000000006": {"balance": "222222222"}
}
}
PS1: 注意部分数字是字符串,所以要注意格式.
PS2: 十六进制数必须是偶数位,比如是0x00
而不是0x0
.
PS3: chainId
必须是大于 0 0 0的整数.
然后在根目录下执行
.\geth --datadir "./data" init ./genesis/genesis.json
关键点:
1.datadir后紧跟一个文件夹地址是存放数据的地方.以后所有的区块信息都会存放在这里,初始化的时候要保证内容文件夹不能有之前生成过区块的残余文件.
2.json的地址相对于当前控制台位置.
可能的错误:
目标文件夹已经有其他的创世区块.将里面的信息删去即可.
.\geth --rpc --rpcport 8545 --datadir "./data" --port 30399 --verbosity 1 --dev.period 1 --rpcapi "dev, eth, web3, personal, net, tx_pool, admin, miner" console 2>>eth_output.log
关键点:
1.rpc: 使用rpc协议.
2.rpcport: 设置rpc监听端口为8545,这个端口不能被占用.其他程序可以通过 http://127.0.0.1:8545 访问geth.
3.datadir: 后面紧跟一个文件夹地址.里面必须有一个生成的创世区块.
4.port: 后面紧跟一个数字,网络监听端口.
5.verbosity: 后面紧跟一个数字,数字为1时任何错误都会被禁止.
6.dev.period:后面紧跟一个数字,如果是1,则打开.
7.rpcapi: 后面紧跟一个字符串,字符串内容是我们可调用的api.
8.console: 使用javascript console模式.
具体详见go-ethereum Command Line Options.
可能的错误:
1.miner命令
miner.start()
开始挖矿.收益会给coinbase账户.注意miner.start()返回true时开始挖矿,也有可能返回null,实际上也陈工开启了挖矿.可以传入一个数字控制挖矿的进程数量.
miner.stop()
停止挖矿.
miner.setEtherbase(youraccount)
设置主账户,如果不设置则不能挖矿.
miner.setGasPrice
miner.hashrate
返回当前挖矿计算hash速度.单位是 H / s H/s H/s.
在执行miner.start()
的时候可能会抛出下列异常:
Failed to generate mapped ethash dataset epoch=0 err=“MapViewOfFile: Not enough storage is available to process this command.”
runtime: out of memory: cannot allocate 2147483648-byte block (2262933504 in use)
fatal error: out of memory
这是因为安装的go-ethereum是32位版本.卸载32位的go-ethereum改成64位版即可.
2.eth命令
eth.accounts
查看当前私有链上的账户.这是一个列表.也可以取eth.accounts[0]
等引用得到字符串形式的账户地址.
eth.getBalance(youraccount)
获取youraccont
账户上的余额.
eth.coinbase
查询主账户.
eth.blockNumber
查询当前私有链的区块数量.
eth.getBlock(str)
查询区块信息.str可以是"latest"查询最新区块,可以是“earliest”查询最初区块,也可以是"pending"查询正在处理的区块,还可以是一个区块编号.
eth.sendTransaction({from:fr,to:to,value:val})
发起一个交易.传入一个json
.包括汇出账户fr
,汇入账户to
,金额val
,单位是wei.汇出账户必须处于解锁状态.
3.web3命令
web3.fromWei(eth.getBalance(youraccount),"ether")
4.personal命令
personal.newAccount("password")
创建一个新的账户.参数是密码的字符串.
也可以不填,这时也会让你输入密码.但是内容被隐藏.这种方式更安全.
personal.unlockAccount(youraccount,youraccount_passoword,duration)
解锁一个账户,
第二个参数是账户密码,可以不填,这时也会让你输入密码.但是内容被隐藏.这种方式更安全.
第三个参数是持续时间,超过这个时间(以秒为单位)账户会自动加锁.
可能会抛出下列错误:
这是指密码错误,输入正确的密码即可.
personal.lockAccount(youraccount)
加锁一个账户.
web3.toWei(val,"qwq")
将数量为val的qwq单位转换为wei单位.
3.admin命令
admin.datadir
查看当前存储数据的目录
admin.nodeInfo.enode
查看节点信息
admin.peers
查看节点列表.
admin.addPeer("enode://.........@ip:port")
添加一个节点.
admin.startRPC("host", port)
开启RPC.
admin.stopRPC()
终止RPC.
4.net命令
net.peerCount
查看节点个数.
有人说chainId
为零的时候可能导致这种状况,我在保证chainId
不为零的前提下还保证了所有的账户里都有足够的钱.这样这个问题就解决了.
你给的钱少了.说明你有足够多的钱.但没给够,把gas值调高即可.
一方面是你给的钱可能过多.这时减少gas即可.
另一方面是你即使给了最少的钱也不行.这时需要修改genesis.json
中的gas limit,增加到足够大即可.
reference:
区块链-创世区块(windows私链以太坊网络搭建)
以太坊win7-64下私链挖矿崩溃问题
geth配置中,genesis.json的几个问题
以太坊手续费不足异常(insufficient funds)
区块链入门(2):搭建以太坊私有链,执行挖矿.
go-ethereum学习笔记(一)
Intrinsic gas too low and exceeds block limit
以太坊常见问题和错误 Web3j error:Intrinsic gas too low
go-ethereum 部署私有链
以太坊私有链挖矿操作指南
以太坊go-ethereum客户端(三)两种全节点启动模式
go-ethereum发起与执行交易的流程
以太坊执行miner.start返回null终极解决方案
go-ethereum Command Line Options
Management APIs