主页 > 官网安卓版下载imtoken钱包 > 以太坊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查看控制台输出

siteethfans.org 以太坊私有链_以太坊节点服务器搭建_搭建私有以太坊节点

(3) 查看账户列表

var accounts = web3.eth.accounts;
console.log(accounts)

刷新界面,查看控制台输出结果,返回一个数组

以太坊节点服务器搭建_搭建私有以太坊节点_siteethfans.org 以太坊私有链

(4) 获取账户余额

var balance = web3.eth.getBalance(accounts[0]);
console.log(balance.toString())

刷新界面,查看控制台输出。 在这里,我正在检查第一个帐户

以太坊节点服务器搭建_搭建私有以太坊节点_siteethfans.org 以太坊私有链

(5) 单位换算

我们上一步得到的余额默认单位是wei,1ether=10^18wei,所以右边有这么多0。 为了更直观的展示我们以太币的数量,我们需要将wei转换为ether

var value = web3.fromWei(balance,"ether");
console.log(value.toString())

刷新界面,查看控制台输出。 在这里,我正在检查第一个帐户

搭建私有以太坊节点_以太坊节点服务器搭建_siteethfans.org 以太坊私有链

(6) 检查给定字符串是否为以太坊地址

以太坊节点服务器搭建_siteethfans.org 以太坊私有链_搭建私有以太坊节点

var isAddress = web3.isAddress(accounts[1]);
console.log(isAddress); 

刷新界面,查看控制台输出结果。 我用的是账户列表中的第二个地址,明显是以太坊地址,返回是true

siteethfans.org 以太坊私有链_搭建私有以太坊节点_以太坊节点服务器搭建

(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]账户需要在执行此步骤前解锁

刷新界面查看控制台输出

siteethfans.org 以太坊私有链_以太坊节点服务器搭建_搭建私有以太坊节点

同时我们在geth客户端也可以看到一条新的交易信息,交易哈希值是一样的

以太坊节点服务器搭建_搭建私有以太坊节点_siteethfans.org 以太坊私有链

(8) 发送签名交易

前端页面发送签名交易很麻烦,还需要引入其他文件,仅靠一个web3.js文件是无法实现的,看不懂,就不演示了这里。 在下一篇博客中,我将使用web3j用java代码实现签名交易,敬请期待。

(9) 获取交易信息

var transaction = web3.eth.getTransaction('0x5455fe5ac45a95bdf608573ee1f082c2f48b3539cdec0ed8d18a8201d876a30c');
console.log(transaction);

参数为上图中返回的交易哈希值,刷新界面,查看结果

搭建私有以太坊节点_以太坊节点服务器搭建_siteethfans.org 以太坊私有链

(10) 智能合约交互

siteethfans.org 以太坊私有链_以太坊节点服务器搭建_搭建私有以太坊节点

如图所示,我们使用remix部署一个简单的智能合约,通过remix获取对应的合约地址和ABI:

var contractAddress="0xba8c13eb6ebe2da349dd3786d10a85e75e5122a7";
var contractABI = [
            {
                "constant": true,
                "inputs": [],
                "name": "getMsg",
                "outputs": [
                    {
                        "name": "",

搭建私有以太坊节点_以太坊节点服务器搭建_siteethfans.org 以太坊私有链

"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()方法获取值

siteethfans.org 以太坊私有链_以太坊节点服务器搭建_搭建私有以太坊节点

var contract = web3.eth.contract(contractABI).at(contractAddress);
var result = contract.getMsg();
console.log(result)

刷新界面,查看结果,显示的内容是我们设置的初始值

siteethfans.org 以太坊私有链_搭建私有以太坊节点_以太坊节点服务器搭建

调用合约的 setMsg() 方法更新值

var result1 = contract.setMsg("update message");
console.log(result1)

更新提交后返回hash值,更新需要开启挖矿

以太坊节点服务器搭建_搭建私有以太坊节点_siteethfans.org 以太坊私有链

再次调用getMsg()获取信息,结果如下

搭建私有以太坊节点_siteethfans.org 以太坊私有链_以太坊节点服务器搭建

如您所见,我们已经成功更新信息了! 整体代码如下:




    
    Title
    




4.总结

本文总结了web.js的一些常用使用方法,可能对新手有所帮助。 web3.js提供了丰富的功能接口供开发者调用。 详情请参考官方文档。

欢迎大家评论转发。 如有错误请指出,我会及时改正。