Ethers.js

原文作者: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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值