上周三晚上,我正瘫在沙发上刷手机,突然收到朋友老王的微信:"兄弟,我司要发个区块链会员积分,能不能教我用Truffle搞个代币?"这让我想起三年前自己初学智能合约时,对着文档抓耳挠腮的日子。今天咱们就来聊聊,怎么像做蛋糕一样轻松搞出个ERC20代币——只不过这次的"烤箱"是区块链。

准备你的数字厨房
就像做菜要先备齐锅碗瓢盆,咱们先来装必要的工具。打开你那台贴满贴纸的笔记本电脑,跟着我敲命令:
- Node.js 16+和npm 8+(建议用nvm管理版本)
- 代码编辑器(我习惯用VSCode,因为插件市场能找到会卖萌的代码补全)
- 命令行终端(Windows用户可以用Git Bash,别跟自己过不去)
curl -o | bash nvm install 18 npm install -g truffle
创建你的项目空间
在你存放"学习资料"的文件夹里新建个目录,比如我习惯叫eth_playground:
mkdir my_first_token cd my_first_token truffle init
这时候你会看到目录里长出了这些文件:
| contracts/ | 存放智能合约的摇篮 |
| migrations/ | 部署脚本的集装箱 |
| test/ | 测试用例的游乐场 |
| truffle-config.js | 项目的控制面板 |
给区块链找个试验场
本地开发我推荐Ganache,它能给你10个装满测试币的钱包地址。安装完打开后,你会看到像游戏金币一样的账户列表——别担心,这些ETH随便花。
接着修改truffle-config.js:
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "
};代币的基因编码
在contracts目录新建MyToken.sol,咱们来写代币的DNA:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
// 其他必要函数...
contract MyToken is IERC20 {
string public name = "CoffeeCoin";
string public symbol = "CFE";
uint8 public decimals = 18;
mapping(address => uint256) private _balances;
uint256 private _totalSupply;
constructor(uint256 initialSupply) {
_totalSupply = initialSupply 10uint256(decimals);
_balances[msg.sender] = _totalSupply;
function transfer(address recipient, uint256 amount) public override returns (bool) {
require(_balances[msg.sender] >= amount, "穷鬼别转账");
_balances[msg.sender] -= amount;
_balances[recipient] += amount;
emit Transfer(msg.sender, recipient, amount);
return true;
// 实现其他必要函数...让代码上链的魔法
在migrations目录创建2_deploy_contracts.js:
const MyToken = artifacts.require("MyToken");
module.exports = function (deployer) {
deployer.deploy(MyToken, 1000000); // 发行100万枚
};运行迁移命令时,记得先启动Ganache:
truffle migrate --network development
给你的代币做体检
在test目录写个测试用例,就像给刚出生的数字宝宝做健康检查:
const MyToken = artifacts.require("MyToken");
contract("MyToken", accounts => {
it("应该正确初始化代币", async => {
const instance = await MyToken.deployed;
const totalSupply = await instance.totalSupply;
assert.equal(totalSupply.toString, '000', "初始发行量不对");
});
it("应该能转账", async => {
const instance = await MyToken.deployed;
await instance.transfer(accounts, 100, { from: accounts });
const balance = await instance.balanceOf(accounts);
assert.equal(balance.toString, '100', "转账金额不对");
});
});运行测试时,你会看到类似这样的输出:
Contract: MyToken ✓ 应该正确初始化代币 ✓ 应该能转账 (102ms)
与代币互动的小窍门
打开Truffle控制台和你的代币对话:
truffle console --network development
let instance = await MyToken.deployed
let balance = await instance.balanceOf("0xYourAddress")
balance.toString试着给你的朋友转点代币,记得在错误信息里留点彩蛋——比如当余额不足时显示"账户余额比我的钱包还干净"。
上主网前的安全须知
- 用Slither或MythX做安全扫描
- 在测试网(Rinkeby/Kovan)先试水
- gas费估算别相信第一次报价
窗外的天色渐渐暗下来,咖啡杯见了底。看着命令行里跳动的日志,突然发现区块链开发就像拼乐高——每个智能合约都是独特的积木块。当你成功部署第一个代币时,记得给自己烤个蛋糕庆祝,毕竟在数字世界"发行货币"这件事,二十年前还只存在于科幻小说里。
郑重声明:
以上内容均源自于网络,内容仅用于个人学习、研究或者公益分享,非商业用途,如若侵犯到您的权益,请联系删除,客服QQ:841144146
相关阅读
福州麻将入门与进阶技巧指南
2026-02-12 23:42:07《CSR2》进阶生存指南:从菜鸟到车神
2026-02-05 13:34:32海贼冒险指南:新手到船长全方位攻略
2026-01-14 17:02:27揭秘田园牧歌:避开游戏深坑指南
2025-12-21 14:35:38《疯狂磁铁大作战3D》攻略指南
2025-12-07 14:55:48