foundry创建项目

目标:用Foundry创建并部署一个ERC20代币​​

​​第一步:安装Foundry(5分钟)​​

​​打开终端(Mac/Linux)或WSL(Windows),逐行执行:​​

1. 安装Foundry

curl -L https://foundry.paradigm.xyz | bash

2. 重启终端,然后运行

foundryup

3. 验证安装(应该显示版本号)

forge --version

cast --version

anvil --version

​​如果看到版本号,恭喜!安装成功!​​

​​第二步:创建项目(2分钟)​​

1. 创建项目文件夹

mkdir my-first-token

cd my-first-token

2. 用Foundry初始化项目

forge init

3. 查看生成的文件结构

ls -la

​​你会看到这样的文件夹结构:​​

my-first-token/

├── src/ # 放智能合约代码

├── script/ # 放部署脚本

├── test/ # 放测试代码

├── lib/ # 依赖库

└── foundry.toml # 配置文件

​​第三步:写一个简单代币合约(5分钟)​​

​​在 src/MyToken.sol文件中写入:​​

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

import "forge-std/console.sol"; // 用于调试输出

contract MyToken {

string public name = "My First Token";

string public symbol = "MFT";

uint8 public decimals = 18;

uint256 public totalSupply = 1000000 * 10**18; // 100万代币

复制代码
mapping(address => uint256) public balanceOf;

event Transfer(address indexed from, address indexed to, uint256 value);

constructor() {
    balanceOf[msg.sender] = totalSupply; // 部署者获得所有代币
    console.log("代币部署完成,总供应量:", totalSupply);
}

function transfer(address to, uint256 amount) external returns (bool) {
    require(balanceOf[msg.sender] >= amount, "余额不足");
    
    balanceOf[msg.sender] -= amount;
    balanceOf[to] += amount;
    
    emit Transfer(msg.sender, to, amount);
    return true;
}

}

​​第四步:编译合约(1分钟)​​

在项目根目录执行

forge build

​​看到 Success表示编译成功!​​

​​第五步:测试合约(3分钟)​​

​​在 test/MyToken.t.sol文件中写入:​​

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

import "forge-std/Test.sol";

import ".../src/MyToken.sol";

contract MyTokenTest is Test {

MyToken token;

address owner = address(0x123); // 测试账户

复制代码
function setUp() public {
    token = new MyToken(); // 每个测试前部署新合约
}

function testInitialBalance() public {
    // 测试部署者是否有全部代币
    assertEq(token.balanceOf(address(this)), 1000000 * 10**18);
}

function testTransfer() public {
    address alice = address(0x456);
    
    // 转账测试
    token.transfer(alice, 1000);
    
    // 验证余额
    assertEq(token.balanceOf(alice), 1000);
    assertEq(token.balanceOf(address(this)), 1000000 * 10**18 - 1000);
}

}

​​运行测试:​​

forge test

​​看到绿色对勾和PASS表示测试通过!​​

​​第六步:部署到测试网(10分钟)​​

​​6.1 启动本地测试网络​​

新开一个终端窗口

anvil

​​你会看到10个测试账户和私钥(记下第一个账户的私钥)​​

​​6.2 配置环境变量​​

回到原终端,设置环境变量

export PRIVATE_KEY=刚才记下的私钥(去掉0x前缀)

export RPC_URL=http://127.0.0.1:8545

​​6.3 部署合约​​

forge create src/MyToken.sol:MyToken --private-key PRIVATE_KEY --rpc-url RPC_URL

​​部署成功后,你会看到:​​

Deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3

Transaction hash: 0x...

​​第七步:与合约交互(5分钟)​​

​​用cast工具测试转账:​​

1. 查询部署者余额

cast call <合约地址> "balanceOf(address)" --rpc-url $RPC_URL <部署者地址>

2. 转账给另一个账户

cast send <合约地址> "transfer(address,uint256)" <接收地址> 1000 --private-key PRIVATE_KEY --rpc-url RPC_URL

3. 验证转账成功

cast call <合约地址> "balanceOf(address)" --rpc-url $RPC_URL <接收地址>

部署:

1. 重新设置环境变量(根据图片中的指导)

export PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 # 去掉0x前缀的私钥

export RPC_URL=http://127.0.0.1:8545

2. 验证变量是否设置成功

echo $RPC_URL # 应该显示 http://127.0.0.1:8545

echo $PRIVATE_KEY # 应该显示私钥内容

添加 --broadcast 参数进行真实部署

forge create src/MyToken.sol:MyToken --private-key PRIVATE_KEY --rpc-url RPC_URL --broadcast

测试

cast send 0x5FbDB2315678afecb367f032d93F642f64180aa3 "transfer(address,uint256)(bool)" 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 1000 --private-key ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --rpc-url http://127.0.0.1:8545

相关推荐
ithadoop12 小时前
Solana入门:区块链新手速成指南(第二阶段:开发入门)
rust·web3·区块链·智能合约·solana
Bczheng12 天前
二十.读写交易索引和验证交易
区块链
曦月逸霜2 天前
区块链技术与应用学习笔记(持续更新中)
笔记·学习·区块链
Web3VentureView2 天前
SYNBO维港私享局:在香港Web3嘉年华最后一天,打开链上一级市场的共识现场
人工智能·web3·区块链·加密货币·synbo
TechubNews3 天前
专访新火集团首席经济学家付鹏:解读比特币资产属性、香港楼市与普通人理财建议——Techub News对话实录
人工智能·区块链
王苏安说钢材A3 天前
无锡佳钛合不锈钢有限公司不锈钢焊管厂家
区块链
财迅通Ai3 天前
能源板块强势领涨,汇添富能源ETF(159930.SZ)单日大涨3.41%
区块链·能源·中国神华·陕西煤业
Web3VentureView3 天前
SYNBO亮相香港《前瞻》活动,联手HashKey共筑链上原生一级市场新范式
人工智能·web3·区块链·加密货币·synbo
每日综合3 天前
Web3 多链时代,安全与体验如何兼得?UKey Wallet 的“解题思路”
安全·web3·区块链
MicroTech20253 天前
微算法科技(NASDAQ :MLGO)基于量子隐形传态的区块链共识机制:量子时代下的信任重构
科技·重构·区块链