Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🟪 NFT Project — Foundry (Forge) Implementation

Triển khai NFT chuẩn ERC721 (OpenZeppelin) sử dụng Foundry / Forge.


📦 Yêu cầu hệ thống

  • Foundry toolchain: curl -L https://foundry.paradigm.xyz | bash sau đó foundryup
  • Git (Foundry dùng git submodule để quản lý dependency)

📁 Cấu trúc thư mục

foundry-nft/
├── src/                  # Smart contract (NFT.sol)
├── script/                # Forge script để deploy (Deploy.s.sol)
├── test/                   # Unit test (Solidity-native, Forge test)
├── lib/                    # Dependency (OpenZeppelin, forge-std...)
├── foundry.toml            # Cấu hình project
└── .env                    # Biến môi trường (KHÔNG commit)

⚙️ Cài đặt

cd foundry-nft
forge install

Nếu cần cài thêm OpenZeppelin:

forge install OpenZeppelin/openzeppelin-contracts --no-commit

Tạo file .env:

PRIVATE_KEY=<your_wallet_private_key>
SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/<project_id>
ETHERSCAN_API_KEY=<your_key>

Load biến môi trường trước khi chạy lệnh:

source .env

🛠️ Compile Contract

forge build

✅ Unit Test

forge test -vvv

-vvv để hiện log chi tiết (traces) khi test fail hoặc dùng console.log.

VM Pranking

Foundry cho phép giả lập địa chỉ người gọi hàm bằng vm.prank():

vm.prank(userAddress);
nft.mint(tokenId);

Dùng để test quyền hạn (access control) — ví dụ kiểm tra chỉ owner mới được mint.


🚀 Deploy bằng Forge Script

Lưu ý: Goerli đã deprecated, dùng Sepolia thay thế.

forge script script/Deploy.s.sol \
  --rpc-url $SEPOLIA_RPC_URL \
  --private-key $PRIVATE_KEY \
  --broadcast \
  --verify \
  --etherscan-api-key $ETHERSCAN_API_KEY

Hoặc deploy an toàn hơn bằng seed phrase / keystore thay vì private key thô:

forge script script/Deploy.s.sol \
  --rpc-url $SEPOLIA_RPC_URL \
  --account <keystore_account_name> \
  --broadcast \
  --verify

🔍 Tương tác qua Cast

cast call <contract_address> "ownerOf(uint256)(address)" 1 --rpc-url $SEPOLIA_RPC_URL

📄 License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages