网易首页 > 网易号 > 正文 申请入驻

区块链以太坊-web3.js教程

0
分享至

之前的以太坊教程和Solidity教程我们都是借助智能合约在线编辑器编译部署我们的合约代码,这属于手动编译部署后在线调用合约的方法进行调试。在这篇文章中,我将会带领大家怎么使用web3来与以太坊进行交互对接口进行调用。

之前我们有提到过,web3是与以太坊交互的接口,支持Nodejs,Java,以及Python。我是比较熟悉Nodejs开发,所以,在这篇文章我们使用web3.js来讲解。如果你是Java开发或者Python开发,可以看着Nodejs语言的思路,再自行百度下应该就可以很快上手了。后期,我也将会用Go语言讲解一下怎么使用Go语言来与以太坊交互。至于其它语言的开发者,我们就只能自行百度或者谷歌了。

我们的前提工作是,使用我们写的ERC20的合约代码来做示例。Nodejs使用express框架和truffle框架。测试网络选用以太坊Goerli测试网。

1. 创建项目并初始化

mkdir MyToken && cd MyToken

npm init

2. 安装依赖项

npm install

"dependencies": {
"@openzeppelin/contracts": "^4.8.3",
"bignumber.js": "^9.0.0",
"body-parser": "^1.19.0",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"ethereumjs-tx": "^1.3.7",
"express": "^4.17.1",
"ganache-cli": "^6.9.1",
"http": "0.0.1-security",
"http-errors": "~1.6.3",
"keythereum": "^0.1.4",
"morgan": "~1.9.1",
"mysql": "^2.18.1",
"node-while-loop": "^1.0.4",
"pug": "2.0.0-beta11",
"solc": "^0.4.26",
"solc-js": "^1.0.1",
"truffle": "^5.1.26",
"web3": "^1.0.0-beta.35"
}

3. 将从智能合约在线编辑器编译的MyToken合约的abi放进MyToken.abi文件内。

4. 我们会运用到合约的地址,所以我们需要将合约部署到我们的Goerli测试网络。

5. 配置truffle-config.js文件

module.exports = {
defaultNetwork: "net", // 指定哪个网络
networks: {
net: {
url: "https://Goerli.infura.io/v3/9df29b35c83d4e4c87a8cde2034794f1",
accounts: ["部署合约的钱包地址的私钥"],
},
},
mocha: {
// timeout: 100000
},
// Configure your compilers
compilers: {
solc: {
version: "0.8.10", // Fetch exact version from solc-bin (default: truffle's version)
}
}
};


6. 编写router路由文件

const express = require('express');
const app = new express();
const call = require('../MyToken');
const router = express.Router();
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(router);
router.get('/balanceOf', call.balanceOf);
router.get('/name', call.name);
app.listen(7070, '127.0.0.1', () => console.log("正在监听端口"));

7. 编写MyToken.js接口文件

// 导入web3接口
const Web3 = require('web3');
// fs包
const fs = require('fs');
// 连接网络
const web3 = new Web3(new Web3.providers.HttpProvider('https://Sepolia.infura.io/v3/9df29b35c83d4e4c87a8cde2034794f1'));
// 导入依赖
const Tx = require("ethereumjs-tx");// 这个版本一定要1.3.7
// 获取abi接口
const abi = JSON.parse(fs.readFileSync('./abi/MyToken.abi'));
// 合约地址
const ContractAddr = '0x9718bAE26B1aBb4fc361766cC63d1C037c3b1534';
// 示例化合约对象
const contract = new web3.eth.Contract(abi, ContractAddr);
module.exports = {
// 查询token数量剩余多少
balanceOf: async (req, res) => {
const owner = "0xF8600a900fF30c76807C155bf6B07ba5BE8190A7";
await contract.methods.balanceOf(owner).call().then(function (result) {
console.log("balanceOf:" + result);
// 发送响应数据
res.send({
"msg": "ok",
"balanceOf": result,
});
})
},
// 查询token的名称
name: async (req, res) => {
await contract.methods.name().call().then(function (result) {
console.log("name:" + result);
res.send({
"msg": "ok",
"name": result,
});
})
},
}

8. 使用postman即可访问到我们的接口了。

项目目录

MyToken
- abi
- MyToken.abi
- router
- router.js
- MyToken.js
- MyToken.sol
- package.json
- truffle-config.js

至此,我们就已经掌握了使用nodejs和web3.js跟以太坊合约的交互。这里获得的数据跟在智能合约在线编辑器我们部署合约手动调用合约的方法的数据是一致的。有兴趣的同学可以按照我的例子自己尝试一遍。除了用web3.js外,官方还为我们提供了使用ether.js接口来调用以太坊的合约,这跟web3.js的思路是类似的,这个我们在后续的文章中会讲到。

如果有疑问的话,留言交流。喜欢的话就点个关注,点个赞吧。下一篇文章,我们来讲一下如何使用ethers,以及如何使用hardhat框架来调用我们的合约。咱们下一期再见!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
意大利日本基本出线!女排奥运名额剩3选2,中国队再输2场=被淘汰

意大利日本基本出线!女排奥运名额剩3选2,中国队再输2场=被淘汰

侃球熊弟
2024-06-03 08:08:26
106国参加瑞士和会:中方拒绝参会,与世界文明为伍,勿忘雅尔塔

106国参加瑞士和会:中方拒绝参会,与世界文明为伍,勿忘雅尔塔

大风文字
2024-06-03 10:27:47
网传斯坦福大学毕业都去卷乡镇公务员?竟是当年县高考理科状元…

网传斯坦福大学毕业都去卷乡镇公务员?竟是当年县高考理科状元…

火山诗话
2024-06-02 19:06:14
辟谣!朱芳雨否认周琦已签辽宁+正努力续约 萨林杰太贵吃不下

辟谣!朱芳雨否认周琦已签辽宁+正努力续约 萨林杰太贵吃不下

醉卧浮生
2024-06-03 08:23:16
北大教授周其仁:若停止改革,中国将面临三大麻烦

北大教授周其仁:若停止改革,中国将面临三大麻烦

经济学教授V
2024-06-03 07:01:42
柳叶刀点名批评中国饮食,一日三餐都是碳水,升糖指数全球最高

柳叶刀点名批评中国饮食,一日三餐都是碳水,升糖指数全球最高

芝士圈
2024-06-02 14:09:50
马斯克有一个伟大的计划:将全车电线从5000米,降至100米

马斯克有一个伟大的计划:将全车电线从5000米,降至100米

互联网.乱侃秀
2024-06-02 20:22:55
风波升级!日本人为了抓铁头,将悬赏金加到1000万,一些华人加入

风波升级!日本人为了抓铁头,将悬赏金加到1000万,一些华人加入

辣条小剧场
2024-06-03 08:00:12
身中15刀仍紧追歹徒!噩耗传来,他壮烈牺牲……

身中15刀仍紧追歹徒!噩耗传来,他壮烈牺牲……

极目新闻
2024-06-03 10:29:25
接班100天,宗馥莉急了

接班100天,宗馥莉急了

中国企业家杂志
2024-06-03 09:37:04
崔天凯重申:不会掉进美国的台海战争陷阱,不让中国人自相残杀

崔天凯重申:不会掉进美国的台海战争陷阱,不让中国人自相残杀

仰望沧海
2024-06-01 11:22:53
美国、英国发动联合空袭!红海战争以来最大规模死亡 美国F/A-18证实参与行动

美国、英国发动联合空袭!红海战争以来最大规模死亡 美国F/A-18证实参与行动

FX168北美财经圈
2024-06-01 11:36:05
麦迪质疑库里地位:少一位队友就无缘季后赛 他不是历史前十球星

麦迪质疑库里地位:少一位队友就无缘季后赛 他不是历史前十球星

罗说NBA
2024-06-03 07:01:31
徐辉少将喊话泽连斯基:到底在为什么而战?

徐辉少将喊话泽连斯基:到底在为什么而战?

观察者网
2024-06-03 07:48:06
军事 | 在亚洲的土地上:有关战争的“和会”,和有关和平的战争……

军事 | 在亚洲的土地上:有关战争的“和会”,和有关和平的战争……

新民周刊
2024-06-03 09:19:20
伊朗外交部竟然向我国提出了抗议!

伊朗外交部竟然向我国提出了抗议!

止戈军是我
2024-06-03 09:49:47
普通股民给证监会主席写公开信:如果没有造假赔偿制度,受伤的只会是我们这群人

普通股民给证监会主席写公开信:如果没有造假赔偿制度,受伤的只会是我们这群人

西游日记
2024-06-03 12:10:43
队史最大错误!克罗斯要千万欧年薪,拜仁只给600万称其非世界级

队史最大错误!克罗斯要千万欧年薪,拜仁只给600万称其非世界级

直播吧
2024-06-02 23:59:04
找到了砍树人,已找不回“迎客松”,如何处罚愚昧无知者

找到了砍树人,已找不回“迎客松”,如何处罚愚昧无知者

谭浩俊
2024-06-03 07:55:02
10年0冠,6万人涌入球场,61岁穆帅签约费内巴切:从此你我一体!

10年0冠,6万人涌入球场,61岁穆帅签约费内巴切:从此你我一体!

风过乡
2024-06-03 07:12:44
2024-06-03 13:46:44
心辰说
心辰说
了解区块链,学习区块链,深入区块链,掌握区块链!
20文章数 1关注度
往期回顾 全部

科技要闻

2万字演讲|黄仁勋剧透 未来3年新品有这些

头条要闻

武汉一警察牺牲 身中15刀仍下25级台阶紧追歹徒20米

头条要闻

武汉一警察牺牲 身中15刀仍下25级台阶紧追歹徒20米

体育要闻

万人空巷!皇马举行欧冠夺冠庆典

娱乐要闻

混战升级!编剧赵冬苓力挺王阳遭围攻

财经要闻

黄仁勋的计划:涉及新AI平台 HBM4 机器人

汽车要闻

搭载华为HiCAR 传祺M6 MAX售14.58万元

态度原创

教育
健康
手机
房产
公开课

教育要闻

来学校不仅是学知识,更要学怎么做人,否则成绩再好也没用!

晚餐不吃or吃七分饱,哪种更减肥?

手机要闻

曝一加13定制2K 8T LTPO高规格国产屏 还有超大电池

房产要闻

重磅!琼海出台楼市新政:住房出租、挂牌计划出售,都可减套数!

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版