一、准备工作
本教程所用环境:windows 7 64bits
安装geth: https://ethfans.org/wikis/Ethereum-Geth-Mirror
安装Mist钱包浏览器: https://ethfans.org/wikis/Mist-Mirror
安装truffle开发框架:
首先要安装nodejs: https://nodejs.org/en/
Cmd命令安装truffle: npm install -g truffle
二、实践过程
1.geth创建私有链,采用rpc方式
geth –datadir chain –rpc
以太坊私有链沿用上一篇文章《手把手教你搭建以太坊私有链》
2.启动mist钱包浏览器
mist -rpc http://127.0.0.1:8545
注:geth创建的私有链,其默认端口就是8545
该命令会拉起带界面mist钱包浏览器,如下:
3.Geth attach并解锁帐号0
geth attach ipc:\.\pipe\geth.ipc
然后用命令personal.unlockAccount解锁帐号0
4.Truffle启动智能合约
首先下载智能合约代码: https://github.com/lspbeyond/eth_terminator
注:非常勿扰电影里有个分歧终端机,这个智能合约的点子来自与此,智能合约代码细节本篇不展开讲,会在后续文章中单独讲智能合约工程和solidity
Cmd进入eth_terminator代码所在目录,如下命令编译智能合约并迁移到私有链网络中:
truffle migrate --network ourTestNet
注:你可能奇怪上面的命令是如何跟私有链网络关联起来的,奥妙在truffle-config.js 的ourTestNet配置,如下:
module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// for more about customizing your Truffle configuration!
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
ourTestNet: {
host: "127.0.0.1",
port: 8545,
network_id: "*" // Match any network id
}
}
};
上述命令执行完毕后,迁移会处于如下卡住状态,原因是没有启动挖矿。
Using network 'ourTestNet'.
Running migration: 1_initial_migration.js
Replacing Migrations...
在geth attach的窗口启动挖矿miner.start(),通过miner.stop()停止挖矿。
5.进入控制台,获取合约地址和描述
truffle console --network ourTestNet
然后在控制台下分别获取合约地址及合约ABI描述
truffle(ourTestNet)> terminator.address
'0x97f16374aea6568a405441bbc0740b59792e201e'
truffle(ourTestNet)> JSON.stringify(terminator.abi)
'[{"constant":true,"inputs":[],"name":"addrWinner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrPlayer1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addrPlayer2","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"GameDrawEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"winner","type":"address"}],"name":"GameOverEvent","type":"event"},{"constant":false,"inputs":[{"name":"chosen","type":"uint8"}],"name":"playGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]'
6.在mist中操作合约
在mist中"新增观察合约",如下:
然后在弹出框输入合约地址、合约名称、合约描述,合约名称随意,如下:
如下进入合约详情页面,左边是合约读信息,右边是合约写信息:
我们的合约非常简单,只有一个Play Game写操作,其中参数Chosen的值0,1,2分别表示锤子、剪刀、布。
你可以选择Main Account,Chosen选择0,点击执行;
再选择Account 1, Chosen选择1,点击执行;
这个时候左边合约读信息并没有发生变化,原因是我们没有启动挖矿。
启动挖矿后,我们就可以看到Main Account获得了胜利(锤子赢了剪刀),如下:
三、小结
做个形象一点的类比,如果把智能合约程序和Web端程序类比,那么:
Geth创建的私有链——nginx的Web服务器
Mist浏览器——Chrome浏览器
Truffle开发框架——Dreamweaver
本教程只介绍了如何动手运行一个智能合约,如果想进一步学习编写智能合约,需要学习solidity语言以及多看智能合约源码,比如前段时间很风靡的加密猫游戏,《教程 | 如何在Ethereum上编写自己的CryptoKitties风格的游戏》