在使用创世块文件初始化链时,遇到了以下问题:Fatal: Failed to read genesis file: open genesis.json: permission denied
geth版本 Version: 1.9.6-unstable 日期 2024/4/15
这个问题应为,所查看的教程中并没有前置的客户端节点配置命令。
下载命令:
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
可能遇到的问题
-
Fatal: invalid genesis file: missing 0x prefix for hex data:这个错误信息意思很明白,就是你的json文件中,对于16进制数据,需要加上0x前缀
-
Fatal: invalid genesis file: hex string has odd length: 从v1.6开始,设置的十六进制数值,不能是奇数位, 比如不能是0x0,而应该是0x00。
-
Fatal: failed to write genesis block: genesis has no chain configuration :这个错误信息,就是说,你的json文件中,缺少config部分。看到这个信息,我们不需要把geth退回到旧版本,而是需要加上config部分。
-
Error: invalid sender undefined: 这个错误不会导致初始化失败,但是会在以后的转账(eth.sendTransaction),或者部署智能合约的时候产生。解决方法就是chainId 不能设置为0。 如果你完全按照github上给的官方配置文件,就会产生这个错误。
-
Fatal: Failed to read genesis file: open genesis.json: The system cannot find the file specified.
对创世块文件进行修正即可。
实操问题1.初始化"chain"时:Fatal: Failed to read genesis file: open genesis.json: permission denied
创世块文件内容
{
“config”: {
“chainId”: 10,
“homesteadBlock”: 0,
“eip150Block”: 0,
“eip155Block”: 0,
“eip158Block”: 0,
“byzantiumBlock”: 0,
“constantinopleBlock”: 0,
“petersburgBlock”: 0
},
“coinbase” : “0x0000000000000000000000000000000000000000”,
“difficulty” : “0x20000”,
“extraData” : “”,
“gasLimit” : “0xffffffff”,
“nonce” : “0x0000000000000042”,
“mixhash” : “0x0000000000000000000000000000000000000000000000000000000000000000”,
“parentHash” : “0x0000000000000000000000000000000000000000000000000000000000000000”,
“timestamp” : “0x00”,
“alloc” : {}
}
尝试解决,首先切换超级用户 sudo geth --datadir “chain” init genesis.json 无效;
更改文件权限,chmod 777 genesis.json 无效;
检查安装 sudo snap install geth :snap “geth” is already installed, see ‘snap help refresh’;完好
猜测是geth版本问题,尝试更新
版本更新
sudo apt-get update
sudo apt-get upgrade
检查发现geth的版本仍然未改变 尝试卸载时,出现下列说明:Package ‘geth’ is not installed, so not removed
此时在不影响项目独立性的前提下,可以直接选择指定版本安装(可以跳过此操作,问题产生并非geth版本所致)
在上述方法无效的基础上,运行以下命令:sudo apt install ethereum
成功解决,客户端节点未配置导致问题出现。