from http://truffleframework.com/docs/getting_started/project

1. 安装node.js 8.11.2 LTS

2. 安装Truffle

$ npm install -g truffle

3. 创建项目

您可以创建项目模板,但对于新手,更好的选择是使用Truffle Boxes—示例应用程序和项目模板。我们将使用MetaCoin box, 该例子创建可在帐户之间转移的token:

$ mkdir MetaCoin
$ cd MetaCoin

下载("unbox") Metacoin box:

$ truffle unbox metacoin

4. 测试,运行solidity测试文件

$ truffle test TestMetacoin.sol

报错,把warning按提示修改后,还有Error:

出错原因是没有切换到到test目录中,切换目录再执行测试命令:

5. 编译智能合约

$ truffle compile

6. 部署智能合约

要部署我们的智能合约,我们需要一个客户端来与区块链进行交互。推荐使用Ganache-cli(Ganache命令行版,原ethereumjs-testrpc), 是一个适用于开发时使用的客户端,是Tuffle套件中的一部分。

6.1 下载安装

$ sudo npm install -g ganache-cli

6.2 修改Tuffle.js文件为以下内容:(port不是7545,在6.3图中看出是8545,估计ganache的默认端口为7545,ganache-cli默认端口为8545)

module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
}
}
};

6.3 启动Ganache-cli,创建区块链

$ ganache-cli

创建了与区块链交互时可以使用的10个帐户(及其私钥),默认发送账户为第一个

6.4 将合约迁移到由Ganache-cli创建的区块链

$ truffle migrate

显示了已部署合约的交易ID和地址

7. 与智能合约进行交互

可以用Truffle console来与智能合约进行交互

$ truffle console

通过以下方式使用Truffle控制台与合同进行交互:

  • 查看部署合约的账户metacoin余额:

    MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[]);}).then(function(value){return value.toNumber()});

  • 查看部署合约的账户以太币余额,合约中定义的一个metacoin值2个以太币:
    MetaCoin.deployed().then(function(instance){return instance.getBalanceInEth(web3.eth.accounts[]);}).then(function(value){return value.toNumber()});
  • metacoin转账:
    MetaCoin.deployed().then(function(instance){return instance.sendCoin(web3.eth.accounts[], );});

  • 查看接收方账户metacoin余额:

    MetaCoin.deployed().then(function(instance){return instance.getBalance(web3.eth.accounts[1]);}).then(function(value){return value.toNumber()});

  • 查看发送发账户metacoin余额:

以上就是用Truffle框架部署智能合约的基本过程。

以太坊开发框架Truffle学习笔记的更多相关文章

  1. windows 以太坊开发框架Truffle环境搭建

    https://www.jianshu.com/p/f7a4de0cba9d 一.安装DApp开发环境 1.1 安装Node.js 我们使用官方长期支持的8.10.0LTS版本,下载64位包装包. 下 ...

  2. 以太坊系列之一: 以太坊RLP用法-以太坊源码学习

    RLP (递归长度前缀)提供了一种适用于任意二进制数据数组的编码,RLP已经成为以太坊中对对象进行序列化的主要编码方式.RLP的唯一目标就是解决结构体的编码问题:对原子数据类型(比如,字符串,整数型, ...

  3. 以太坊的crypto模块--以太坊源码学习

    以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp2 ...

  4. 以太坊系列之六: p2p模块--以太坊源码学习

    p2p模块 p2p模块对外暴露了Server关键结构,帮助上层管理复杂的p2p网路,使其集中于Protocol的实现,只关注于数据的传输. Server使用discover模块,在指定的UDP端口管理 ...

  5. 以太坊系列之三: 以太坊的crypto模块--以太坊源码学习

    以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp2 ...

  6. 以太坊源码学习 – EVM

    学习文档链接:here 一.虚拟机外 主要功能: 执行前将Transaction类型转化成Message,创建虚拟机(EVM)对象,计算一些Gas消耗,以及执行交易完毕后创建收据(Receipt)对象 ...

  7. 以太坊系列之五: p2p的nat模块--以太坊源码学习

    p2p的nat模块 该模块相对比较简单,因为nat的真正实现并不在此模块,主要是使用了第三方的nat-upnp和nat-pmp来实现真正的穿透(端口映射). 对外公布的接口 ```go // An i ...

  8. 如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

    很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取 ...

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

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

随机推荐

  1. valgrind 使用入门

    近期在学习使用valgrind 来定位性能问题,记录一下整个操作过程以及涉及到的工具 一般在机器上都会预装valgrind 工具 使用callgrind 工具检查程序的调用情况,例如使用valgrin ...

  2. swipe轮播插件零基础实用

    此篇博客整理了常用的轮播效果,适用于所有开发人员 swipe是当下相对而言较好用的轮播插件,下面是博主整理的demo源代码,可直接上手(备注:需自己手动swipe所需的j和css) 此段代码总共是有三 ...

  3. hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3)

    #include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> # ...

  4. 为GitHub项目添加协议

    解决方法 如果一开始在GitHub上创建仓库时没有添加协议,可以用以下方式来重新添加相关的协议: 打开GitHub上的某个仓库,点击Create new file: 在新建文件的页面上,输入文件名LI ...

  5. [題解](水/并查集)luogu_P2170選學霸

    很簡單的水題,因為智障沒有A所以發篇博客 同樣的題:luogu_P1455 搭配購買 用并查集維護一下所有實力相等的人的size,然而你可以選多個size......,於是跑個背包就行了,只要注意一下 ...

  6. JS脚本不能执行

    这段时间在做前端的动态页面,出了很多问题,因为js平时用的很少,所以花了不少无用功. 其中有两点一定要注意: 1.当js中有语法错误时,js脚本会无法执行. 2.当js脚本中有未定义的变量时,后边的语 ...

  7. 海德汉S3078长度计

    手头有一款海德汉S3078的增量式长度计. 图三为长度计引出线缆的针脚编号,其中,Up和传感器Up短路,0V与传感器0V短路,其他为输出信号线缆.时序如图: Ua1和Ua2两个信号的相位,可以得出长度 ...

  8. ES-windos环境搭建(1)

    前言 由于elasticsearch为Java开发,所以它还依赖Java JDK环境,并且对版本还有要求,需要1.8(含)以上.我们首先来配置Java JDK环境. JDK简介 JDK是Java语言的 ...

  9. jQuery选择器之样式二

    prop()方法和attr()类似,但是HTML5规定有一种属性在DOM节点中可以没有值,只有出现与不出现两种,例如: <input id="test-radio" type ...

  10. c语言中的赋值

    int s,i,len,err=0 这个是只给err赋了值还是这四个都有?