主页 > imtoken钱包官网app下载 > 以太坊javascript API web3.js常用功能介绍
以太坊javascript API web3.js常用功能介绍
1 简介
web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,并提供了一系列与以太坊交互的Javascript对象和函数搭建私有以太坊节点,通过它们我们可以方便地与以太坊进行通信和智能合约交互。 在之前的博客中,我已经介绍了以太坊私有链环境的搭建和智能合约的部署,这里不再赘述。 让我们通过 web.js 与之交互。
2. 所需环境
(1) 启动一条以太坊私链,创建两个账户,挖矿获得一些ETH
(2)部署智能合约,获取合约地址和合约ABI(使用Remix获取)
环境搭建可以参考我之前的博客:
(一)Ubuntu 16.04快速搭建以太坊私链开发环境
(2) 使用Remix IDE快速部署你的第一个智能合约
3.开始使用web3.js
web3.js可以在github上下载参考,也可以使用官方CDN。 为了省事,我用CDN
新建一个html文件搭建私有以太坊节点,在head标签中导入
(1)链接本地私有链获取web3对象
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));//默认http://localhost:8545
}
(2)检查是否连接成功
if(!web3.isConnected()) {
console.log("连接失败!!")
} else {
console.log("连接成功!!")
}
打开html,按F12查看控制台输出
(3) 查看账户列表
var accounts = web3.eth.accounts;
console.log(accounts)
刷新界面,查看控制台输出结果,返回一个数组
(4) 获取账户余额
var balance = web3.eth.getBalance(accounts[0]);
console.log(balance.toString())
刷新界面,查看控制台输出。 在这里,我正在检查第一个帐户
(5) 单位换算
我们上一步得到的余额默认单位是wei,1ether=10^18wei,所以右边有这么多0。 为了更直观的展示我们以太币的数量,我们需要将wei转换为ether
var value = web3.fromWei(balance,"ether");
console.log(value.toString())
刷新界面,查看控制台输出。 在这里,我正在检查第一个帐户
(6) 检查给定字符串是否为以太坊地址
var isAddress = web3.isAddress(accounts[1]);
console.log(isAddress);
刷新界面,查看控制台输出结果。 我用的是账户列表中的第二个地址,明显是以太坊地址,返回是true
(7) 发送简单交易
web3.eth.sendTransaction({
from : accounts[0],
to : accounts[1],
value: web3.toWei(1,"ether")
}, function(err, transactionHash) {
if (!err){
console.log(transactionHash)
}else{
console.log(err)
}
});
这里我们从accounts[0]发送一个ether到accounts[1],成功则返回交易的hash值,失败则返回错误原因。如果from不填,默认为web3.eth.defaultAccount ,我们可以手动设置
web3.eth.defaultAccount = accounts[0];
注意:accounts[0]账户需要在执行此步骤前解锁
刷新界面查看控制台输出
同时我们在geth客户端也可以看到一条新的交易信息,交易哈希值是一样的
(8) 发送签名交易
前端页面发送签名交易很麻烦,还需要引入其他文件,仅靠一个web3.js文件是无法实现的,看不懂,就不演示了这里。 在下一篇博客中,我将使用web3j用java代码实现签名交易,敬请期待。
(9) 获取交易信息
var transaction = web3.eth.getTransaction('0x5455fe5ac45a95bdf608573ee1f082c2f48b3539cdec0ed8d18a8201d876a30c');
console.log(transaction);
参数为上图中返回的交易哈希值,刷新界面,查看结果
(10) 智能合约交互
如图所示,我们使用remix部署一个简单的智能合约,通过remix获取对应的合约地址和ABI:
var contractAddress="0xba8c13eb6ebe2da349dd3786d10a85e75e5122a7";
var contractABI = [
{
"constant": true,
"inputs": [],
"name": "getMsg",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "str",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_str",
"type": "string"
}
],
"name": "setMsg",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
];
然后获取合约的实例,调用合约的getMsg()方法获取值
var contract = web3.eth.contract(contractABI).at(contractAddress);
var result = contract.getMsg();
console.log(result)
刷新界面,查看结果,显示的内容是我们设置的初始值
调用合约的 setMsg() 方法更新值
var result1 = contract.setMsg("update message");
console.log(result1)
更新提交后返回hash值,更新需要开启挖矿
再次调用getMsg()获取信息,结果如下
如您所见,我们已经成功更新信息了! 整体代码如下:
Title
4.总结
本文总结了web.js的一些常用使用方法,可能对新手有所帮助。 web3.js提供了丰富的功能接口供开发者调用。 详情请参考官方文档。
欢迎大家评论转发。 如有错误请指出,我会及时改正。