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

相关推荐
龙山云仓5 小时前
迈向生成式软件制造新纪元:行动纲领与集结号
大数据·人工智能·机器学习·区块链·制造
我的offer在哪里19 小时前
权力的蒲公英效应:去中心化思想的演进与未来图景
去中心化·区块链
vlln21 小时前
【调研】加密货币/BTC/区块链的发展历史(2025)
区块链·密码学
RainWeb31 天前
第7章:Web3.0 前端开发:连接钱包与交互(2025年10月最新版)
程序员·区块链
OpenBuild.xyz2 天前
区块链分层学:新的开始
区块链
leijiwen2 天前
S11e Network 商业模型:AI × Web3 × RWA 驱动的实体经济新范式
人工智能·web3·区块链
ZFJ_张福杰2 天前
【Flutter】APP的数据安全(基于Flutter 交易所APP的总结)
flutter·web3·区块链·app·交易所
StockPP3 天前
获取美国股票数据API对接完全指南
web3·区块链
数据与人工智能律师4 天前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链