truffle构建以太坊应⽤并测试第⼀个helloworld智能合约
最近因为国家对区块链⼜重视起来了,相信今年年底到明年年初会是⼀个区块链的新的爆发点,也是碰巧学习了⼀下以太坊构建区块链应⽤,以前都是简单的了解,并没有实际动⼿演练。今天趁机会也学习⼀下区块链,同时也学习了⼏个新名词。⽐如账户,私钥,智能合约(smart contract),编译合约(compile),迁移合约(migrate),测试合约(test)。
truffle是⼀个nodejs的库,他可以构建node版本的以太坊应⽤,所以我们的机器需要安装node,⽽且版本需要8以上。truffle,可以直接通过npm install -g truffle的⽅式来安装,很⽅便。
安装了node,会默认带上npm包管理⼯具,我们为了让国内下载包更快,可以更换国内阿⾥的镜像地址。具体操作如下所⽰:
因为我已经提前安装并且设置好了淘宝的镜像,所以这系统⾥显⽰如下:
下⾯就开始安装truffle了,他的安装很简单,但是为了在所有的命令⾏下使⽤,最好使⽤全局的⽅式安装。
npm install -g truffle
安装了truffle,我们可以验证⼀下。
理论上,安装了truffle就可以了,整个实验也就够了,但是有的也推荐安装geth,ganache-cli(⽼版本叫ethereumjs-testrpc),我觉着没有必要,因为truffle develop命令就可以开启以太坊客户端。我们不妨也安装⼀下ganache-cli,或者ethereumjs-testrpc,如下所⽰,当我们安装ethereumjs-testrpc的时候,系统提⽰ethereumjs-testrpc已经被重命名为ganache-cli了,所以安装ganache-cli就可以了。
npm install -g ganache-cli
当我们安装完了ganache-cli,我们可以直接在命令⾏下输⼊命令ganache-cli,就可以开启以太坊的客户端。
启动了客户端,开启了8545端⼝,这种⽅式开启以太坊客户端,没有进⼊⼀个交互模式,⽽我们通过truffle develop命令启动,同样会开启类似的客户端,并且打印信息⼏乎⼀样,不同的是账户和秘钥每次都不同。但是开启的端⼝是⼀样的,⽽且truffle develop可以进⼊交互模式,可以在命令⾏下进⾏compile编译合约与migrate迁移合约,还可以进⾏合约调⽤。前提是需要进⼊⼀个truffle构建的以太坊⼯程。
solidity提供了很多truffle的⼯程盒⼦box,像webpack,react,metacoin,pet-shop等等,我们可以在官⽹上看到:
官⽅说通过命令truffle unbox react或者truffle unbox metacoin可以构建项⽬,意思是会⾃动下载这些盒⼦到本地,但是最近试了,下载失败:
甚⾄直接通过初始化的⽅式也不对:
mkdir react
cd react
truffle init
truffle踩坑也是够奔溃的,到此,以为⼭重⽔复疑⽆路,truffle可以放弃了。但是好像可以通过git clone
将github上的react-box下载到本地,因为⽆论是truffle unbox react还是truffle init得到的⼯程都是源代码,⽽且需要⼈为编译和迁移合约。
克隆下来的代码结构如下,和truffle unbox react的结构还是⼀样的。
⾄此,我们的准备⼯作算是做完了,其实本⽂helloworld⽰例才刚刚开始。前⾯⼀堆介绍基本都是在踩坑。因为js,甚⾄node的框架更新太快,⽽且以太坊本⾝也在不断迭代,出现问题也可以理解。
到这⾥,我们可以在项⽬⽬录下的命令⾏中运⾏truffle develop,进⼊truffle交互式,来感受⼀下客户端,并且和ganache-cli做个对⽐:
开启的端⼝是8545,同样创建了10个临时账户以及10个秘钥。所以说前⾯如果仅仅安装了truffle,也可以完成本次实验,没有必要再安装ganache-cli。
我们需要⼿动增加⼀个合约helloworld.sol, 我们可以进⼊contracts⽬录,然后通过命令创建⼀个helloworld.sol,⽽不是直接新建⼀个helloworld.sol⽂件。如下所⽰:
cd contracts
truffle create contract HelloWorld
接着,我们可以⼿动在notepad++中编辑HelloWorld.sol⽂件,试着编写⼀个最简单的sayHello⽅法。但是这⾥必须注意使⽤Solidity 的语法。
智能合约编写完毕,我们就需要编译了,我们回到truffle develop的交互式界⾯中,输⼊compile,或者直接在react-box⽬录下的命令⾏中输⼊truffle compile,也可以编译合约。
智能合约⼀下⼦编译成功,是不是很开⼼啊,这得益于踩坑啊,这⾥HelloWorld.sol内容中的sayHello,有⼏处需要注意,⾸先是必须声明式public的,⽽且需要pure修饰,最后返回类型string后⾯还需要加上
memory,⽐如returns (string memory) 。
接着,我们需要迁移合约即migrate,我们进⼊migrations⽬录,按照创建合约的⽅法新建⼀个HelloWorld的migration,这⾥也是有坑的,需要创建⼀个字母数字即alpha-numeric名称的迁移⽂件。他会⾃动在migration⽂件前⾯加上数字,构成⼀个数字开头的⽂件。这⾥需要注意⼀下。
cd migrations
truffle create migration deploy_helloworld_3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。