Web3 第二章(Dapp 转账功能)

367 阅读1分钟

web3 大佬圈

我是 web3 小白,欢迎各大佬进群一起交流、进步。

起一个本地测试网

开发环境中是不可能直接使用真的 Eth 去做转账的, 这一切都可以通过 hardhat 本地测试网来模拟。

hardhat是以太坊软件的开发环境。它由用于编辑、编译、调试和部署智能合约和 dApp 的不同组件组成,所有这些组件共同创建一个完整的开发环境

  • 创建一个项目
mkdir chain
cd chain
pnpm init 
pnpm add hardhat
pnpm hardhat node

将钱包或 Dapp 连接到 Hardhat 网络

  • 添加网络 hardhat 默认 chain id 是 31337 image.png

image.png

  • 添加账户

image.png

hardhat 起的服务会提供默认 19 个账户

image.png

image.png

image.png

从上面 19 个账户中,随便选一个 private key 贴进来,导入账户 image.png

Dapp 连接上刚才自己配置的账户

转账

  • MetaMask
provider
      ?.request({
        method: "eth_sendTransaction",
        params: [
          {
            from: accounts[0],
            to: toAddress,
            value: "0x8ac7230489e80000",
            gasLimit: "0x5028",
            maxPriorityFeePerGas: "0x3b9aca00",
            maxFeePerGas: "0x2540be400",
          },
        ],
      })
      .then((txHash) => console.log(txHash))
      .catch((error) => console.error(error))
      .finally(() => {
        console.log("2", 2);
      });
  • ethers
 const transfer2 = async () => {
    const detectedProvider = await detectProvider();
    if (detectedProvider) {
      // 包装成 ethers.js 提供者
      const provider = new ethers.BrowserProvider(detectedProvider);
      const signer = await provider?.getSigner();
      const tx = await signer.sendTransaction({
        to: toAddress,
        value: parseEther(`${amount}`),
      });
      console.log(`Transaction hash: ${tx.hash}`);
      const receipt = await tx.wait();
      console.log("Transaction was mined in block:", receipt?.blockNumber);
      if (currentAccount) {
        const balance = await provider.getBalance(currentAccount);
        setBalance(ethers.formatEther(balance));
      }
    }
  };

image.png