下面教程是打算在尽量牵涉可能少的以太坊的相关工具,主要使用web3.js这个以太坊提供的工具包,来完成合约的编译,发布,合约方法调用的一整个流程。一方面来了解以太坊开发到底需要什么,另一方面来对web3.js的API有个基本的了解。由于所有其它工具都或多或少的是对web3.js的底层函数的包装,所以对web3.js使用流程有个认识之后,也能更好的入门,使用相关的工具。
1. 准备工作
1.1 安装Node.js
由于我们要使用web3.js[1]。这里使用Node来集成web3.js模块(当然,你还可以使用其它的方式)。你可以通过参考官网文档安装[2]。
1.1.1 Ubuntu
如果你使用ubuntu,可以使用下述命令:
//安装Node sudo apt-get install nodejs
1.1.2 MAC
如果你使用Homebrew,可以使用下述命令:
//安装Node brew install node //安装Node的包管理器 brew install node
1.1.3 安装检查
安装成功后,可以查看下当前的版本,确认正常安装:
$ node -v v7.2.0
1.2 以太坊的节点
由于整个合约代码的执行需要一个虚拟机环境,所以在开始之前,我们不得不安装一个实现了以太坊虚拟机的节点。
可以选择一个轻量级的节点,比如EtherumJS TestRPC,它是一个完整的在内存中的区块链仅仅存在于你开发的设备上。它在执行交易时是实时返回,而不等待默认的出块时间,这样你可以快速验证你新写的代码,当出现错误时,也能即时反馈给你。
npm install -g ethereumjs-testrpc
安装好后,你就可以通过testrpc命令来启动了,启动与大多数以太坊节点一样,运行在localhost:8545。
如果你安装geth这样的客户端也是可以的。
1.3 Web3的支持
安装web3的模块[1]:
npm install web3
2. 合约编译
2.1 一个简单的合约
我们打算用来测试的合约如下:
add()方法用来返回输入两个数据的和,并会对add()方法的调用次数进行计数。需要注意的是这个计数是存在区块链上的,对它的调用需要使用transaction。
getCount()返回add()函数的调用次数。由于这个函数不会修改区块链的任何状态,对它的调用使用call就可以了。
2.2 编译合约
由于合约是使用Solidity编写,所以我们可以使用web3.eth.compile.solidity来编译合约[3]:
如果编译成功,结果如下:
3. 发布合约
web3.js其实也像框架一样对合约的操作进行了封装。发布合约时,可以使用web3.eth.contract的new方法[4]。
部署过程中需要主要的是,new方法的回调会执行两次,第一次是合约的交易创建完成,第二次是在某个地址上完成部署。需要注意的是只有在部署完成后,才能进行方法该用,否则会报错TypeError: myContractReturned.add is not a function。
4. 调用合约
由于web3.js封装了合约调用的方法。我们可以使用可以使用web3.eth.contract的里的sendTransaction来修改区块链数据。在这里有个坑,有可能会出现Error: invalid address,原因是没有传from,交易发起者的地址。在使用web3.js的API都需留意,出现这种找不到地址的,都看看from字段吧。
需要注意的是,如果要修改区块链上的数据,一定要使用sendTransaction,这会消耗gas。如果不修改区块链上的数据,使用call,这样不会消耗gas。
5. 使用web3.js编译,发布,调用的完整源码
关于作者
专注基于以太坊(Ethereum)的相关区块链(Blockchain)技术,了解以太坊,Solidity,Truffle,web3.js。
个人博客: http://me.tryblockchain.org
版权所有,转载注明出处
参考资料
https://github.com/ethereum/wiki/wiki/JavaScript-API#adding-web3 ?
https://nodejs.org/en/download/package-manager/ ?
http://web3.tryblockchain.org/Web3.js-api-refrence.html#toc_56 ?
http://web3.tryblockchain.org/Web3.js-api-refrence.html#toc_51 ?
本文暂时没有评论,来添加一个吧(●'◡'●)