blockchain | 将合约部署到geth
blockchain | 将truffle合约部署到geth【一路踩坑】
上一篇文章里我用truffle编写了一个测试合约,这次得部署到链子上。
本文包含诸多试错过程
先把geth跑起来
1. 更改配置文件
更改truffle-config.js
主要就是配置一下网络(对接geth)
2. 创建迁移脚本
据教程的说法是要文件名写成:编号_xxxxx.js的格式。
然后truffle migrate
然后报错了:
应该是网络配置的问题,没有打开http rpc的权限。
检查了一下发现是配置truffle的时候端口填错了:
重新起geth。
还是报错,才发现默认不开http rpc, 然后再重新部署:
geth --datadir . --networkid 15 --nodiscover --http
这把对了。
但是这时候会发现,并没有执行部署的脚本,果然还是需要编号的。
重命名以后部署,依旧失败:
然后我就开始捣鼓geth的东西。
设置了一下奖励账户:
思考了一下发现应该是字节码版本过高了,geth不支持,所以降低到0.6.12进行编译,就可以了,然后报了另一个错误:
就是说部署的时候是需要账户密码的,得配置一下。
高版本好像只能用命令创建:https://blog.csdn.net/ling1998/article/details/123725616
也就是geth account命令(geth account --help)
创建好账户,调整对接的方式。
查了一下,第二个错误的原因是没有给账户解锁。
但是新版的geth实在找不到接口解锁,只能用一个快要废弃的方法启动(--rpc.enabledeprecatedpersonal):
geth --datadir . --nodiscover --networkid 15 --rpc.enabledeprecatedpersonal --http
然后还是他喵的不行:
查了一下,还是用命令行解锁:
geth --unlock [account] --password [password]
解锁以后再重启,在尝试truffle migrate:
geth --datadir . --nodiscover --networkid 15 --rpc.enabledeprecatedpersonal --http --unlock e237473eA18e831964d6c8DeB2862bF03e3dE51e --allow-insecure-unlock
# 如果不加--allow-insecure-unlock会报错(高版本安全性措施。。。)
成功解锁:
尝试mirate还是报错:
感觉原因是没给gas,那就挖会儿矿吧。。。
一通操作下来应该是够用了,100多个币,要是在现实中那已经发财了,再部署一次试试。
依旧是invalid sender。
然后继续查,参考这篇文章:https://blog.csdn.net/for_ge/article/details/95727453 【虽然作用不大,但是看起来这个博文还挺新】
然后我发现,转账也是报这个错误。
看网上说是geth的配置文件的问题,那也好办,直接推翻重头来。
修改配置文件:
{
"config":{
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000033",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gaslimit": "0x8000000",
"difficulty": "0x100",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
把之前的删了重新初始化:
然后创建用户,重复的过程,终于是成功了!
部署的过程中要挖矿,不然写不进去
这篇就这样了~
本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/17287690.html
如果有问题可以在下方评论或者email:mzi_mzi@163.com