如何在以太坊上创建迷因币(MEME)?

区块链 2026-03-29

在文中,我们将开启一段激动人心的学习之旅,探讨如何使用OpenZeppelin和Remix集成开发环境(IDE)创建迷因币。您应该已经看过无数关于创建代币的视频和文章,但大多数都需要较长的引入才能切入主题。我们将直接开始!

什么是迷因币?

迷因币是一种加密货币,通常是因为一个玩笑或出于娱乐目的而创建。尽管如此,这类代币仍然可以获得巨大的关注度和实际的价值。它们通常基于互联网迷因,没有真正的用途或价值,严重依赖社区的支持。一个取得巨大成功的迷因币是源于一个玩笑而诞生的狗狗币,获得了巨大的知名度和价值。

迷因币创建步骤

我们将遵循以下步骤创建迷因币:

使用OpenZeppelin生成代币代码。

复制代码并将其粘贴到Remix集成开发环境。

在Remix中编译合约。

将合约从Remix部署到以太坊区块链。

在Etherscan上验证合约。

为去中心化交易所(如Uniswap)添加流动性。

我们将逐步介绍以上步骤的执行过程,确保您更好地理解每个阶段。更重要的是,您将快速有效地学习到核心知识。

准备工作

开始之前,请确保已经安装并设置好MetaMask钱包。您将需要MetaMask钱包与以太坊区块链交互。此外,您还需要熟悉OpenZeppelin和Remix集成开发环境,这两个工具是用来生成和部署代币合约的。

请注意:虽然迷因币的创建过程会比较有趣,但我们应该确保负责任且合乎道德地进行。迷因币可以快速获得现实世界的价值并吸引投资者。因此,负责和透明地管理您的项目非常重要。

使用OpenZeppelin向导生成LearnCoin(LC)代码

什么是OpenZeppelin向导?

OpenZeppelin向导是一个用户友好型工具,可利用OpenZeppelin合约库帮助创建、自定义和部署智能合约。它的界面简单直观,您可以通过填写特定的详细信息和选择所需的功能来生成代币代码。

生成LearnCoin代码

详细步骤如下:

点击此处访问OpenZeppelin向导。

代币类型选择“ERC20”。ERC20是以太坊区块链上常见的代币类型。这些代币遵守一套规则和标准,确保它们能与以太坊网络上的其他代币和去中心化应用(dApp)顺利交互。

270

配置以下设置:

Name:代币名称。在本例中为“LearnCoin”。

Symbol:代币符号。我们使用“LC”作为LearnCoin的代币符号。

Premint:您希望最初铸造的LearnCoin代币数量(在本例中,我们将其配置为与比特币一样,2100万)

选择您想要包含的功能:

Mintable:特权帐户将能够创造更多供应。

Burnable:此功能可以销毁代币,从而减少总供应量。

Pausable:特权帐户将能够暂停标记为whenNotPaused的功能,适用于紧急情况响应。

Permit:代币持有人可以允许第三方在不支付gas费的情况下从他们的账户转移代币。

Votes:跟踪历史余额,用于链上治理的投票,并将投票权委托给受信任的帐户。

Flash Minting:内置闪电贷款功能。只要在同一笔交易中归还,就可以借出代币而不需要抵押品。

Snapshots:特权账户将能够存储后续可检索的余额快照。对于链上投票,建议选择”Votes”功能。

访问控制:

Ownable:此功能赋予帐户(所有者)独家功能。

Roles:此功能可以为不同地址分配权限。

可升级性:此功能可以在不丢失存量数据的情况下升级智能合约。

Transparent:此功能使合约的治理更加透明。

UUPS:这是一种使用最小存储且需要更少gas的升级机制。

Security Contact:这是可以报告合约中潜在安全问题的电子邮件地址。

License:这是您的项目将使用的开源许可证。

我们配置好的代币将显示如下:

270

单击“Open in Remix”,在Remix中打开并开始创建代币代码。

270

进入Remix集成开发环境后,在左侧的Compiler页面上,单击“Advanced Configurations”并选中“Enable Optimization”。设置完成后,您就可以开始编译合约了。

恭喜!您现在已经拥有一个完整的、自定义的ERC20代币合约,接下来便可以在以太坊网络上进行部署!

请注意:OpenZeppelin向导生成的代码基于OpenZeppelin合约库,该库是安全和标准化智能合约代码的可信来源。尽管如此,在部署代码之前,您仍需对代码进行仔细审查和测试。

在Goerli测试网上部署LearnCoin(LC)

现在我们已经给我们的ERC20迷因币生成了代码,接下来就需要部署它。将它部署到以太坊主网之前,我们先在Goerli测试网上进行部署,这样便能够在无风险的环境中对代币进行测试。

什么是Goerli测试网?

Goerli测试网是以太坊的测试网之一,开发人员在将去中心化应用部署到主以太坊主网之前,会用Goerli测试网进行测试。与其他以太坊测试网一样,Goerli测试网与主网的运作方式类似,但测试网上的以太币没有真正的价值。

使用Goerli测试网能够确保代币按我们的预期运行,而无需花费真正的以太币,是开发和部署智能合约的关键步骤。

获取测试网以太币

在部署代币之前,我们需要在Metamask钱包中存入一些以太币。由于我们使用的是测试网,我们将使用可以免费获得的测试网以太币。

270

首先,您需要确保您的Metamask上有Goerli测试网。如果没有,只需单击“Add Network(添加网络)”并按照说明进行操作即可。您也可以直接使用此网站进行快速添加。

要获得免费的测试网以太币,请访问Goerli Faucet

按照网站上的说明在您的MetaMask钱包中接收免费的测试网以太币。

完成后您应该会看到这样的屏幕。您将收到0.02 GoerliETH

270

确保您的MetaMask钱包已连接到Goerli测试网。

部署合约

接下来,我们将使用Remix集成开发环境在Goerli测试网上部署合约:

返回到Remix集成开发环境。

单击屏幕左侧的“Deploy & run transactions”图标。

270

在下拉菜单中将环境设置为“Injected Provider - Metamask”。此选项将连接到Metamask(再次确认您的MetaMask钱包已连接到Goerli测试网)。

在“Contract”下拉菜单中,选择“LearnCoin”(编译成功后,您的合约将在此处显示)。

270

单击“Deploy”。

270

您应该已经从Goerli faucet收到了GoerliETH。您可以在Metamask上确认您的交易,并等待它在Goerli测试网上确认!交易确认后,您的合约将被部署到Goerli测试网!您的Remix控制台须如下图所示:

270

单击“View on Etherscan”便能找到您部署的合约。
270

恭喜!您已经在一个安全的测试网环境中创建了自己的ERC20代币!您可以在这里查看我们创建的Learn Coin迷因币:https://goerli.etherscan.io/address/0x70a1704f22c476d64c6dfd5ad2e1a75dc2928cf0

LearnCoin合约详解

合约结构

以下是我们的LearnCoin完整合约:

Python
// SPDX-License-Identifier: None
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Snapshot.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20FlashMint.sol";
contract LearnCoin is ERC20, ERC20Burnable, ERC20Snapshot, AccessControl, Pausable, ERC20Permit, ERC20Votes, ERC20FlashMint {
    bytes32 public constant SNAPSHOT_ROLE = keccak256("SNAPSHOT_ROLE");
    bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
    constructor() ERC20("Learn Coin", "LC") ERC20Permit("Learn Coin") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(SNAPSHOT_ROLE, msg.sender);
        _grantRole(PAUSER_ROLE, msg.sender);
        _mint(msg.sender, 21000000 * 10 ** decimals());
    }
    function snapshot() public onlyRole(SNAPSHOT_ROLE) {
        _snapshot();
    }
    function pause() public onlyRole(PAUSER_ROLE) {
        _pause();
    }
    function unpause() public onlyRole(PAUSER_ROLE) {
        _unpause();
    }
    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        whenNotPaused
        override(ERC20, ERC20Snapshot)
    {
        super._beforeTokenTransfer(from, to, amount);
    }
    // The following functions are overrides required by Solidity.
    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._afterTokenTransfer(from, to, amount);
    }
    function _mint(address to, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._mint(to, amount);
    }
    function _burn(address account, uint256 amount)
        internal
        override(ERC20, ERC20Votes)
    {
        super._burn(account, amount);
    }
}

我们部署的合约是一个名为LearnCoin的ERC20代币合约。它包含了OpenZeppelin合约库中的多个功能,如可销毁代币、快照、访问控制、可暂停代币、许可、投票和闪电铸币。

合约import语句

合约开头的import语句是从OpenZeppelin的合约库中导入代码:

ERC20.sol是ERC20代币的基础合约。

ERC20Burnable.sol使代币持有者能够销毁自己的代币。

ERC20Snapshot.sol支持创建代币余额的快照。

AccessControl.sol是一个用于管理对某些功能的访问权限的合约模块。

Pausable.sol可以暂停和取消暂停代币传输。

ERC20Permit.sol使持有者能够通过许可(permits)使用用户的代币。

ERC20Votes.sol为代币添加了投票功能。

ERC20FlashMint.sol可以实现快速铸造代币。

LearnCoin合约声明

LearnCoin合约继承了导入的OpenZeppelin合约。因此,LearnCoin合约将拥有OpenZeppelin合约的所有方法和属性。

角色声明

SNAPSHOT_ROLE和PAUSER_ROLE是常量值(使用keccak256哈希函数创建),表示合约中访问控制的特定角色。

构造函数

部署LearnCoin合约时,会调用构造函数。构造函数设置了代币的名称和符号,授予部署帐户(msg.sender)管理员、快照者和暂停者角色,并铸造了一定数量的初始代币供部署账户使用。

其他函数

snapshot,pause和unpause是允许具有相应角色的帐户执行某些操作的函数。snapshot函数可以创建快照,pause和unpause函数可以停止和重新启动代币转账。

重写

函数_beforeTokenTransfer、_afterTokenTransfer、_mint和_burn是从父合约重写的内部函数。它们执行LearnCoin合约的自定义逻辑。

_beforeTokenTransfer:在代币转账之前调用此函数,确保代币转账不会暂停。

_afterTokenTransfer:在代币转账之后调用此函数。此处,它是一个空函数,但可用于转账后立即执行的自定义逻辑。

_mint:此函数用于创建新代币并将其分配给给定的帐户。

_burn:此函数用于销毁来自给定帐户的代币。

运行LearnCoin合约

在之前的课程中,我们讨论了LearnCoin合约的结构,以及如何在Goerli测试网上部署该合约。在本章中,我们将带领大家在Remix以太坊集成开发环境中运行合约。

LearnCoin合约中有多个函数,您可以调用这些函数来执行不同的操作,例如暂停代币转账、取消暂停、创建快照等,但并非所有函数都可供所有用户使用。有些函数只能由具有特定角色的帐户(如合约所有者)调用。

我们来逐个分析各个函数的用法。在Remix左侧的面板中,单击“Deploy & Run Transactions”按钮,然后在下方找到已部署的合约。您将看到如下内容:

270

以上您可以调用或不能调用的所有函数。

合约函数介绍

LearnCoin合约包括一组可以从Remix集成开发环境调用的公共函数:

pause():可以调用此函数来暂停所有代币转账。它只能由具有PAUSER_ROLE(暂停者角色)的帐户调用。

unpause():可以调用此函数来取消暂停代币转账。它也只能由具有PAUSER_ROLE(暂停者角色)的帐户调用。

snapshot():此函数用于获取代币当前余额的快照。它只能由具有SNAPSHOT_ROLE(快照者角色)的帐户调用。

decimals():此函数返回代币使用的小数位数-通常为18。这是一个只读函数,任何人都可以调用。

DEFAULT_ADMIN_ROLE():该函数返回默认的管理员角色。这是一个只读函数,任何人都可以调用。

DOMAIN_SEPARATOR()、EIP712DOMAIN()、name()、PAUSER_ROLE()、SNAPSHOT_ROLE()、symbol()、totalSupply():这些都是只读函数,返回合约的各种信息。任何人都可以调用。

以下函数可以直接通过Remix集成开发环境来使用:

暂停和取消暂停代币转账

要暂停所有代币转账,请点击pause()函数。该函数只能由合约所有者调用,您需要通过MetaMask确认交易。

取消暂停的方式与暂停类似。只需点击unpause()函数并确认交易。

创建快照

要创建代币余额的快照,请点击snapshot()函数并确认交易。

查看合约信息

您可以通过调用以下函数查看合约的各种信息:

decimals():查看代币使用的小数位数。

DEFAULT_ADMIN_ROLE():查看默认管理员角色。

DOMAIN_SEPARATOR()、EIP712DOMAIN()、name()、PAUSER_ROLE()、SNAPSHOT_ROLE()、symbol()、totalSupply():查看合约的各种详细信息。

您可以通过单击Remix集成开发环境中的名称来调用这些函数。

例如,您可以通过单击totalSupply,查看代币的总供应,输出结果将显示如下:

270

结论

我们首先介绍了迷因币的概念。随后,我们深入探讨了OpenZeppelin,OpenZeppelin是经过严格测试的安全的智能合约模板。同时,我们还演示了如何利用OpenZeppelin向导创建具有各种功能的个性化ERC20代币。接下来,我们以LearnCoin合约为例,重点介绍了其独特的属性和功能,包括合约所包含的各种角色和函数,帮助大家更好地掌握如何利用这些函数进行有效的代币管理。

免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与本网无关。

相关文章