一、概述

运行环境:Node.js、npm、Truffle、Solidity等

  root@keke:~/go-ethereum# node -v
v8.9.4
root@keke:~/go-ethereum# npm -v
5.7.1

solidity 安装

# npm install -g solc --save
安装solidity的开发框架Truffle4
# npm install -g truffle --save

装开发客户端,在本地模拟以太坊运行环境

当开发基于Truffle4的应用时,我们推荐使用EthereumJS TestRPC。它是一个完整的在内存中的区块链,仅仅存在于你开发的设备上。它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。它同时还是一个支持自动化测试的功能强大的客户端。Truffle4充分利用它的特性,能将测试运行时间提速近90%。

EtherumJS TestRPC安装好的截图如下,红框内的为RPC Server地址:http://127.0.0.1 ,在后续配置中将会用到。

项目初始化

localhost:# mkdir -p truffle4-demo
localhost:# cd truffle4-demo
localhost:/root/truffle4-demo # truffle init

项目目录结构如下:

root@keke:~/truffle4-demo# tree -L 2

.

├── contracts

│   └── Migrations.sol

├── migrations

│   └── 1_initial_migration.js

├── test

├── truffle-config.js

└── truffle.js

3 directories, 4 files

新建合约

root@keke:~/truffle4-demo# cat contracts/demo.sol
pragma solidity ^0.4.17; contract Test{
function sayHi() returns (string){
return "hello world";
}
}

修改migrations/1_initial_migration.js 如下:

root@keke:~/truffle4-demo# cat migrations/1_initial_migration.js
var Migrations = artifacts.require("./Migrations.sol"); / /加入自定义合约 var demo = artifacts.require("./demo.sol");
module.exports = function(deployer) {
deployer.deploy(Migrations);
//部署引入自定义合约
deployer.deploy(demo);
};

修改truffle.js配置,信息如截图所示:

networks: {
development: {
host: "localhost",
port: 7545,
network_id: "*"
}
}

编译、运行合约:

root@keke:~/truffle4-demo# truffle  compile   #此时会在./build目录下生成编译后的文件,格式为:*.json。
root@keke:~/truffle4-demo# truffle migrate #部署合约至开发客户端上
truffle migrate --reset来强制重编译并发布所有合约

控制台调用合约:

root@keke:~/truffle4-demo# truffle console
truffle(development)> Demo.deployed().then(function(instance){return instance.sayHi.call();});
'hello world'

NodeJS集成Truffle4

在NodeJS环境使用Truffle4合约,需要手动集成这Web3、truffle-contract两个模块。在集成前,我们需要创建工程的npm包管理环境,首先进入truffle4-demo工程目录,使用npm init来初始化工程的npm包管理环境:

root@keke:~/truffle4-demo# npm init     #生成json配置文件

安装truffle-contract包(安装truffle-contract包时,会自动安装Web3,故无需再次安装web3包):

root@keke:~/truffle4-demo# npm install truffle-contract --save

编写Node.js调用合约代码,在项目根目录下创建testWeb3.js文件

//要在NodeJS中使用Truffle,我们要先引入web3
var Web3 = require('web3');
var contract = require("truffle-contract"); //http://localhost:7545地址为开发客户端地址
var provider = new Web3.providers.HttpProvider("http://localhost:7545"); //使用truffle-contract包的contract()方法
//请务必使用你自己编译的Demo.json文件内容
var Demo = contract(
**此处输入为./build/contracts/Demo.json文件中的内容**
); Demo.setProvider(provider); //没有默认地址,会报错
//UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): Error: invalid address
//务必设置为自己的钱包地址,如果不知道,可通过开发者客户端查看 Demo.defaults({
from : "0x396FE5d2FA697F62C2C2A8bb48811E87A72D3d03"
}); var instance; Demo.deployed().then(function(instance){
return instance.sayHi.call();
}).then(function(result){
console.log(result);
});

运行合约:

root@keke:~/truffle4-demo# node testWeb3.js

'hello world'

以太坊(Ethereum)智能合约NodeJS/Web3 使用的更多相关文章

  1. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  2. 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币

    前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...

  3. 以太坊solidity智能合约-生成随机数

    Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...

  4. 以太坊solidity智能合约语言学习资源整理

    暂时看到篇文章写的不错,先收集下来,后面有机会自己也整理一个 Solidity语言学习(一)Solidity语言学习(二)——Solidity的安装与编译Solidity语言学习(三)——智能合约编程 ...

  5. 以太坊系列之十七: 使用web3进行合约部署调用以及监听

    以太坊系列之十七: 使用web3进行智能合约的部署调用以及监听事件(Event) 上一篇介绍了使用golang进行智能合约的部署以及调用,但是使用go语言最大的一个问题是没法持续监听事件的发生. 比如 ...

  6. (转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘

    什么是以太坊(Ethereum) 以太坊(Ethereum)是一个基于区块链技术,允许任何人构建和使用去中心化应用的区块链平台.像比特币一样,以太坊是开源的,并由来自全世界的支持者们共同维护.与比特币 ...

  7. (转)以太坊(Ethereum)全零地址(0x000000...)揭秘

    最近,一位小伙伴向我咨询问题,说他发现了一个诡异的现象.以太坊的区块链中居然有全是0的地址:0x0000000000000000000000000000000000000000 这究竟是怎么回事儿呢? ...

  8. 区块链入门到实战(23)之以太坊(Ethereum) – 虚拟机架构

    以太坊(Ethereum)网络中,定义了一组通用协议用于支持智能合约的运行,其核心便是以太坊(Ethereum)虚拟机. 下图解释了该架构: 开发人员使用Solidity等开发语言开发智能合约 源程序 ...

  9. 区块链入门到实战(22)之以太坊(Ethereum) – 账号(地址)

    作用: 外部账号 – 用户使用的账号,账户余额. 合约账号 – 智能合约使用的账号,每个智能合约都有一个账号,内存和账户余额 以太坊(Ethereum)网络中,有2种账号: 外部账号 – 用户使用的账 ...

随机推荐

  1. 第一个Struts2实例之hello world!

    Struts官网:http://struts.apache.org/ Struts2框架预先实现了一些功能    1:请求数据自动封装    2:文件上传的功能    3:对国际化功能的简化    4 ...

  2. canvas简单下雨特效

    前面做了两个简单的效果,这次就来个下雨的效果 思路简单的说一下 随机在屏幕中的位置画雨滴,moveTo(x,y) 雨滴的长度就是lineTo(x,y+len) 每次重新绘制页面,就能达到下雨的效果了 ...

  3. BZOJ3064 Tyvj 1518 CPU监控 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3064 题意概括 一个序列,要你支持以下操作: 1. 区间询问最大值 2. 区间询问历史最大值 3. ...

  4. 045 介绍UDF,以及完成大小写的转换

    一:概述 1.UDF 用户自定义函数,用java实现自定义的需求 User Defined Function-----UDF. 2.UDF的类型 udf:一进一出 udaf:多进一出 udtf:一进多 ...

  5. C++语言实现-邻接表

    图的邻接表实现 邻接表是图的一种链式存储结构.主要是应对于邻接矩阵在顶点多边少的时候,浪费空间的问题.它的方法就是声明两个结构.如下图所示: 先来看看伪代码: typedef char Vertext ...

  6. python str,list,tuple转换

      1. str转listlist = list(str) 2. list转strstr= ''.join(list) 3. tuple list相互转换tuple=tuple(list)list=l ...

  7. 洛谷AC破百题纪念!

  8. presistence

    每一个神都是从弱到强的,像继科,在2011年之前,人很浮躁,球不稳,只是偶尔打出高质量而已:在输了无数场球之后,球厚了,人也定了(刘国梁评价),才抓住的机会成就了最快大满贯,并且创造了之后的辉煌,继科 ...

  9. IdentityServer4-前后端分离之Vue(七)

    前言 之前文章讲到如何使用Node.js+Express构建JavaScript客户端,实现前后端分离.本节将介绍如何使用Vue实现前后端分离,文中介绍Vue的知识比较基础,适合新手学习. 一.搭建V ...

  10. js算法初窥03(搜索及去重算法)

    前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...