区块链(九)用Truffle框架运行一个“Hello World!”智能合约

创建工程目录

一个文件夹HelloWorld,来做为你的工程根目录。

mkdir HelloWorld

工作目录HelloWorld目录下,执行truffle初始化动作

truffle init


查看目录结构

tree/f


目录结构简单说明如下:

contract/ - Truffle默认的合约文件存放地址。

migrations/ - 存放发布脚本文件

test/ - 用来测试应用和合约的测试文件

truffle.js - Truffle的配置文件

修改配置文件

删除truffle.js,修改truffle-config.js

module.exports = { // See // to customize your Truffle configuration!

    networks: {

    development: {

      host: '127.0.0.1',

      port: 8545,

      network_id: '*' // Match any network id

    }

  }

};

新建新合约

在./contract目录下创建一个自己的合约文件Greeter.sol。(注意加粗部分,已经调成最新)

pragma solidity ^0.4.18;

contract Greeter       

{

    address creator;   

    string greeting;   

    constructor (string _greeting) public 

    {

        creator = msg.sender;

        greeting = _greeting;

    }


    function greet() public constant returns (string)         

    {

        return greeting;

    }


    function setGreeting(string _newgreeting) public

    {

        greeting = _newgreeting;

    }


    /**********

    Standard kill() function to recover funds

    **********/


    function kill() public

    {

        if (msg.sender == creator)

            selfdestruct(creator);  // kills this contract and sends remaining funds back to creator

    }

}

新建发布脚本

在./migrations/目录下新建一个文件:2_deploy_contracts.js,增加发布代码。

var Greeter = artifacts.require("./Greeter.sol");

module.exports = function(deployer) {

  deployer.deploy(Greeter,"Hello, World!");//"参数在第二个变量携带"

};

编译

进入到工程根目录./HelloWorld目录下,进行编译:

truffle compile


启动你的客户端

如果之前没有启动RPC客户端的话,则需要启动之前安装好的EthereumJS RPC客户端。如果已启动的则忽略此步。

ganache-cli


部署合约(migrate)

执行部署命令(truffle migrate)

truffle migrate


注意:此处的下边第二个箭头上边的那一行0x857f...bfb9是合约部署的地址,在运行的时候需要。

如果出错,错误截图如下:则请返回前边去修改truffle-config.js的配置,增加网络部分的配置。

注意:如果修改的话,需要重新编译,再部署。

TRUFFLE测试环境运行合约

Truffle提供了一种更加简单的方式,通过交互式控制台来与你的那些准备好的合约进行交互。

truffle console

一个基本的交互控制台,可以连接任何EVM客户端。如果你已经有了自己的ganache或者geth等EVM的本地环境,那么就可以使用truffle console来交互,所以如果你已经有一个现成的小组共享的开发用EVM,那么使用这个没错。

truffle develop

一个交互控制台,启动时会自动生成一个开发用区块链环境(其实我认为它与ganache就是一个底层实现机制,都是默认生成10个账户)。如果你没有自己的EVM环境的话,直接使用truffle develop非常方便。

truffle console

输入Greeter智能合约命令,显示打印出一个json结构,展示了它的各种属性内容。

根据你的Greeter智能合约地址,运行Greeter智能合约命令:

注意:寻找合约地址:

./build/contracts/Greeter.json 找到下面这段

GETH正式环境运行合约

启动GETH环境

本节假设GETH环境已安装好了。如果还没有安装的同学,可参考之前笔记的描述步骤。

然后在IDE内部打开一个terminal,启动GETH的EVM环境。

geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpcport "8486" --port "30304" --networkid "29382" console


GETH 中是通过abi来注册合约对象的。

首先我们找到./build/contracts/Greeter.json中的abi的value:

把abi取出来在线压缩, 并在geth终端 赋值给abi变量

var abi =[{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newgreeting","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];

重新部署智能合约到Geth环境

启动一个新的命令窗口,(需要修改truffle-config.js的网络属性)

module.exports = { // See // to customize your Truffle configuration!

    networks: {

    development: {

      host: '127.0.0.1',

      port: 8486,

      network_id: '*' // Match any network id

    }

  }

};

不修改的话会报如下错误:

truffle migrate

同时需要启动geth的解锁第一个账户personal.unlockAccount(eth.accounts[0]),而且miner.start()进行挖矿确认。部署成功截图。

获得Greeter的地址为 0xe75d59d4c2b9094fdb0a36df85d1d563af768f08

切换到GETH环境下,利用api和智能合约地址(你自己Greeter智能合约的地址哦)注册合约对象。

var abi =[{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newgreeting","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];

var HelloWorld = eth.contract(abi).at('0xe75d59d4c2b9094fdb0a36df85d1d563af768f08')

HelloWorld.greet()

成功截图:

在钱包中查看该部署的合约

打开钱包etherum-wallet.

点击contracts,再点击watch contract[因为已经部署过了)

shur

依次输入greeter的address,名称,abi,点击OK。

合约已经展示出来了。点击进去,可以操作。


总结

其中最主要的还是truffle-config.js的配置修改,以便可以连上eth网络,不管是ganache-cli还是truffle develop或者以太坊私链geth

参考:

第四课 以太坊开发框架Truffle从入门到实战

Solidity的Truffle框架实战(手把手)

精解】开发一个智能合约

以太坊开发演练,Part-1:智能合约

以太坊开发演练,Part-2:Truffle,Ganache,Geth 和 Mist

truffle 官方教程,包括配置文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容