web3.js与智能合约交互
这是我本人在工作当中总结的,希望能给搞区块链的工程师有一些帮助
为了让Ðapp运行上以太坊,一种选择是使用web3.js library提供的web3对象。底层实现上,它通过RPC 调用与本地节点通信。web3.js可以与任何暴露了RPC接口的以太坊节点连接。
Web3源码下载地址 https://github.com/ethereum/web3.js
web3中有eth对象web3.eth,具体来表示与以太坊区块链之间的交互。shh对象 web3.shh表示Whisper协议的相关交互。
其他方法的在线文档:
下面简单介绍web3的核心方法,网上大多数用的都是nodejs编写的,我用的是nodejs的代码,但是实现均是用原生的代码,基本上脱离了nodejs。
1、web3与本地智能合约交互。
1.1首先引入核心JS
<script type="text/javascript" src="js/web3.min.js"></script>
<script type="text/javascript" src="js/bignumber.min.js" ></script>
web3.min.js:是web3核心代码。
bignumber.min.js :支持无限精度无限大数的类。
1.2获取到核心的web3对象。
if (typeof web3 !== undefined) {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider(""));
}
HttpProvider -- * 获取对象的地址,本地的直接可以用127.0.0.1:8548。连接测试网下面会介绍
用次方法可以创建web3的核心对象,其余的操作均是用这个对象操作的。
主要的核心是web3.eth,可以通过调用其中的方法得到想要的信息。
例如:获取账户余额。通过调用web3.eth.getBalance(address);就能获取制定用户的地址。
1.3通过web3获取到发布的智能合约对象
之前的操作仅仅是连接到了区块链,并没有和自己的智能合约进行交互。
和自己发布的智能合约进行交互需要做一下准备。
a.智能合约地址:智能合约所在区块链的地址。
b.ABI字符串:值程序的接口,主要用于连接Dapp应用和区块链的连接
1.3.1 智能合约地址
合约地址可以从remix的右侧复制。
发布在测试网的可以在跳转网页上看到智能合约的地址
1.3.2ABI字符串
ABI可以在remix未发布之前就可以看到
复制好的ABI保存到JS中,以JSON字符串形式保存。
1.3.3获取对象
通过web3核心对象,加载智能合约对象
tokenObject = web3.eth.contract(abi,default_account).at(contractAddr);
abi -- * 以上复制的ABI JSON字符串。
default_account -- 发布合约的账户地址。不是必须项目。
contractAddr --* 合约地址。
方法调用成功返回智能合约对象,在就可以调用在智能合约中定义的方法。
例如,智能合约中的name方法。
直接可以调用方法,获取想要获得的信息。
2、web3与以太坊测试网交互。
以上介绍了怎么与本地连接,下面介绍怎么与测试网连接。
2.1获取开放接口连接
(注:获取接口的网站注册登录必须翻墙才能注册。)
与测试网连接,需要与测试网的连接接口需要在网上注册,通过指定的网址访问测试链。
注册地址:
通过注册登录获取到连接的key
连接的方式为
Main Ethereum Network //主网连接
https://mainnet.infura.io/ + key
Test Ethereum Network (Ropsten) // Ropsten测试网连接
https://ropsten.infura.io/ + key
eg: 我的代码里连接以太坊测试网的代码示例
只需要获取到核心的web3对象,其余的操作和本地的连接方式相同。