资讯专栏INFORMATION COLUMN

Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建

MasonEast / 1351人阅读

摘要:原文地址石匠的是一个基于开发的一套智能合约开发框架,使用语言编写合约。预期通过和搭建一个只能合约的开发测试环境,部署官方的测试合约进行验证和后续的测试学习。

原文地址:石匠的blog

truffle是一个基于Javascript开发的一套智能合约开发框架,使用Solidity语言编写合约。truffle有一套自动的项目构建机制,集成了开发,测试和部署的各个流程细节,不用开发人员关注。truffle使用说明.

testrpc是基于pyethereum,可以快速的搭建一个模拟以太坊的测试网络,并且预制了若干存有代币的账号,可以直接使用。不像geth是一个真正的以太网网络,testrpc在内存中模拟了以太坊网络,运行速度非常快,很适合做智能合约的开发和测试,待测试完整后再上geth会比较高效。

预期通过truffle和testrpc搭建一个只能合约的开发测试环境,部署官方的测试合约metacoin进行验证和后续的测试学习。

truffle安装

truffle使用npm安装,所以在mac上先安装npm:

brew install npm

然后依次安装truffle和testrpc

npm install -g truffle
npm install -g ethereumjs-testrpc

truffle安装好以后,准备安装默认的metacoin做测试。

truffle版本变更的坑

我当前用的最新版本是:

Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)

按照之前的老版本truffle使用流程进行搭建和部署(比如这里介绍的),大概步骤如下:

1.建立一个独立的目录
2.运行truffle init创建默认的合约项目
3.运行truffle compile编译合约项目
4.运行testrpc
5.运行truffle deploy部署合约到testrpc
6.运行truffle serve启动服务,在localhost:8080启动web服务
7.浏览器打开localhost:8080,就出现了metacoin的主页

按照以上步骤,出现了各种问题,比如:

truffle init生成的contracts目录中并没有生成app目录,而且也没有metacoin的合约sol文件, metacoin已经独立成一个多带带的box,需要多带带安装 truffle unbox webpack(注意:不是truffle unbox 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 /

找各种奇葩问的解决方案的时候,在github官方issue看到了说是官方已经放弃truffle serve,不应该再采用这种方式启动服务了,前面跟着老版本的方法做就很容易入坑了。

操作过程中还遇到不少奇葩问题,就不一一列举了。

正确配置方法

我当前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-py

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命令来使用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95604.html

相关文章

  • 以太是什么 - 以太开发入门指南

    摘要:以太坊是什么以太坊是一个建立在区块链技术之上,去中心化应用平台。运行环境以太坊虚拟机是以太坊中智能合约的运行环境。是由以太坊客户端提供的是典型的开发以太坊时使用的客户端,基于语言开发。 本文首发于深入浅出区块链社区原文链接:以太坊是什么 - 以太坊开发入门指南原文已更新,请读者前往原文阅读 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗...

    tomlingtm 评论0 收藏0
  • 使用truffle-box部署合约到区块链并运行

    摘要:使用部署合约到区块链本文介绍如何使用结合框架部署智能合约是以太坊最流行的开发框架,能够在本地编译部署智能合约,使命是让开发更容易。至此,合约部署以及运行完成。 使用truffle-box部署合约到区块链 本文介绍如何使用truffle结合vue框架部署智能合约 Truffle是以太坊最流行的开发框架,能够在本地编译、部署智能合约,使命是让开发更容易。这里尝试搭建环境,运行第一个区块链程...

    supernavy 评论0 收藏0
  • Web程序员如何入门以太开发

    摘要:加入以太坊生态系统,一起征服世界。数字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了这些东西,我个人会认为你是一个有能力的以太坊开发者 我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集。我们的生态系统正在迅速发展,我认为很多新人都感到不知所措。以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的时间让专业知识充分渗透。我希望人们知道以太...

    SwordFly 评论0 收藏0
  • Web程序员如何入门以太开发

    摘要:加入以太坊生态系统,一起征服世界。数字,字符串等要注意的第二件事是以太坊中的是位。一旦你掌握了这些东西,我个人会认为你是一个有能力的以太坊开发者 我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集。我们的生态系统正在迅速发展,我认为很多新人都感到不知所措。以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的时间让专业知识充分渗透。我希望人们知道以太...

    kidsamong 评论0 收藏0
  • 一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店

    摘要:本文首发于深入浅出区块链社区原文链接一步步教你开发部署第一个去中心化应用宠物商店原文已更新,请读者前往原文阅读今天我们来编写一个完整的去中心化区块链应用本文可以和编写智能合约结合起来看。 本文首发于深入浅出区块链社区原文链接:一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店原文已更新,请读者前往原文阅读 今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本...

    vibiu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<