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协议的相关交互。

其他方法的在线文档:https://web3js.readthedocs.io/en/1.0/

下面简单介绍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("http://127.0.0.1:8545"));

}

HttpProvider -- * 获取对象的地址,本地的直接可以用127.0.0.1:8548。连接测试网下面会介绍

用次方法可以创建web3的核心对象,其余的操作均是用这个对象操作的。

web3.js与智能合约交互

主要的核心是web3.eth,可以通过调用其中的方法得到想要的信息。

例如:获取账户余额。通过调用web3.eth.getBalance(address);就能获取制定用户的地址。

web3.js与智能合约交互

1.3通过web3获取到发布的智能合约对象

之前的操作仅仅是连接到了区块链,并没有和自己的智能合约进行交互。

和自己发布的智能合约进行交互需要做一下准备。

a.智能合约地址:智能合约所在区块链的地址。

b.ABI字符串:值程序的接口,主要用于连接Dapp应用和区块链的连接

1.3.1 智能合约地址

合约地址可以从remix的右侧复制。

web3.js与智能合约交互

发布在测试网的可以在跳转网页上看到智能合约的地址

web3.js与智能合约交互

1.3.2ABI字符串

ABI可以在remix未发布之前就可以看到

web3.js与智能合约交互

web3.js与智能合约交互

复制好的ABI保存到JS中,以JSON字符串形式保存。

1.3.3获取对象

通过web3核心对象,加载智能合约对象

tokenObject = web3.eth.contract(abi,default_account).at(contractAddr);

abi -- * 以上复制的ABI JSON字符串。

default_account -- 发布合约的账户地址。不是必须项目。

contractAddr  --* 合约地址。

方法调用成功返回智能合约对象,在就可以调用在智能合约中定义的方法。

web3.js与智能合约交互

例如,智能合约中的name方法。

web3.js与智能合约交互

直接可以调用方法,获取想要获得的信息。

2、web3与以太坊测试网交互。

以上介绍了怎么与本地连接,下面介绍怎么与测试网连接。

2.1获取开放接口连接

(注:获取接口的网站注册登录必须*才能注册。)

与测试网连接,需要与测试网的连接接口需要在网上注册,通过指定的网址访问测试链。

注册地址:https://infura.io/register

通过注册登录获取到连接的key

连接的方式为

 Main Ethereum Network //主网连接

  https://mainnet.infura.io/  + key

 Test Ethereum Network (Ropsten) // Ropsten测试网连接

  https://ropsten.infura.io/  + key

 eg: 我的代码里连接以太坊测试网的代码示例

web3.js与智能合约交互

只需要获取到核心的web3对象,其余的操作和本地的连接方式相同。