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

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日

相关推荐

  • 欧意钱包首页图片大全,视觉化呈现品牌价值与功能引导

    欧意钱包首页图片大全,视觉化呈现品牌价值与功能引导 在数字支付与资产管理工具日益普及的今天,欧意钱包作为一款集安全、便捷与智能化于一体的金融服务平台,其首页设计不仅是用户接触产品的第一窗口,更是传递品牌理念、引导功能使用的重要载体,首页图片作为视觉元素的核

    2026-10-01 09:30:02
    1 0
  • 欧e钱包如何买代币产品,安全操作指南与注意事项

    欧e钱包如何买代币产品,安全操作指南与注意事项 在加密货币市场逐渐规范的背景下,越来越多投资者通过合规钱包参与代币交易,欧e钱包(假设为支持合规交易的欧洲地区钱包,需以实际平台功能为准)凭借其便捷的跨境服务和多重安全保障,成为用户购买代币产品的常用工具,本文

    2026-10-01 09:30:02
    1 0
  • 以太坊钱包长什么样?从界面到功能的全面解析

    以太坊钱包长什么样?从界面到功能的全面解析 在加密货币的世界里,以太坊钱包就像是你的“数字银行账户+保险箱”——它不仅存储你的ETH(以太币)和各类ERC代币,更掌握着访问去中心化应用(DApp)、参与DeFi(去中心化金融)、NFT交易等生态服务的“钥匙”,以太坊钱包具体

    2026-10-01 09:30:02
    2 0
  • 亿欧Web3钱包链接在哪里找?附详细获取指南

    亿欧Web3钱包链接在哪里找?附详细获取指南 随着Web3.0时代的到来,数字资产管理和去中心化应用(DApp)的交互成为越来越多用户的需求,亿欧Web3钱包作为连接用户与区块链生态的重要工具,其官方入口的获取至关重要,本文将详细介绍亿欧Web3钱包链接的查找方法、注意事项及相

    2026-10-01 09:30:02
    1 0
  • 欧e钱包转化到交e所,数字资产流转的便捷实践

    欧e钱包转化到交e所,数字资产流转的便捷实践 在数字经济快速发展的今天,数字资产的便捷流转已成为用户的核心需求,欧e钱包作为一款广受欢迎的数字资产管理工具,其与交e所(交易所)的转化机制,为用户提供了高效、安全的资产转移体验,成为连接个人数字资产与市场交易的重

    2026-10-01 09:30:02
    1 0
  • 一欧钱包地址怎么看的啊?新手必看指南

    一欧钱包地址怎么看的啊?新手必看指南 在加密货币世界中,钱包地址是接收资产的“唯一身份证”,就像银行卡号一样重要,对于刚接触“一欧钱包”(通常指支持欧元及多币种的加密钱包,如Trust Wallet、MetaMask等兼容欧元的钱包)找到自己的钱包地址是第一步,本文以主流钱包为

    2026-10-01 09:30:02
    1 0

发表回复

8206

评论列表(0条)

    暂无评论

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

立即下载