Web3合约ABI,合约地址生成部署调用及创建,连接钱包,基础交易流程

Web3+MetaMask+常见交易相关交互

一、Web3合约地址以及合约ABI生成,部署,交易等流程

查询区块各种信息,钱包对钱包交易;合约方面的交易,使用生成web3合约的ide工具生成合约,部署合约,调用已部署的合约方法

1. remix生成合约地址和合约ABI步骤如下

remix IDE工具

(1)在左侧文件面板中新建一个 Solidity 文件,合约代码如下(示例):

c 复制代码
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

contract MyContract {
    uint256 public value;

    function setValue(uint256 _value) public {
        value = _value;
    }
}

(2)选择编译环境,并编译,拉到底部获取abi按钮,点击可复制合约ABI

(3)接下来是合约地址的生成

(4)合约校验及部署

能看到以下验证结果说明成功了

2. 合约校验及部署,吊起metamask钱包签约

点击verifyContract

3. 前端调用合约方法,并吊起钱包交互流程

(1)前端引入合约地址以及ABI,连接钱包,并调用合约写入方法

c 复制代码
import React from "react";
import { useEffect } from "react";
import logo from "./logo.svg";
import "./App.css";
import { JsonRpcProvider, ethers, BrowserProvider } from "ethers";

function App() {
  // 测试网地址
  var url = "https://apixx";
  var customHttpProvider = new JsonRpcProvider(url);
  // 测试合约交易
  async function testABIcontract() {
    // 合约地址
    const contractAddress = "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa5";
    // 合约ABI
    const contractAbi = [
      {
        inputs: [
          {
            internalType: "uint256",
            name: "_value",
            type: "uint256",
          },
        ],
        name: "setValue",
        outputs: [],
        stateMutability: "nonpayable",
        type: "function",
      },
      {
        inputs: [],
        name: "value",
        outputs: [
          {
            internalType: "uint256",
            name: "",
            type: "uint256",
          },
        ],
        stateMutability: "view",
        type: "function",
      },
    ];
    if (window.ethereum) {
      // 连接 Provider 和 Signer
      const provider = new ethers.BrowserProvider(aaa.ethereum); // 连接metamask
      const signer = await provider.getSigner(); // 获取signer
      console.log("连接 Provider 和 Signer");
      // 3. 创建合约实例
      const contract = new ethers.Contract(contractAddress, contractAbi, signer);
      // 4. 调用合约方法
      await contract.setValue(666); // 写入操作(需签名)
      console.log("调用合约方法");
      const currentValue = await contract.value(); // 读取操作
      console.log("当前值:", currentValue.toString());
    }
  }
  testABIcontract();
  return (
    <div className="App">
      合约查询,交易等流程
    </div>
  );
}

export default App;

(2)运行代码,吊起MetaMask钱包进行交易

(3)点击确认,控制台即输出当前写入结果,成功会输出当前写入的值

(4)钱包可对应查询到交易记录

二、额外web3基础操作如下

1. 获取最新的区块号

c 复制代码
import React from "react";
import { useEffect } from "react";
import logo from "./logo.svg";
import "./App.css";
import { JsonRpcProvider, ethers, BrowserProvider } from "ethers";

function App() {
  // 测试网地址
  var url = "https://xxxxxxxx";
  var customHttpProvider = new JsonRpcProvider(url);
  // 获取最新的区块号
  async function getLatestBlockNumber() {
    try {
      const blockNumber = await customHttpProvider.getBlockNumber();
      console.log("Latest block number:", blockNumber);
      return blockNumber;
    } catch (error) {
      console.error("Error getting block number:", error);
    }
  }
  getLatestBlockNumber();
  return (
    <div className="App">
      web3基础操作如下
    </div>
  );
}

export default App;

2. 查询平均 gas 价格

c 复制代码
import React from "react";
import { useEffect } from "react";
import logo from "./logo.svg";
import "./App.css";
import { JsonRpcProvider, ethers, BrowserProvider } from "ethers";

function App() {
  // 测试网地址
  var url = "https://xxxxxxxx";
  var customHttpProvider = new JsonRpcProvider(url);
  // 查询平均 gas 价格
  async function getAverageGasPrice() {
    const gasPrice = await customHttpProvider.getFeeData();
    console.log("Current average gas price: ", gasPrice);
  }
  getAverageGasPrice();
  return (
    <div className="App">
      web3基础操作如下
    </div>
  );
}

export default App;

3. 指定要查询的区块号或哈希,获取区块信息

c 复制代码
import React from "react";
import { useEffect } from "react";
import logo from "./logo.svg";
import "./App.css";
import { JsonRpcProvider, ethers, BrowserProvider } from "ethers";

function App() {
  // 测试网地址
  var url = "https://xxxxxxxx";
  var customHttpProvider = new JsonRpcProvider(url);
  // 指定要查询的区块号或哈希
  const blockNumberOrHash = 4211566 as any; // 或者使用区块哈希: "0xabss..."
  // 获取区块信息
  async function getBlockInfo(blockNumberOrHash: any) {
    try {
      const block = await customHttpProvider.getBlock(blockNumberOrHash);
      console.log("获取区块指定要查询的区块号信息: ", block);
    } catch (error) {
      console.error("Error fetching block: ", error);
    }
  }
  getBlockInfo(blockNumberOrHash);
  return (
    <div className="App">
      web3基础操作如下
    </div>
  );
}

export default App;

4. 钱包对钱包交易

c 复制代码
import React from "react";
import { useEffect } from "react";
import logo from "./logo.svg";
import "./App.css";
import { JsonRpcProvider, ethers, BrowserProvider } from "ethers";

function App() {
  // 测试网地址
  var url = "https://xxxxxxxx";
  var customHttpProvider = new JsonRpcProvider(url);
  async function metaToMetaTransation() {
    if (window.ethereum) {
      window.ethereum
        .request({ method: "eth_requestAccounts" })
        .then(async function (accounts: any) {
          // 连接钱包(如 MetaMask)
          const provider = new BrowserProvider(aaa.ethereum);
          const signer = await provider.getSigner(); // 获取签名者
          const address = accounts[0]; // 获取账户地址

          // 使用签名者查询余额
          provider.getBalance(address).then((balance) => {
            console.log(`余额: ${ethers.formatEther(balance)} ETH`);
          });

          // 构建交易
          const tx = {
            to: "0xxxxxxxsadasdasdadasdas", // 目标钱包地址
            value: ethers.parseEther("0.1"), // 转账金额(0.1 ETH)
          };

          // 发送交易
          const txResponse = await signer.sendTransaction(tx);
          console.log("交易哈希:", txResponse.hash);

          // 等待交易确认
          const receipt = await txResponse.wait();
          console.log("交易确认:", receipt.blockNumber);
        })
        .catch((error: any) => {
          console.error("Error connecting to MetaMask:", error);
        });
    } else {
      console.log("Please install MetaMask!");
    }
  }
  metaToMetaTransation();
  return (
    <div className="App">
      web3基础操作如下
    </div>
  );
}
export default App;

总结

测试网,主要用于协议开发、验证和质押测试,目前无法直接兑换成主网 ETH。 ‌

主要用途

专注于验证和质押功能测试,支持开发者在主网部署前测试协议升级。 ‌

代币限制

目前无官方兑换机制,开发者可通过该网络测试验证功能,但无法直接将测试币兑换为真实ETH。 ‌

相关推荐
数据与人工智能律师10 小时前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链
唤醒手腕1 天前
唤醒手腕 2025 年最新 Remix ERC 详细教程(更新中)
microsoft·区块链
搬砖魁首2 天前
密码学系列 - 零知识证明(ZKP) - NTT运算
区块链·密码学·零知识证明·fft·ntt
leijiwen2 天前
基于 Web3 + RWA 的品牌门店数字化范式
web3
安当加密2 天前
基于PostgreSQL的TDE透明加密解决方案:构建数据全生命周期的国密合规安全体系
安全·postgresql·区块链
安当加密2 天前
PostgreSQL透明加密(TDE)技术深度解析:从实现原理到国密合规实践
数据库·postgresql·区块链
数据与人工智能律师3 天前
数字人民币钱包抉择:匿名自由与实名安全的法律风险评估
大数据·人工智能·python·云计算·区块链
MicroTech20253 天前
微算法科技(NASDAQ MLGO)研究基于信任场模型的异构物联网区块链分片算法,提高区块链的可扩展性
区块链
OpenBuild.xyz3 天前
PBS, 以太坊的棘刺雕猴
web3
wilson_go3 天前
动态Vault
区块链