第一次写博客,这篇用来记录一下自己部署智能合约的过程以及遇到的问题和解决方法。
环境搭建
- Node.js:这个直接去官网下载安装就行。
- truffle:在下载完Node.js并且配置好环境变量之后,打开命令行输入
npm –g install truffle
- ganache-cli: 在命令行输入
npm install -g ganache-cli
创建一个truffle项目
truffle init
命令可以创建一个truffle项目,但是由于还不太会写智能合约,先下载官方示例进行部署和测试。
新建一个文件夹block test并在命令行中导航到该文件夹。
输入命令truffle unbox metacoin
结果出错RequestError: Error: getaddrinfo ENOENT raw.githubusercontent.com
据说是通过https://www.ipaddress.com查询 raw.githubusercontent.com 的地址。
配置hosts文件 C:\Windows\System32\drivers\etc\hosts
但是我用查询到的ip修改了hosts文件之后还是没有成功,后来在hosts文件里添加了199.232.68.133 raw.githubusercontent.com之后再下载就成功了。- 下载完之后block test目录下出现了一些文件夹:
- constracts:所有的智能合约文件都放置在这里
- migrations: 用来处理部署智能合约,每个migration文件前面有序号,表示migration文件的执行顺序
- test:测试用例
- truffle.js: 配置文件。如果使用Windows的cmd命令行的话,需要将文件名改为truffle-config.js。
编译部署智能合约到ganache环境
- 还是在block test文件夹下,使用
truffle compile
命令编译。
但是又报错module未定义
参考了别的博客,错误原因是
OS运行了truffle.js而非truffle.cmd
解决办法是
1.去truffle根目录修改truffle.cmd的名称,编译时输入修改名称+compile
2.输入truffle.cmd compile
于是,输入truffle.cmd compile
之后编译成功
-
在命令行输入
ganache-cli -p 7545
启动ganache,然后再打开一个命令行窗口进入block test文件夹下,输入truffle migrate --network ganacheNet
命令来部署到ganache环境中,但是,报错Unknown network “ganacheNet”. See your Truffle configuration file for available networks.
原因是truffle.config.js中没有进行配置。
修改truffle.config.js配置如下:
然后再输入truffle migrate --network ganacheNet
命令就成功了。 -
测试使用命令
truffle test
最后,还有一点是在truffle.cmd compile
之后直接执行了truffle migration
命令,然后报错Error: The network id specified in the truffle config (5777) does not match the one returned by the network (1617084237314). Ensure that both the network and the provider are properly configured.
这个错误应该是因为还没有生成区块链?在执行truffle migration
之前可以使用truffle
内置的Truffle Dev
启动一条区块链,这个命令会默认生成10个账户,每个账户里有100个以太坊。默认监听localhost:9545
如果部署到ganache环境的话就要先用上面提到的命令先启动ganache
先就这样吧,以后遇到其他问题再来更新~