6. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用区块链方法

Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用区块链方法

  • [1. 安装依赖](#1. 安装依赖)
  • [2. 启动Hardhat本地节点](#2. 启动Hardhat本地节点)
  • [3. 编写调试代码](#3. 编写调试代码)
  • [4. 合约部署到本地节点](#4. 合约部署到本地节点)
  • [5. 思考](#5. 思考)

系列文章
1. Remix编写、编译、部署、测试Solidity ERC20合约 - 基础篇
2. Remix编写、编译、部署、测试Solidity ERC20合约 - 进阶篇
3. Metamask导入代币,转账ETH,转账代币
4. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 基础篇
5. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用合约方法
6. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用区块链方法
7. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用合约方法
8. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用区块链方法
9. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 总结

对比系列中的此篇文章
8. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用区块链方法

1. 安装依赖

npm install web3

2. 启动Hardhat本地节点

npx hardhat node

3. 编写调试代码

clike 复制代码
const { ethers } = require("hardhat");
const { default: Web3 } = require('web3');

// 部署合约
async function deploy() {
  // 获取合约工厂(这里期望存在名为 Token 的合约,位于 contracts/ 下)
  // 注意:合约名需与 solidity 文件中合约名一致。
  const myContract = await ethers.getContractFactory("MyToken");
  const token = await myContract.deploy();
// 等待链上确认
  await token.waitForDeployment();
  const address = await token.getAddress();
  console.log("实际合约地址:", address);

  return address;
}

// 使用 web3js 调用区块链方法
async function web3js_transaction() {
    const web3 = new Web3("http://localhost:8545");

    // 查询发送者余额
    var balance = await web3.eth.getBalance('0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266');
    console.log("发送前ETH:", web3.utils.fromWei(balance, 'ether'));

    // 查询接收者余额
    var balance = await web3.eth.getBalance('0x70997970C51812dc3A010C7d01b50e0d17dc79C8');
    console.log("接收前ETH:", web3.utils.fromWei(balance, 'ether'));
    // 发起一笔转账交易
    await web3.eth.sendTransaction({
        from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
        to: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
        value: web3.utils.toWei(1, 'ether'),
        gas: 21000
    });
    
    // 查询发送者余额
    var balance = await web3.eth.getBalance('0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266');
    console.log("发送后ETH:", web3.utils.fromWei(balance, 'ether'));

    // 查询接收者余额
    var balance = await web3.eth.getBalance('0x70997970C51812dc3A010C7d01b50e0d17dc79C8');
    console.log("接收后ETH:", web3.utils.fromWei(balance, 'ether'));

}

async function main() {
    var address = await deploy();
    console.log("web3js 发起转账交易:");
    await web3js_transaction();
}

main().then();

读写操作直接调用区块链方法名

web3.js内部将方法名放入method,参数放入params,组装jsonrpc。

读操作不消耗gas,从本地节点直接返回,不组装交易结构,不进行挖矿。所以不需要交易结构中的from、value、gaslimit、gasprice。

写操作消耗gas,广播到区块链上的节点,组装交易结构,进行挖矿。所以需要交易结构中的from、value、gaslimit、gasprice,默认不需要data。

查询区块号的JSON-RPC结构:

clike 复制代码
{
	jsonrpc: '2.0',
	method: 'eth_blockNumber',
	params: [],
	id: 1
}

查询余额的JSON-RPC结构:

clike 复制代码
{
	jsonrpc: '2.0',
	method: 'eth_getBalance',
	params: [address, 'latest'],
	id: 1
}

发起交易的JSON-RPC结构:

clike 复制代码
{
	jsonrpc: '2.0',
	method: 'eth_sendTransaction',
	params: [{
        from: fromAddress,
        to: toAddress,
        value: '0x' + BigInt(value).toString(16).padStart(64, '0'),
        gas: '0x300000'
    }],
	id: 1
}

4. 合约部署到本地节点

npx hardhat run ignition\modules\Mytoken.js --network localhost

hardhat node输出

5. 思考

根据上一篇文章,eth_call是调用合约的方法,这里并没有调用合约,而是web3.js内部调用的。后续文章会进一步探索。

系列文章
1. Remix编写、编译、部署、测试Solidity ERC20合约 - 基础篇
2. Remix编写、编译、部署、测试Solidity ERC20合约 - 进阶篇
3. Metamask导入代币,转账ETH,转账代币
4. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 基础篇
5. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用合约方法
6. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - web3.js调用区块链方法
7. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用合约方法
8. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用区块链方法
9. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 总结

相关推荐
Sui_Network4 小时前
智能体支付时代:Sui 为 AI 构建可验证的金融基础设施
大数据·人工智能·游戏·金融·rpc·区块链·量子计算
DICOM医学影像4 小时前
8. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用区块链方法
区块链·solidity·以太坊·web3.0·json-rpc·erc20
DICOM医学影像4 小时前
9. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 总结
区块链·智能合约·solidity·以太坊·web3.0·hardhat·json-rpc
myan4 小时前
稳定币与 RWA 闭环将成为新的美元护城河
区块链
Gofarlic_oms15 小时前
区块链存证节点搭建:金融行业审计证据链构建指南
运维·人工智能·金融·数据挖掘·区块链·需求分析·devops
DICOM医学影像5 小时前
2. Remix编写、编译、部署、测试Solidity ERC20合约 - 进阶篇
区块链·solidity·以太坊·web3.0·hardhat·erc20
DICOM医学影像5 小时前
7. Hardhat编写、编译、部署、测试Solidity ERC20合约 - 进阶篇 - JSON-RPC调用合约方法
区块链·solidity·以太坊·web3.0·erc20·jsonrpc
Gofarlic_OMS5 小时前
从Adobe到SolidWorks:研发设计软件资产管理的现状分析
数据库·安全·adobe·oracle·金融·区块链
Rockbean5 小时前
3分钟Solidity: 7.6 Yul语言简介
web3·智能合约·solidity