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

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 Wallet的冷存储功能)作为市场主流选择之一,其“能否被查询”的问题,本质是关于资产透明度与安全边界的探讨,

    2026-10-24 04:10:01
    2 0
  • TP钱包与欧逸钱包转账难题,原因解析及解决方案

    TP钱包与欧逸钱包转账难题,原因解析及解决方案 在数字资产管理领域,TP钱包和欧逸钱包作为两款流行的加密货币钱包,各自拥有庞大的用户群体,近期不少用户反映,在使用TP钱包尝试向欧逸钱包转账时遭遇了阻碍,本文将深入探讨这一现象背后的原因,并提出相应的解决策略。 技术

    2026-10-24 04:10:01
    0 0
  • 如何将一欧放入钱包,从实物到数字的实用指南

    如何将一欧放入钱包,从实物到数字的实用指南 “一欧”看似微不足道,却是欧洲经济中最基础的货币单位,承载着日常交易的实用价值,将“一欧”放入钱包,不仅是简单的收纳,更是对财富管理意识的启蒙,无论是实体硬币还是数字资产,掌握正确方法能让每一分钱都物尽其用。 实体

    2026-10-24 02:10:01
    4 0
  • 欧一钱包UID,数字身份的隐形通行证

    欧一钱包UID,数字身份的隐形通行证 在数字支付浪潮席卷全球的今天,欧一钱包作为跨境支付领域的创新产品,其独特的UID(用户识别码)系统正悄然重塑用户的数字身份标识,这串由字母与数字组合的12位字符,不仅是账户的数字身份证,更是连接全球金融生态的关键节点。 UID系统采

    2026-10-24 02:10:01
    4 0
  • 欧艺钱包APP的研发地区,聚焦科技创新与合规并重

    欧艺钱包APP的研发地区,聚焦科技创新与合规并重 在数字支付工具快速发展的背景下,欧艺钱包APP的研发地区成为用户关注的焦点,据了解,欧艺钱包APP的研发主体主要依托于中国科技创新核心区域——深圳,这一选择不仅源于当地成熟的互联网产业生态,更与政策支持、人才储备及技

    2026-10-24 00:10:01
    2 0
  • 艺欧钱包密码重置全指南,安全找回账户访问权限

    艺欧钱包密码重置全指南,安全找回账户访问权限 在使用艺欧钱包时,忘记密码或需要重置密码是常见问题,为确保账户安全,密码重置需通过官方正规渠道操作,避免第三方风险,以下是详细的密码重置流程及注意事项: 通过官方APP重置密码(推荐) 打开艺欧钱包APP,进入登录界面,

    2026-10-23 22:10:01
    4 0

发表回复

8206

评论列表(0条)

    暂无评论

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

立即下载