blockchain | 将合约部署到geth

发布时间 2023-04-04 21:59:45作者: Mz1

blockchain | 将truffle合约部署到geth【一路踩坑】

上一篇文章里我用truffle编写了一个测试合约,这次得部署到链子上。

本文包含诸多试错过程

先把geth跑起来

1. 更改配置文件

更改truffle-config.js
主要就是配置一下网络(对接geth)

image

2. 创建迁移脚本

image

据教程的说法是要文件名写成:编号_xxxxx.js的格式。

然后truffle migrate

然后报错了:
image

应该是网络配置的问题,没有打开http rpc的权限。
检查了一下发现是配置truffle的时候端口填错了:
image

重新起geth。
还是报错,才发现默认不开http rpc, 然后再重新部署:

geth --datadir . --networkid 15 --nodiscover --http

这把对了。
image

但是这时候会发现,并没有执行部署的脚本,果然还是需要编号的。
重命名以后部署,依旧失败:

image

然后我就开始捣鼓geth的东西。
设置了一下奖励账户:
image

思考了一下发现应该是字节码版本过高了,geth不支持,所以降低到0.6.12进行编译,就可以了,然后报了另一个错误:
image

就是说部署的时候是需要账户密码的,得配置一下。
高版本好像只能用命令创建:https://blog.csdn.net/ling1998/article/details/123725616
也就是geth account命令(geth account --help)
创建好账户,调整对接的方式。

查了一下,第二个错误的原因是没有给账户解锁。
但是新版的geth实在找不到接口解锁,只能用一个快要废弃的方法启动(--rpc.enabledeprecatedpersonal):

geth --datadir . --nodiscover --networkid 15 --rpc.enabledeprecatedpersonal --http

然后还是他喵的不行:
image

查了一下,还是用命令行解锁:

geth --unlock [account] --password [password]

解锁以后再重启,在尝试truffle migrate:

geth --datadir . --nodiscover --networkid 15 --rpc.enabledeprecatedpersonal --http --unlock e237473eA18e831964d6c8DeB2862bF03e3dE51e --allow-insecure-unlock
# 如果不加--allow-insecure-unlock会报错(高版本安全性措施。。。)

成功解锁:
image

尝试mirate还是报错:

image

image

感觉原因是没给gas,那就挖会儿矿吧。。。

image

image

一通操作下来应该是够用了,100多个币,要是在现实中那已经发财了,再部署一次试试。
依旧是invalid sender。
然后继续查,参考这篇文章:https://blog.csdn.net/for_ge/article/details/95727453 【虽然作用不大,但是看起来这个博文还挺新】

然后我发现,转账也是报这个错误。
image

看网上说是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": {}
}

把之前的删了重新初始化:
image

然后创建用户,重复的过程,终于是成功了!

image

image

部署的过程中要挖矿,不然写不进去

这篇就这样了~