原文作者:PaperMoon团队
介绍
Ethers.js 是一个轻量级 JavaScript 库,用于与 以太坊虚拟机(EVM)兼容的区块链进行交互。Ethers.js 被广泛用作建立连接、读取和写入区块链数据的工具包。
本文将演示如何使用 Ethers.js 与 Polkadot Hub 交互,并在其上部署智能合约。
本指南适用于 熟悉 JavaScript、并希望通过 Ethers.js 与 Polkadot Hub 进行交互的开发者。
前置条件
在开始之前,请确保你已安装以下工具:
• Node.js:v22.13.1 或更高版本(可参考 Node.js 官方安装指南)
• npm:v6.13.4 或更高版本(通常随 Node.js 一起安装)
• Solidity:本指南使用 ^0.8.9 版本进行智能合约开发
项目结构
该项目将合约、脚本和编译产物进行清晰组织,方便开发和部署。
ethers-project
├── contracts
│ ├── Storage.sol
├── scripts
│ ├── connectToProvider.js
│ ├── fetchLastBlock.js
│ ├── compile.js
│ ├── deploy.js
│ ├── checkStorage.js
├── abis
│ ├── Storage.json
├── artifacts
│ ├── Storage.bin
├── contract-address.json
├── node_modules/
├── package.json
├── package-lock.json
└── README.md
初始化项目
创建新文件夹并初始化项目:
mkdir ethers-project
cd ethers-project
npm init -y
安装依赖
安装 Ethers.js:
npm install ethers
安装 Solidity 编译器(用于生成标准 EVM 字节码):
npm install --save-dev solc
本指南使用 solc 0.8.33。
提示
示例脚本使用 ECMAScript modules(ESM)。
请在 package.json 中添加:
"type": "module"
或者将脚本文件重命名为 .mjs,以便 Node.js 正确解析 import 语句。
设置 Ethers.js Provider
Provider 是对以太坊网络连接的抽象,允许你查询区块链数据并发送交易。它是应用程序与区块链之间的桥梁。
要与 Polkadot Hub 交互,你需要创建一个 Ethers.js Provider。
创建 Provider
在项目根目录下创建文件:
scripts/connectToProvider.js
const { JsonRpcProvider } = require('ethers');
const createProvider = (rpcUrl, chainId, chainName) => {
const provider = new JsonRpcProvider(rpcUrl, {
chainId: chainId,
name: chainName,
});
return provider;
};
const PROVIDER_RPC = {
rpc: 'INSERT_RPC_URL',
chainId: 'INSERT_CHAIN_ID',
name: 'INSERT_CHAIN_NAME',
};
createProvider(PROVIDER_RPC.rpc, PROVIDER_RPC.chainId, PROVIDER_RPC.name);
注意
请将 INSERT_RPC_URL、INSERT_CHAIN_ID 和 INSERT_CHAIN_NAME 替换为实际值。
例如,连接到 Polkadot Hub TestNet 的 Ethereum RPC:
const PROVIDER_RPC = {
rpc: 'https://services.polkadothub-rpc.com/testnet',
chainId: 420420417,
name: 'polkadot-hub-testnet'
};
运行:
node scripts/connectToProvider.js
查询区块信息(示例)
获取最新区块高度:
scripts/fetchLastBlock.js
const { JsonRpcProvider } = require('ethers');
const createProvider = (rpcUrl, chainId, chainName) => {
return new JsonRpcProvider(rpcUrl, { chainId, name: chainName });
};
const PROVIDER_RPC = {
rpc: 'https://services.polkadothub-rpc.com/testnet',
chainId: 420420417,
name: 'polkadot-hub-testnet',
};
const main = async () => {
try {
const provider = createProvider(
PROVIDER_RPC.rpc,
PROVIDER_RPC.chainId,
PROVIDER_RPC.name,
);
const latestBlock = await provider.getBlockNumber();
console.log(`最新区块高度: ${latestBlock}`);
} catch (error) {
console.error('连接 Polkadot Hub TestNet 失败: ' + error.message);
}
};
main();
编译智能合约
Polkadot Hub 提供 Ethereum JSON-RPC 接口,因此你可以使用原生的 solc 编译 Solidity 合约,生成标准 EVM 字节码,并通过 Ethers.js 部署。
示例合约:Storage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
contract Storage {
uint256 public storedNumber;
function setNumber(uint256 _newNumber) public {
storedNumber = _newNumber;
}
}
该合约用于存储一个数字,并允许任何用户更新它。
编译脚本
scripts/compile.js
(逻辑保持原样:读取 Solidity → 编译 → 输出 ABI 和 Bytecode)
运行:
node scripts/compile.js
编译结果说明
• ABI 文件:abis/Storage.json
• 字节码文件:artifacts/Storage.bin
ABI(应用二进制接口)定义了合约函数、事件及参数,是 JavaScript 与合约交互的桥梁。
部署合约到 Polkadot Hub
部署合约需要一个 钱包助记词(mnemonic) 来签名交易。
部署脚本:scripts/deploy.js
(完整代码与你提供的保持一致)
关键步骤包括:
1. 创建 Provider
2. 从助记词生成 Wallet
3. 使用 ContractFactory 部署合约
4. 保存部署后的合约地址到 contract-address.json
运行:
node scripts/deploy.js
⚠️ 请务必妥善保管助记词,切勿公开
与合约交互
部署完成后,可通过脚本调用合约函数。
示例:读取并更新 Storage 合约
scripts/checkStorage.js
该脚本将:
1. 设置初始值
2. 读取存储的数值
3. 将其翻倍并重新写入
4. 再次读取验证结果
运行:
node scripts/checkStorage.js
请确保已替换:
• INSERT_MNEMONIC
• INSERT_CONTRACT_ADDRESS
接下来可以做什么?
掌握 Ethers.js 与 Polkadot Hub 的基础用法后,你可以进一步:
• 深入了解 Ethers.js 高级功能(钱包管理、消息签名等)
• 实现 批量交易(batch transactions)
• 结合 Next.js / Node.js 构建完整的全栈去中心化应用(dApp)
原文链接:https://docs.polkadot.com/smart-contracts/libraries/ethers-js/

9176

被折叠的 条评论
为什么被折叠?



