准备工作
- 使用remix IDE开发智能合约代码,并部署合约到测试链上。请参考《使用remix发布智能合约》
- 安装Ganache,使用Ganache模拟一个以太坊坊节点。请参考《Ganache模拟以太坊区块链节点》
Web3JS是以太坊官方的Javascript API库的集合,通过web3可以开发出用户友好的去中心化应用,Web3与以太坊节点通信实现了 JSON-RPC协议 ,这是一种轻量级的RPC(Remote Procedure Call)协议,整个通信的模型可以抽象为下图。
文章图片
安装Web3
安装web3之前,需要先安装nodejs和npm,如果不知道怎么安装的可以参考《使用ganche模拟以太坊节点》,里边有介绍到。进入nodejs命令行终端,输入下面命令,创建web3userinfo项目,我们把项目放在e盘,当然也可以放到其它位置上:
D:\ProgramFiles\blockchain\nodejs>e:
E:\>mkdir web3useinfo
E:\>cd web3useinfo
然后,使用 node.js 的包管理工具 npm 初始化项目:
E:\web3useinfo>npm init
下来一路回车完成package.json文件的创建,这个文件用来定义项目基本信息包括项目名称,版本,作者等。接下来,使用下面的命令来安装web3js:
E:\web3useinfo>npm install web3@^0.20.0
以节点模块的方式引入web3,所以安装完成后项目文件里多了一个node_modules文件,文件夹里边就是web3相关的js函数库。
注意:“npm install web3@^0.20.0”,安装0.20.0版本的web3,如果按照官网命令“npm install web3”,安装最新的版本,到目前为止,是无法完成安装的。
创建界面
【WEB页面访问以太坊智能合约--使用Web3】在项目目录下创建index.html,在这里我们将创建前端界面,功能包括姓名和年龄的输入框,以及一个按钮,这些将通过 jQuery 实现:
Document - 锐客网
用户信息智能合约
接下来需要编写main.css文件设定基本的样式:
body {background-color:#F0F0F0;
padding: 2em;
font-family: 'Raleway','Source Sans Pro','Arial';
}
.container {width: 50%;
margin: 0 auto;
}
label {display:block;
margin-bottom:10px;
}
input {padding:10px;
width: 50%;
margin-bottom: 1em;
}
button {margin: 2em 0;
padding: 1em 4em;
display:block;
}
#instructor {padding:1em;
background-color:#fff;
margin: 1em 0;
}
到此页面已经准备好了。
编写交互的代码
使用Web3与智能合约交互,在项目根目录下新建文件./app/index.js,修改html页面的src=https://www.it610.com/article/”./app/index.js”>脚本,引入交互的代码。
可以开始编写在index.js代码,首先创建web3实例,并连接我们的GANACHE以太坊节点:
if (typeof web3 !== 'undefined') {
web3 = newWeb3(web3.currentProvider);
//可以用来连接metamaskProvider
} else {
// 创建新的provider,连接本地以太坊节点,我们可以连接ganache作为模拟节点web3 = new Web3(newWeb3.providers.HttpProvider("http://localhost:7545"));
}
|
在上面代码的基础上,接下来设置默认的以太坊账户:
web3.eth.defaultAccount = web3.eth.accounts[0];
Ganache安装完成后,默认自动创建了 10 个账户了提供给我们使用,这里我们选择第一个账户当作默认账户。
接下来需要获取合约的 ABI(Application Binary Interface)和合约地址,简单来说,合约地址是用来区分不同合约的,而ABI是用来定义合约拥有什么的功能。只有知道了合约的地址和ABI才可以和合约进行交互。假设已经发布了UserInfoContract合约,并获取到ABI后,把ABI粘贴到下面方法里。
var userInfoContract = web3.eth.contract(粘贴合约ABI);
如果没有发布UserInfoContract合约,可以参考《使用remix发布智能合约》。接下来拷贝合约的地址,将其复制到下面的代码中:
var userInfo = userInfoContract.at('粘贴合约地址');
完成这些我们就可以调用合约中的函数了,下面使用 jQuery 与我们的合约进行交互:
serInfo.getUser(function(error, result){
if(!error)
{
$("#info").html(result[0]+' ('+result[1]+' 岁 )');
console.log(result);
}
else
console.error(error);
});
$("#button").click(function() {
info.setUser($("#name").val(), $("#age").val());
});
以上的代码就简单地实现了对合约中两个函数的调用,分别读取和显示姓名(userName)和年龄(userAge)变量。
到此我们就完成了全部的代码, index.html测试效果如下图(输入名字和年龄后刷新)。
文章图片
总结一下,通过这一课程,介绍了使用web3js,web页面和智能合约进行交互。
参考文献
- Interactingwith a Smart Contract through Web3.js :
(Tutorial)) https://coursetro.com/posts/code/99/Interacting-with-a-Smart-Contract-through-Web3.js-(Tutorial
推荐阅读
- 推动NFT走出监管困境,BSN推出支持NFT基础设施网络
- 腾讯|SaaS的收入模型有哪些(终于有人讲明白了)
- 就业方向上什么才是最重要的(--- 来自程序猿的迷茫。(C++?Java?or算法?))
- 区块链中加密货币的含义
- 波场万倍潜力币HYL23号21:09分 正式上线JustSwap
- 《瀚兰房地产开发区块链应用及案例分享》BSN培训精华回顾
- 对联盟链而言,跨链协议为什么重要()
- 区块链能够应用在哪些行业
- BSN区块链服务网络中密钥托管模式和公钥上传模式有啥区别()
- 币圈人物传|币圈大佬今何在 唯有一诺正当时