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

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-Identifierpragma 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)钱包作为主流加密货币钱包之一,其密钥与密码的安全性直接关系着用户资产的安全,许多新用户常会问:“欧意钱包的密钥在哪看?密码又该如何管理?”本文将结合官方规则与安全原则,详细解答相关

    2026-07-30 06:30:01
    1 0
  • 安全便捷的跨境支付新选择,易欧钱包官方网站下载指南

    安全便捷的跨境支付新选择,易欧钱包官方网站下载指南 在全球化加速的今天,跨境支付需求日益增长,一款安全、高效的数字钱包成为许多用户的刚需,易欧钱包作为专注于跨境金融服务的工具,凭借其便捷的操作和多重安全保障,受到越来越多用户的青睐,本文将详细介绍如何通过易

    2026-07-30 06:30:01
    1 0
  • 欧逸钱包,安全便捷的数字资产管理工具下载指南

    欧逸钱包,安全便捷的数字资产管理工具下载指南 在数字化时代,个人财务管理变得越来越重要,随着科技的进步,各种数字资产管理工具应运而生,欧逸钱包”以其安全性高、操作便捷的特点受到了广泛关注,本文将为您提供关于如何下载和使用欧逸钱包的全面指导。 什么是欧逸钱包?

    2026-07-30 06:30:01
    1 0
  • 欧e连接钱包,开启欧洲数字生活新体验

    欧e连接钱包,开启欧洲数字生活新体验 在全球化与数字化的浪潮下,跨境支付与数字资产管理已成为人们生活与工作中的重要需求,欧e连接钱包(EU Connect Wallet)应运而生,旨在为用户提供连接欧洲与全球的便捷数字金融服务,打造一站式、安全高效的移动支付解决方案。 欧e连接

    2026-07-30 06:30:01
    1 0
  • 从欧一到钱包,数字资产转移的实用指南

    从欧一到钱包,数字资产转移的实用指南 在数字资产管理的实践中,“欧一”(通常指欧洲地区的一类数字资产或账户体系)向“钱包”转移,是许多用户关注的核心操作,这一过程本质上是将资产从特定平台或账户体系,自主可控地转移到个人加密钱包中,以实现更安全的管理或灵活的用

    2026-07-30 06:30:01
    1 0
  • 欧e有哪些钱包?一文梳理主流数字货币钱包选择

    欧e有哪些钱包?一文梳理主流数字货币钱包选择 在数字货币领域,“欧e”并非特指某一单一钱包,而是泛指支持欧洲地区用户、符合欧盟金融监管框架的电子钱包及数字货币钱包解决方案,这类钱包通常兼顾合规性、安全性与易用性,满足用户存储、转账、支付及DeFi交互等需求,以下

    2026-07-30 06:30:01
    1 0

发表回复

8206

评论列表(0条)

    暂无评论

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

立即下载