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

2024-04-02 04:48

本文主要是介绍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 compileMigrate:              truffle migrateTest contracts:       truffle testRun linter:           npm run lintRun dev server:       npm run devBuild 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命令来使用。

这篇关于Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869013

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联