编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

web3.js集成Solidity编译发布调用流程|入门系列

wxchong 2024-07-02 03:27:49 开源技术 13 ℃ 0 评论

下面教程是打算在尽量牵涉可能少的以太坊的相关工具,主要使用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

版权所有,转载注明出处

参考资料


  1. https://github.com/ethereum/wiki/wiki/JavaScript-API#adding-web3 ?

  2. https://nodejs.org/en/download/package-manager/ ?

  3. http://web3.tryblockchain.org/Web3.js-api-refrence.html#toc_56 ?

  4. http://web3.tryblockchain.org/Web3.js-api-refrence.html#toc_51 ?

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表