Ethers.js实战:带你掌握Web3区块链开发Web3时代已来,区块链开发成为技术圈的热门技能。如何快速上手与以太坊交互?Ethers.js作为一款轻量又强大的工具,能帮你轻松搞定查询、交易和智能合约部署。本文通过一个实战脚本,带你一步步掌握Web3区块链开发的核心技能,无论你是
Web3 时代已来,区块链开发成为技术圈的热门技能。如何快速上手与以太坊交互?Ethers.js 作为一款轻量又强大的工具,能帮你轻松搞定查询、交易和智能合约部署。本文通过一个实战脚本,带你一步步掌握 Web3 区块链开发的核心技能,无论你是新手还是老司机,都能在这里找到实操灵感!
本文基于 Ethers.js 提供了一个 TypeScript 实战案例,涵盖连接区块链、查询区块和余额、发送交易以及部署智能合约的全过程。代码清晰拆解了每个步骤的功能,从初始化提供者到调用合约方法,手把手带你掌握 Web3 开发技巧。运行结果一目了然,助你快速上手区块链编程。
import { Contract, ethers, Wallet } from 'ethers';
import config from './config';
import { ABI, BYTECODE } from "./abi/storage"
async function main() {
const provider = new ethers.JsonRpcProvider(config.localRpcUrl);
const blockNumber = await provider.getBlockNumber();
console.log(`blockNumber: ${blockNumber}`);
const wallet = new ethers.Wallet(config.privateKey, provider);
// const wallet = new Wallet(config.privateKey, provider);
const walletAddress = await wallet.getAddress();
console.log("wallet address: ", wallet.address);
console.log("wallet address: ", walletAddress);
const balance = await provider.getBalance(walletAddress);
console.log("balance: ", balance.toString());
const nonce = await provider.getTransactionCount(walletAddress);
console.log("nonce: ", nonce);
const tx = await wallet.sendTransaction({
to: config.accountAddress2,
value: ethers.parseEther('0.1'),
nonce: nonce,
})
await tx.wait();
const txHash = tx.hash;
console.log("tx hash: ", txHash);
const txReceipt = await provider.getTransactionReceipt(txHash);
console.log("tx receipt: ", txReceipt);
const factory = new ethers.ContractFactory(ABI, BYTECODE, wallet)
const contract = await factory.deploy()
// 4. 等待部署确认
await contract.waitForDeployment()
const contractAddress = await contract.getAddress();
const contractAddress1 = contract.target.toString()
console.log("contract address: ", contractAddress)
console.log("contract address1: ", contractAddress1)
const deployedContract = new Contract(contractAddress, ABI, provider)
const retrieve = await deployedContract.retrieve()
console.log("retrieve: ", retrieve.toString())
}
main().catch((error) => {
console.error("Error:", error);
process.exit(1);
});
这是一个使用 ethers.js 库与以太坊区块链交互的 JavaScript/TypeScript 脚本,主要功能包括查询信息、发送交易和部署智能合约。
import { Contract, ethers, Wallet } from 'ethers';
import config from './config';
import { ABI, BYTECODE } from "./abi/storage";
async function main() {
这是一个异步函数,因为区块链操作(如查询、交易)需要等待网络响应。
const provider = new ethers.JsonRpcProvider(config.localRpcUrl);
const blockNumber = await provider.getBlockNumber();
console.log(`blockNumber: ${blockNumber}`);
const wallet = new ethers.Wallet(config.privateKey, provider);
const walletAddress = await wallet.getAddress();
console.log("wallet address: ", wallet.address);
console.log("wallet address: ", walletAddress);
const balance = await provider.getBalance(walletAddress);
console.log("balance: ", balance.toString());
const nonce = await provider.getTransactionCount(walletAddress);
console.log("nonce: ", nonce);
const tx = await wallet.sendTransaction({
to: config.accountAddress2,
value: ethers.parseEther('0.1'),
nonce: nonce,
});
await tx.wait();
const txHash = tx.hash;
console.log("tx hash: ", txHash);
const txReceipt = await provider.getTransactionReceipt(txHash);
console.log("tx receipt: ", txReceipt);
const factory = new ethers.ContractFactory(ABI, BYTECODE, wallet);
const contract = await factory.deploy();
await contract.waitForDeployment();
const contractAddress = await contract.getAddress();
const contractAddress1 = contract.target.toString();
console.log("contract address: ", contractAddress);
console.log("contract address1: ", contractAddress1);
const deployedContract = new Contract(contractAddress, ABI, provider);
const retrieve = await deployedContract.retrieve();
console.log("retrieve: ", retrieve.toString());
main().catch((error) => {
console.error("Error:", error);
process.exit(1);
});
➜ ts-node src/main.ts
blockNumber: 0
wallet address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
wallet address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
balance: 10000000000000000000000
nonce: 0
tx hash: 0x1f4b6e1c13d6374c8fabce903e1b3cc947d75be53a8c49b555a63e21b2388d16
tx receipt: TransactionReceipt {
provider: JsonRpcProvider {},
to: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',
from: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
contractAddress: null,
hash: '0x1f4b6e1c13d6374c8fabce903e1b3cc947d75be53a8c49b555a63e21b2388d16',
index: 0,
blockHash: '0x9f33e46ed0d4382e849e04e0dee4433c676d9f43c1eb6f0076676bd0251f9fb6',
blockNumber: 1,
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
gasUsed: 21000n,
blobGasUsed: null,
cumulativeGasUsed: 21000n,
gasPrice: 2000000000n,
blobGasPrice: 1n,
type: 2,
status: 1,
root: undefined
}
contract address: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
contract address1: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
retrieve: 0
通过这个 Ethers.js 实战案例,我们从零开始探索了 Web3 区块链开发的关键环节。无论是发送一笔交易还是部署自己的智能合约,Ethers.js 都展现了简单高效的魅力。掌握这些技能,你就迈出了构建去中心化应用的第一步。接下来,不妨动手试试,把代码跑起来,开启你的 Web3 开发之旅吧!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!