最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上不断地记录我的成长过程。
https://steemit.com/cn/@speeding/smart-contract-development0
Ethereum上的智能合约开发对Windows不太友好,培训课上的所有例子都是运行在老师提前安装好的一个Ubuntu虚拟机上,为了加深对课程的印象,我在Windows上把Truffle等安装过程跑了一遍。
一、几个术语介绍
1、Solidity
Solidity是在进行以太坊智能合约(Smart Contract)开发时最流行的一种语言,Solidity语法与C++和Javascript比较像,通过Solidity编译器,可以把高级语言编译成跑在以太坊虚拟机(EVM)上的低级语言,可以极大地减轻智能合约编程的工作量。
2、Truffle
以太坊上的智能合约要与数字资产进行频繁交互,编程过程中稍微考虑不周,会造成漏洞,很可能造成用户的巨大财产损失,所以Solidity程序都要经过严格的单元测试和集成测试,最后才能部署到正式的以太坊网络中。
而Truffle框架是一个非常成熟的框架,可以方便地编译、运行和测试一个合约,整个过程都在一个以太坊的测试网络中搞定,不用等待漫长的挖矿过程就能快速看到测试结果,节省了很多开发成本。
3、TestRPC和Ganache
geth是一个老牌的以太坊钱包客户端,搞程序开发的不能一上来就在geth上测试,每次消耗的gas都让人受不了,更别说还需漫长的挖矿时间等待了。而TestRPC就是一个在本地使用内存模拟的一个以太坊环境,还提供丰富的命令行,可以查询以太坊的状态。
后来TestRPC改名为Ganache CLI,成为truffle中的一个重要成员,而Ganache就专指带图形界面的程序,它需要运行在Windows 10上,不需要记忆一大堆复杂的字符命令。
4、vscode
5、web3.js
web3.js是以太坊提供的一个javascript库,提供了一系列与区块链交互的Javascript对象和函数,可以调用智能合约、查看网络状态、本地账户、交易信息、区块信息等等,写前端程序或测试用例也要用到它。
下面进入安装过程,最好的参考材料仍是Truffle的官方网站。
http://truffleframework.com
二、安装Node.js
三、安装Truffle
npm install -g truffle
四、创建一个新项目
mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin
老的truffle版本要用 truffle init 命令来新建项目,现在可以直接从网上下载一个现成的项目(称为box),执行完truffle unbox命令后,在d:\MetaCoin文件夹之下就有三个子文件夹和几个文件。
D:\MetaCoin
│ truffle-config.js
│ truffle.js
│
├─contracts
│ ConvertLib.sol
│ MetaCoin.sol
│ Migrations.sol
│
├─migrations
│ 1_initial_migration.js
│ 2_deploy_contracts.js
│
└─test
metacoin.js
TestMetacoin.sol
五、安装vscode
六、安装ganache
1、Ganache
图形界面的ganache访问网址: http://truffleframework.com/ganache/
下载的安装包是appx格式,需要Windows 10系统的支持,其默认端口为7545。
2、Truffle develop
另外还有一种客户端可供选择,就是truffle develop,默认端口为9545。
在运行truffle develop命令时,可能会遇到命令无法执行的问题,这是truffle.js的名字冲突造成的,可用以下的一种办法解决:
这个客户端的功能还比较弱,可以用.help看帮助,用.exit退出。
3、Ganache CLI
如果机器是Windows 7,又不喜欢功能较弱的truffle develop,则可以使用Ganache CLI,它其实就是大名鼎鼎的TestRPC,其安装过程非常简单。
npm install -g ganache-cli
使用它的测试网络,我们还需要修改truffle.js文件,配置一下网络参数。
module.exports = {
networks: {
development: { //部署在开发网络上
host: "127.0.0.1",
port: 8545,
network_id: "*" // Match any network id
}
}
};
带图形界面的Ganache的默认端口是7545,Ganache-cli的默认端口是8545,truffle develop的默认端口是9545。truffle.js中的端口参数要与以太坊客户端的端口保持一致。
启动ganache-cli的测试网络:
ganache-cli
七、编译和部署
此时应该可以成功编译并部署合约了。
truffle compile
truffle migrate
在Ganache的图形界面上可以看到新挖出的区块和各笔交易的详细信息。
八、单元测试
运行下面命令行即可进行单元测试。
truffle test
在test子文件夹下,需要编写相应的单元测试文件,有.js和.sol两种编写方式,各有优缺点。
九、web3交互
写一个程序肯定会遇到各式各样的问题,图形界面的ganache查询区块和交易状态非常方便,如果用程序或命令行来操作,就需要用到强大的web3.js。
truffle console
在 truffle(development)> 之后可以输入各种web3的指令,最重要的对象是web3.eth,详细的说明见文档:
https://github.com/ethereum/wiki/wiki/JavaScript-API
MetaCoin.deployed().then(contract => {meta = contract})
meta.getBalance.call('0x24ed8dfbc1457944e27437308a773ba3d38dd66e')
十、boxes
从零构建一个智能合约的难度非常大,truffle中提供了一些boxes,这些boxes包含一些有用的模块、Solidity合约以及前端代码等,在此基础上开发会省不少力气。
http://truffleframework.com/boxes
列在第一位的box是react框架,运行truffle unbox react 即可下载所有的源代码,这里面提供了一个叫做SimpleStorage的合约,可以当作Hello World来使用。运行下面命令之后,会打开浏览器访问http://localhost:3000,获取智能合约中保存的数据。
truffle compile
truffle migrate
npm run start
提示:如果你用TestRPC或Ganache-cli,需要修改getWeb3.js中的provider为http://127.0.0.1:8545。
上述过程只是跑通了各种软件在Windows上的安装、部署和测试过程,真正让人捉急的是单元测试无法通过时,不知道如何去定位BUG的位置,我得抓紧去做第五课的作业了。
--- END ---