原文地址:石匠的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的主页

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

  1. truffle init生成的contracts目录中并没有生成app目录,而且也没有metacoin的合约sol文件, metacoin已经独立成一个单独的box,需要单独安装 truffle unbox webpack(注意:不是truffle unbox metacoin)。

  2. 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
    }
    }
    };
  3. 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;
  4. 采用truffle serve启动后,本来应该是要在localhost:8080看到metacoin的范例主页的,但是访问后,只能得到:

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

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

正确配置方法

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

Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建的更多相关文章

  1. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明

    以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明 为了让你的Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3.对象.底层实 ...

  2. 以太坊智能合约开发工具 Truffle 入门1

    Truffle是以太坊(Ethereum)智能合约开发的瑞士军刀,小巧好用,上手简单. 本篇文章主要展示如何用Truffle 开发第一个Ethereum智能合约. 1.准备工作:(本人针对window ...

  3. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  4. 如何通过以太坊智能合约来进行众筹(ICO)

    前面我们有两遍文章写了如何发行代币,今天我们讲一下如何使用代币来公开募资,即编写一个募资合约. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还 ...

  5. Go语言打造以太坊智能合约测试框架(level1)

    传送门: 柏链项目学院 Go语言打造以太坊智能合约测试框架 前言 这是什么? 这是一个基于go语言编写的,自动化测试以太坊智能合约的开发框架,使用此框架,可以自动化的部署合约,自动测试合约内的功能函数 ...

  6. Go语言打造以太坊智能合约测试框架(level3)

    传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...

  7. 以太坊智能合约Hello World示例程序

    简介 以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开 ...

  8. 使用Remix编译和部署以太坊智能合约

      Remix 是一個开源的 Solidity 智能合约开发环境,提供基本的编译.部署至本地或测试网络.执行合约等功能.Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于 ...

  9. 以太坊智能合约介绍,Solidity介绍

    以太坊智能合约介绍,Solidity介绍 一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. Storage contract SimpleSt ...

随机推荐

  1. criterions的选择

    criterions分为几类,其中有classification criterions与regression criterions.classification criterions是针对离散的,re ...

  2. http 的request和response 在servlet的应用文件下载

    一)response 我们通过浏览器访问网站的时候,处理响应的是response. 它由三部门组成:响应行.响应头.响应体 作用:往浏览器写东西. 1)响应行 格式:协议/版本  状态码 状态码说明. ...

  3. 静态库打包——.a和.framework文件

    参考链接 步骤:适配所有的模拟器和真机 ——生成.a文件 <1>建一个静态库工程 <2>生成.a文件(注意添加类.h和.m文件) 同理:接入任意款真机,同上述操作,生成真机的. ...

  4. Quartz.NET+Topshelf 创建Windows服务

    由于项目开发中经常会有定时任务执行的需求,所以会第一时间就想到 windows 服务 的方式,但是做过开发的同学都知道windows服务不利于调试,安装也麻烦: 并且有开源的作业框架Quartz.NE ...

  5. 使用CURL模拟表单上传文件

    //以下代码适合PHP7.x PHP5.6$file = new CURLFile('./127.zip','application/octet-stream');$file->setMimeT ...

  6. C语言学习笔记—code:blocks工具debug调试异常

    C语言开发工具:code:bolocks17.12版本踩坑记录: 一.下载codeblocks后,安装完成,创建第一个项目在构建mian主函数时构建报错: Goto "Settings-&g ...

  7. x01.calc: 编程语言

    想写终极程序,大都去写操作系统或编程语言了.编程语言可以极其复杂如C,也可以极简,只处理加减乘除如 calc. 1. 词法分析 %{ #include <stdio.h> #include ...

  8. linux 虚拟机 磁盘空间压缩

    /usr/bin/vmware-toolbox-cmd disk list /usr/bin/vmware-toolbox-cmd disk shrink / init 0

  9. PostgreSQL调整内存与IO的参数说明

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 [作者:高健@博客园 luckyjackgao ...

  10. 6-[HTML]-标签属性

    1.HTML标签属性 HTML标签可以设置属性,属性一般以键值对的方式写在开始标签中.如 <div id="i1">这是一个div标签</div> < ...