原文地址:石匠的blognode
truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约。truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个流程细节,不用开发人员关注。truffle使用说明.python
testrpc是基于pyethereum,能够快速的搭建一个模拟以太坊的测试网络,而且预制了若干存有代币的帐号,能够直接使用。不像geth是一个真正的以太网网络,testrpc在内存中模拟了以太坊网络,运行速度很是快,很适合作智能合约的开发和测试,待测试完整后再上geth会比较高效。webpack
预期经过truffle和testrpc搭建一个只能合约的开发测试环境,部署官方的测试合约metacoin进行验证和后续的测试学习。git
truffle使用npm安装,因此在mac上先安装npm:github
brew install npm
而后依次安装truffle和testrpcweb
npm install -g truffle npm install -g ethereumjs-testrpc
truffle安装好之后,准备安装默认的metacoin作测试。npm
我当前用的最新版本是:vim
Truffle v4.1.11 (core: 4.1.11) Solidity v0.4.24 (solc-js)
按照以前的老版本truffle使用流程进行搭建和部署(好比这里介绍的),大概步骤以下:api
1.创建一个独立的目录 2.运行truffle init建立默认的合约项目 3.运行truffle compile编译合约项目 4.运行testrpc 5.运行truffle deploy部署合约到testrpc 6.运行truffle serve启动服务,在localhost:8080启动web服务 7.浏览器打开localhost:8080,就出现了metacoin的主页
按照以上步骤,出现了各类问题,好比:浏览器
truffle deploy运行报错:
No network specified. Cannot determine current network.
解决办法是须要再truffle.js中设置网络参数以下:
module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" // Match any network id } } };
truffle serve运行报错:
TypeError: fsevents is not a constructor
最后再github的官方issue里面找到了一种解决办法,就是强行修改js代码,不适用useFsEvents参数,以下:
vim /usr/local/lib/node_modules/truffle/build/cli.bundled.js // Enable fsevents on OS X when polling isn't explicitly enabled. //if (undef('useFsEvents')) opts.useFsEvents = !opts.usePolling; // If we can't use fsevents, ensure the options reflect it's disabled. //if (!FsEventsHandler.canUse()) opts.useFsEvents = false; opts.useFsEvents = false;
采用truffle serve启动后,原本应该是要在localhost:8080看到metacoin的范例主页的,可是访问后,只能获得:
Cannot get /
我当前mac使用的truffle版本是Truffle v4.1.11,解决问题过程当中,发现了线索,metacoin的项目可使用webpack来安装:
$truffle unbox webpack
以上命令运行成功后,能够看到返回结果:
$truffle unbox webpack Downloading... Unpacking... Setting up... Unbox successful. Sweet! Commands: Compile: truffle compile Migrate: truffle migrate Test contracts: truffle test Run linter: npm run lint Run dev server: npm run dev Build for production: npm run build
从Commands里面能够看到,当前正确的命令是什么,总结以前的操做流程,正确的步骤以下:
1.创建一个独立的目录metacoin 2.运行truffle unbox webpack下载合约项目 3.运行truffle compile编译合约项目(为提升效率,默认只编译修改过的合约文件, 添加"--all"选项,能够强制编译全部文件) 4.运行testrpc(新建一个独立窗口执行) 5.修改truffe.js文件,设置testrpc的地址:localhost和8545 6.运行truffle migrate部署合约到testrpc(此时能够再运行testrpc的窗口看到有日志出现) 6.运行npm run dev启动服务,在localhost:8080启动web服务 7.浏览器打开localhost:8080,就出现了metacoin的主页
出现的metcoin主页是这样的:
到了这里,metacoin的环境就搭建起来了,剩下的能够继续对智能合约进行修改,测试和验证。
testrpc是python开发,使用pip能够很方便的安装和自动处理依赖关系。testrpc项目地址在这里。也能够经过testrpc的官方向导,单独安装。
pip install eth-testrpc
安装的时候遇到如下问题,不管是sudo与否都过不去:
error: [Errno 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/LICENSE'
google后发现是系统版本问题(这里),个人mac是10.13.2 High Sierra版本,而mac从10.11.x(EI Capitan)就引入了SIP机制(System Integrity Protection),运行时会对系统的完整性作保护,不容许改变系统目录,因此须要关掉这个机制,关闭方法:
1.重启电脑,按住Command+R(直到出现苹果标志)进入Recovery Mode(恢复模式) 2.左上角菜单里找到实用工具->终端 3.输入csrutil disable回车 4.重启Mac (若是想从新启动SIP机制重复上述步骤改用csrutil enable便可)
解决问题后,从新pip安装,成功后便可使用testrpc-py命令来使用。