手把手教你在以太坊上发行自己的钱包(创建与部署智能合约钱包)

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

手把手教你在以太坊上发行自己的钱包(创建与部署智能合约钱包)

手把手教你在以太坊上发行自己的钱包(创建与部署智能合约钱包)

在以太坊乃至整个Web3的世界里,“钱包”是用户与区块链交互的核心,它不仅用于存储和管理以太坊(ETH)及各类代币,更是用户身份、资产和参与去中心化应用(DApps)的入口,很多人以为“发行钱包”是指像银行一样开立一个账户,但在以太坊的语境下,我们通常指的是创建和部署一个自定义的智能合约钱包,这可以是一个具有特定功能、规则或品牌标识的钱包。

本文将采用手把手的方式,带你一步步了解并实践如何在以太坊上发行一个属于自己的智能合约钱包。

准备工作:在开始之前,你需要什么?

在动手之前,请确保你已经具备以下条件:

  1. 基础的区块链知识:理解以太坊、智能合约、地址、私钥、Gas等基本概念。
  2. 编程能力:熟悉Solidity语言(以太坊智能合约编程语言)和JavaScript/TypeScript(用于与合约交互)。
  3. 开发环境:
    • Node.js 和 npm/yarn:用于运行JavaScript环境和包管理。
    • VS Code:代码编辑器,推荐安装Solidity相关插件。
    • Hardhat 或 Truffle:以太坊开发框架,用于编译、部署和测试智能合约,本文将以Hardhat为例。
    • MetaMask:浏览器钱包插件,用于与以太坊网络交互、管理私钥和支付Gas费。
  4. 测试网络ETH:你需要在以太坊测试网络(如Goerli、Sepolia)中获得一些免费的ETH,用于支付部署合约时的Gas费,你可以从对应的测试网水龙头获取。

第一步:创建一个新的Hardhat项目

  1. 打开终端,创建一个新的项目目录并进入:

    mkdir my-eth-wallet
    cd my-eth-wallet
  2. 初始化Hardhat项目:

    npx hardhat init

    按照提示选择 "Create a basic sample project",并安装依赖。

第二步:编写智能合约钱包代码

Hardhat初始化后会有一个contracts目录,我们在这里创建我们的钱包合约。

  1. 在contracts目录下创建一个新文件,例如MyWallet.sol。

  2. 编写一个简单的钱包合约,这里我们创建一个基础的签名钱包,它允许通过指定所有者来控制资金,并能发送ETH和代币。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**MyWallet
 * @dev 一个简单的以太坊智能合约钱包,继承自Ownable,由所有者控制。
 */
contract MyWallet is Ownable {
    constructor(address initialOwner) Ownable(initialOwner) {}
    /**
     * @dev 接收ETH的fallback函数
     */
    receive() external payable {}
    /**
     * @dev 获取合约中存储的ETH余额
     * @return 合约的ETH余额(以wei为单位)
     */
    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }
    /**
     * @dev 发送ETH指定地址
     * @param recipient 接收ETH的地址
     * @param amount 发送的ETH数量(以wei为单位)
     */
    function sendETH(address payable recipient, uint256 amount) public onlyOwner {
        require(recipient != address(0), "MyWallet: recipient is the zero address");
        require(amount <= getBalance(), "MyWallet: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "MyWallet: ETH transfer failed");
    }
    /**
     * @dev 发送ERC20代币指定地址(需要合约已授权)
     * @param tokenAddress ERC20代币的合约地址
     * @param recipient 接收代币的地址
     * @param amount 发送的代币数量
     */
    function sendToken(
        address tokenAddress,
        address recipient,
        uint256 amount
    ) public onlyOwner {
        require(recipient != address(0), "MyWallet: recipient is the zero address");
        require(amount > 0, "MyWallet: amount must be greater than zero");
        IERC20 token = IERC20(tokenAddress);
        require(token.balanceOf(address(this)) >= amount, "MyWallet: insufficient token balance");
        bool success = token.transfer(recipient, amount);
        require(success, "MyWallet: token transfer failed");
    }
}

代码解释:

  • SPDX-License-Identifier 和 pragma solidity:许可证和Solidity版本声明。
  • import:导入OpenZeppelin库中的Ownable(所有权管理)和IERC20(ERC20代币接口)合约,使用OpenZeppelin可以避免重复造轮子,提高安全性。
  • contract MyWallet is Ownable:我们的钱包合约继承自Ownable,这意味着合约会有一个所有者(owner),只有所有者才能执行某些关键操作。
  • constructor(address initialOwner):构造函数,在部署时设置合约的所有者。
  • receive() external payable:使合约能够接收ETH。
  • getBalance():查看合约当前的ETH余额。
  • sendETH():所有者调用此函数向指定地址发送ETH。
  • sendToken():所有者调用此函数向指定地址发送ERC20代币。

第三步:编译智能合约

  1. 确保你已经安装了OpenZeppelin合约:

    npm install @openzeppelin/contracts
  2. 在终端中运行Hardhat compile命令:

    npx hardhat compile

    如果编译成功,你会在artifacts目录下看到编译好的合约字节码和ABI(应用二进制接口)。

第四步:编写部署脚本

  1. 在scripts目录下创建一个新的部署脚本,例如deploy.js。

  2. 编写部署脚本:

async function main() {
  // 获取部署时指定的所有者地址(通常是部署者的地址)
  const [deployer] = await ethers.getSigners();
  console.log("Deploying contracts with the account:", deployer.address);
  console.log("Account balance:", (await deployer.getBalance()).toString());
  // 部署MyWallet合约
  const MyWallet = await ethers.getContractFactory("MyWallet");
  const initialOwner = deployer.address; // 将部署者设为初始所有者
  const myWallet = await MyWallet.deploy(initialOwner);
  await myWallet.deployed();
  console.log("MyWallet deployed to:", myWallet.address);
}
main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

代码解释:

  • ethers.getSigners():获取Hardhat网络中的账户(默认第一个是部署者)。
  • ethers.getContractFactory("MyWallet"):获取合约工厂,用于部署合约。
  • MyWallet.deploy(initialOwner):部署合约,并传入初始所有者地址。
  • myWallet.deployed():等待合约部署完成。
  • myWallet.address:输出部署后的合约地址,这就是你的“钱包地址”!

第五步:部署合约到测试网

  1. 配置Hardhat网络: 打开hardhat.config.js文件,添加测试网络的配置(以Goerli测试网为例,你需要替换成你自己的RPC URL和私钥,私钥要妥善保管!):
require("@nomicfoundation/hardhat-toolbox");
require('dotenv').config(); // 使用dotenv管理环境变量
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.20",
  networks: {
    goerli: {
      url: process.env.GOERLI_RPC_URL, // 从环境变量读取
      accounts: [process.env.PRIVATE_KEY] // 从环境变量读取,测试网私钥不要暴露!
    }
    // 你可以添加其他测试网,如sepolia等
  }
};
  1. 创建环境变量文件: 在项目根目录创建.env文件(记得将.env添加到.gitignore中,不要上传到代码仓库!):

    GOERLI_RPC_URL=https://goerli.infura.io/v3/YOUR_INFURA_PROJECT_ID
    PRIVATE_KEY=你的测试网私钥(MetaMask导出的)

    你可以从Infura、Alchemy等服务提供商获取免费的RPC URL,MetaMask中可以导出私钥(极度谨慎,仅用于测试!)。

  2. 安装dotenv:

    npm install dotenv
  3. 部署合约:

本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/262199.html

上一篇 2026年07月18日
下一篇 2026年07月18日

相关推荐

  • 欧OKX我的钱包在哪?新手必看的快速找回指南

    欧OKX我的钱包在哪?新手必看的快速找回指南 “欧OKX我的钱包在哪?”——这句话可能是许多刚接触欧易(OKX)的新用户最常问的问题,无论是初次注册的兴奋,还是切换设备时的慌乱,找不到钱包入口确实会让人焦虑,别担心,钱包其实一直“藏”在你的账户里,只需三步就能轻松定

    2026-11-14 04:10:02
    1 0
  • 欧逸上钱包,安全性能深度解析

    欧逸上钱包,安全性能深度解析 在数字支付日益普及的今天,选择一个安全可靠的数字钱包对于保护个人财务信息至关重要,欧逸上钱包作为市场上的一款新兴数字钱包产品,其安全性成为众多用户关注的焦点,本文将从多个维度深入探讨欧逸上钱包的安全性能,以期为读者提供一个全面

    2026-11-14 02:10:01
    3 0
  • OKX欧钱包地址在哪里?一文详解查看方法与注意事项

    OKX欧钱包地址在哪里?一文详解查看方法与注意事项 OKX欧钱包作为全球领先的数字资产钱包,支持多种链路的资产存储与转移,而“钱包地址”是接收加密资产的核心标识,很多用户初次使用时会问:“OKX欧钱包地址在哪里?”不同设备(手机端/电脑端)和不同链路(BTC/ETH/USDT等

    2026-11-14 02:10:01
    2 0
  • 欧逸,从钱包到数字支付的革新之旅

    欧逸,从钱包到数字支付的革新之旅 在数字化浪潮席卷全球的今天,传统的钱包正逐渐被更加便捷、安全的电子支付方式所取代。“欧逸”作为一款新兴的数字支付工具,以其独特的创新理念和强大的功能特性,成功实现了从传统钱包到现代数字支付的华丽转变,引领了一场支付方式的革命

    2026-11-14 02:10:01
    3 0
  • TP钱包至欧逸交易所的转账指南

    TP钱包至欧逸交易所的转账指南 在数字货币的世界里,安全、便捷的交易渠道是每一位投资者追求的目标,TP钱包作为一款广受欢迎的数字资产管理工具,其与欧逸交易所的合作为用户提供了无缝的交易体验,本文将详细介绍如何通过TP钱包向欧逸交易所进行转账操作,确保您的资产转移既

    2026-11-14 00:10:01
    5 0
  • 欧e钱包资金变动常见原因解析

    欧e钱包资金变动常见原因解析 欧e钱包作为一款便捷的电子支付工具,用户资金的变动是日常使用中的常见现象,其背后涉及多种操作场景和系统机制,了解这些变动原因,有助于用户更好地管理账户资金,避免不必要的困惑。 主动操作是资金变动最直接的原因,用户通过欧e钱包进行消费

    2026-11-13 22:10:01
    6 0

发表回复

8206

评论列表(0条)

    暂无评论

binance币安交易所
已有2000万用户加入币安交易所

立即下载