zoukankan      html  css  js  c++  java
  • Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建

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

    到了这里,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命令来使用。

  • 相关阅读:
    互联网成为基础设施,数据成为生产资料,计算成为公共服务。让计算成为人类的能力,让数据成为世界的财富
    数据本没有价值,就像你留在地上的脚印,直到你有计算能力去处理才会产生价值。计算,如同其他基础设施一样,能够把沉寂的数据“沙子”变成经济、产业、财富的“金矿”。
    100多年前,铁路在美国成为基础设施,为美国带来翻天覆地的变化。今天互联网作为基础设施,对中国未来发展的推动绝对不会亚于当年铁路给美国带来的变化。
    HDU--1060
    素数
    欧几里德算法与扩展欧几里德算法
    HDU--1164
    挨踢人生路
    HDU题目分类
    HDU--2087
  • 原文地址:https://www.cnblogs.com/bugmaking/p/9208449.html
Copyright © 2011-2022 走看看