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

本文介绍了如何使用web3.js库在Nodejs环境中与以太坊进行交互,包括设置项目、安装依赖、部署ERC20合约到Goerli测试网,并创建接口调用合约方法如balanceOf和name。通过Postman可访问这些接口进行测试。
摘要由CSDN通过智能技术生成

之前的以太坊教程和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

  1. 安装依赖项

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”
}

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

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

  3. 配置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)
        }
    }
};
  1. 编写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,
            });
        })
    },
}
  1. 使用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框架来调用我们的合约。咱们下一期再见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值