最近在安装Truffle环境方面遇到很多问题,找了很多技术博客,里面的方法都是一样的,不能解决问题,后来发现了一篇非常好的博客完美的解决了我遇到的所有问题,在这里贴出原帖的地址致敬
Ubuntu Truffle V3.2.1环境配置及合约部署基础
如有侵权请联系删除
Truffle是针对基于以太坊的Solidity语言的一套开发框架,本身基于JavaScript。是一种本地的用来编译、部署智能合约的工具。
Node是必不可少的,安装版本:6.14.1,因为不知道最新的7.X是否会出别的问题,因此依旧选用了6.X的版本。
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
安装成功验证:在终端输入以下命令查看安装的版本信息
node -v
我系统的返回结果是:v6.14.1
testrpc是创建测试网络的方法,是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷。testrpc可以在启动时帮我们创建10个存有资金的测试账户。(testrpc 现在已经并入到Truffle 开发框架中,现在名字是Ganache CLI。)
Geth又名Go Ethereum,是典型的开发以太坊时使用的客户端,由Go语言开发。 Geth提供了一个交互式命令控制台,在命令控制台中包含了以太坊的各种功能(API)。Geth是真正的以太坊环境。
在进行合约开发时,可以在testrpc中测试通过后,再部署到Geth节点中去。
npm install -g ethereumjs-testrpc
安装成功验证:在终端输入以下命令
testrpc
npm install -g truffle
安装成功验证:在终端输入以下命令
truffle -version
与2.X版本的 truffle init 不同,这里需要使用到webpack,若继续沿用 truffle init,并不是不可行,就是会少一个叫“app”的文件夹,也就是少了前端界面的展示。(这个也是我之前看到的教程里面没有提到的,所以按照之前教程安装运行实例的时候都没有达到教程里面的效果)
mkdir myproject
cd myproject
truffle init webpack
myproject文件夹里面的内容如下
其中各文件夹的解释如下:
app:前端界面的展示,也就是localhost:8080时所展示的界面。
contracts:合约文件储存地,.sol文件。
migrations:执行truffle migrate时的一些配置。
node-modules:运行时的核心代码。
test:用于测试合约,执行命令truffle test。
build:当执行truffle migrate时,会自动将contracts里面的.sol合约文件编译成.json文件。该文件夹刚开始时是没有的,在执行truffle migrate之后才有。
contracts 就是合约存储的目录,默认情况下已经帮你创建好了几个文件。
truffle compile
testrpc
此时重新开一个终端窗口进入myproject文件夹执行下面的指令
1.X版本:truffle deploy
2.X及以上版本:truffle migrate
2.X版本:truffle serve
3.X版本:npm run dev
(这个指令的变化在别的博客里面也没有看到,用的还是2.X版本的指令)
启动服务后,可以在浏览器访问项目,http://localhost:8080/ 或者 http://localhost:8080/index.html 可行的。
可以看到正常执行下来在网页界面会报错,原因是因为testrpc默认监听的是8545端口,而Chrome浏览器js代码请求的是testrpc的9545端口
解决办法就是将两个端口改成一致的就可以:
一是修改合约调用代码。myproject\app\javascripts\app.js,
把window.web3 = new Web3(new Web3.providers.HttpProvider(“http://127.0.0.1:9545“));的端口号9545改为8545,该行代码在app.js文件的最下面。
二是testrpc监听端口改为9545。
启动testrpc时用命令行 testrpc –p 9545。
truffle部署合约的端口也改为9545,在truffle-config.js把port参数改为9545。
执行truffle compile、truffle migrate、npm run dev重新编译、部署、启动。
个人认为第一种方式更方便一些。
npm install --save-dev webpack