如何使用 web3.js 或 ethers.js 连接到 Hedera 测试网?

问题描述 投票:0回答:2

我想使用 web3.js 或 ethers.js 与 Hedera 测试网进行交互。我怎样才能做到这一点? 的 我之前使用

hedera-sdk-js
与 Hedera Testnet 进行过交互, 例如使用以下代码:

import {
    AccountBalanceQuery, 
    Client
} from "@hashgraph/sdk";
​
const client = new Client({
    network: "testnet"
});
​
const accountId = '0.0.3996280';
const balance = await new AccountBalanceQuery()
    .setAccountId(accountId)
    .execute(client);
    
console.log(
    `Balance of ${accountId} in Tinybars:`,
    balance.hbars.toTinybars().toString(10)
);
​

我怎样才能在 web3.js/ethers.js 中执行与上述等效的操作?

web3js ethers.js hedera-hashgraph hedera
2个回答
2
投票

首先,获取一个 RPC 端点 URL, 如何通过 RPC 连接到 Hedera 测试网? 中对此进行了详细说明。 的 获得该值后,用该值替换下面代码示例中的

${RPC_URL}

使用web3.js连接

安装 web3.js:

npm install web3

然后使用下面的脚本建立连接 使用

Web3.providers.HttpProvider
到 RPC 端点, 并用它查询
eth_blockNumber

import Web3 from 'web3';
​
const web3Provider = new Web3(new Web3.providers.HttpProvider('${RPC_URL}'), {
    headers: [{
        name: 'Access-Control-Allow-Origin', value: '*'
    }],
    keepalive: true,
    withCredentials: false,
});
​
async function main() {
    web3Provider.eth.getBlockNumber()
        .then((blockNumber) => {
            console.log('block number', blockNumber);
        })
        .catch(console.error);
​
    web3Provider.eth.getBalance(
        '0x00000000000000000000000000000000003cfa78')
        .then((balance) => {
            console.log('balance', balance);
        })
        .catch(console.error);
}
​
main();
​

使用ethers.js连接

安装 ethers.js:

npm install ethers@v5

然后使用下面的脚本建立连接 使用

ethers.providers.JsonRpcProvider
到 RPC 端点, 并用它查询
eth_blockNumber

import { ethers } from 'ethers';
​
const web3Provider = new ethers.providers.JsonRpcProvider({
    url: '${RPC_URL}',
    headers: {
        'Access-Control-Allow-Origin': '*',
    },
});
​
async function main() {
    web3Provider.getBlockNumber()
        .then((blockNumber) => {
            console.log('block number', blockNumber);
        })
        .catch(console.error);
​
    web3Provider.getBalance(
        '0x00000000000000000000000000000000003cfa78')
        .then((balance) => {
            console.log('balance', balance.toBigInt());
        })
        .catch(console.error);
}
​
main();
​


0
投票

@bguiz 回答应该可以。还有这个教程展示了如何使用 ethers.js 以及像 MetaMask 这样的钱包来做到这一点。

https://youtu.be/mhqQToUEMBs?t=274

这是视频中代码的链接,您可以重复使用该功能使用以太币连接 Hedera 网络(测试网/主网/预览网)。 https://github.com/ed-marquez/hedera-example-metamask-counter-dapp/blob/master/src/components/hedera/walletConnect.js

代码也如下所示

  1. 您首先创建一个新的以太供应商

  2. 然后定义要连接的网络

    chainId
    (testnet/mainnet/previewnet)。如果您使用的是像 MetaMask 这样的钱包,您可以选择以编程方式切换到 Hedera 网络,然后您可以指定 JSON-RPC 和网络浏览器 URLs

  3. 获取选择的账号

    import { ethers } from "ethers";
     const network = "testnet";
    
     async function walletConnectFcn() {
         console.log(`\n=======================================`);
    
     // ETHERS PROVIDER
     const provider = new ethers.providers.Web3Provider(window.ethereum, "any");
    
     // SWITCH TO HEDERA TEST NETWORK
     console.log(`- Switching network to the Hedera ${network}...🟠`);
     let chainId;
     if (network === "testnet") {
         chainId = "0x128";
     } else if (network === "previewnet") {
         chainId = "0x129";
     } else {
         chainId = "0x127";
     }
    
     await window.ethereum.request({
         method: "wallet_addEthereumChain",
         params: [
             {
                 chainName: `Hedera ${network}`,
                 chainId: chainId,
                 nativeCurrency: { name: "HBAR", symbol: "ℏℏ", decimals: 18 },
                 rpcUrls: [`https://${network}.hashio.io/api`],
                 blockExplorerUrls: [`https://hashscan.io/${network}/`],
             },
         ],
     });
     console.log("- Switched ✅");
    
     // CONNECT TO ACCOUNT
     console.log("- Connecting wallet...🟠");
     let selectedAccount;
     await provider
         .send("eth_requestAccounts", [])
         .then((accounts) => {
             selectedAccount = accounts[0];
             console.log(`- Selected account: ${selectedAccount} ✅`);
         })
         .catch((connectError) => {
             console.log(`- ${connectError.message.toString()}`);
             return;
         });
    
     return [selectedAccount, provider, network]; 
    

    }

    导出默认钱包ConnectFcn;

© www.soinside.com 2019 - 2024. All rights reserved.