win10, 64位系统完成go-ethereum1.8.22私有链配置和一些相关内容

本机配置是Windows10企业版64位系统,其他好像没什么比要注意的地方

引子

老师给我的py脚本不能运行经过排查发现是request出的问题.经过调试成功安装go-ethereum,脚本从而顺利运行.

go-ethereum 安装和运行要点

  • go-ethereum的github是 https://github.com/ethereum/go-ethereum ,可以下载下来使用golang和gcc编译.也可以在 https://geth.ethereum.org/downloads/ 直接下载安装包.这里需要注意的是.如果你是64位系统一定要安装64位版本的,具体原因会在后面谈到.
  • 关于私有链简便为主这里只讲一个能用的配置
  • 创建创世区块
    先在./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的地址相对于当前控制台位置.
可能的错误:

Failed to write genesis block: database already contains an incompatible

目标文件夹已经有其他的创世区块.将里面的信息删去即可.

  • 在根目录下执行
.\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.

可能的错误:

  • 如果出现Welcome to the Geth JavaScript console! 说明正常进入console模式,一般如果前面的都是相同的操作这里是没有问题的.这样我们就成功配置了go-ethereum私有链.这里继续补充几个私有链的命令:

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)

解锁一个账户,
第二个参数是账户密码,可以不填,这时也会让你输入密码.但是内容被隐藏.这种方式更安全.
第三个参数是持续时间,超过这个时间(以秒为单位)账户会自动加锁.
可能会抛出下列错误:

could not decrypt key with given passphrase

这是指密码错误,输入正确的密码即可.

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

查看节点个数.

  • 和go-ethereum交互的时候我遇到的几个问题:
Insufficient funds for gas * price + value

有人说chainId为零的时候可能导致这种状况,我在保证chainId不为零的前提下还保证了所有的账户里都有足够的钱.这样这个问题就解决了.

Intrinsic gas too low

你给的钱少了.说明你有足够多的钱.但没给够,把gas值调高即可.

Intrinsic gas exceeds block limit

一方面是你给的钱可能过多.这时减少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

你可能感兴趣的:(区块链,以太坊,go-ethereum)