A mock implementation of USDF (USD stablecoin) for testing and development purposes. This repository provides two versions of mock USDF tokens with 6 decimals (matching real USDF):
- MockUSDF - LayerZero OFT (Omnichain Fungible Token) version for cross-chain functionality
- SimpleMockUSDF - Standard ERC20 version without LayerZero dependencies
- ✅ ERC20 token with 6 decimals (matches real USDF)
- ✅ Mint/burn functions for unlimited testing tokens (owner only)
- ✅ ERC20Permit for gasless approvals
- ✅ Ownable for access control
- ✅ LayerZero OFT support (MockUSDF version only)
# Clone the repository
git clone https://github.com/0xLisanAlGaib/mock-USDF.git
cd mock-USDF
# Install dependencies
forge installUse this version for testing on any EVM chain, including those without LayerZero support:
# Deploy to Flow testnet
forge script script/DeploySimpleMockUSDF.s.sol --rpc-url flow-testnet --broadcast
# Deploy to any EVM chain
forge script script/DeploySimpleMockUSDF.s.sol --rpc-url <YOUR_RPC_URL> --private-key <YOUR_PRIVATE_KEY> --broadcastUse this version on chains with LayerZero V2 support for cross-chain functionality:
# Deploy to Sepolia (LayerZero endpoint: 0x6EDCE65403992e310A62460808c4b910D972f10f)
forge script script/DeploymUSDF.s.sol --rpc-url https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY --broadcast
# Deploy to Base Sepolia (LayerZero endpoint: 0x6EDCE65403992e310A62460808c4b910D972f10f)
forge script script/DeploymUSDF.s.sol --rpc-url https://sepolia.base.org --broadcastBoth versions automatically mint 1 million mUSDF to the deployer address upon deployment.
// As the contract owner, mint tokens to any address
token.mint(recipientAddress, amount);
// Example: Mint 100,000 mUSDF (remember 6 decimals)
token.mint(0x1234...5678, 100000 * 10**6);// As the contract owner, burn tokens from any address
token.burn(fromAddress, amount);
// Example: Burn 50,000 mUSDF
token.burn(0x1234...5678, 50000 * 10**6);// Transfer tokens
token.transfer(recipient, amount);
// Approve spending
token.approve(spender, amount);
// Transfer from (requires approval)
token.transferFrom(from, to, amount);
// Check balance
uint256 balance = token.balanceOf(address);Both versions support ERC20Permit for gasless approvals via signature.
# Run tests
forge test
# Run tests with gas reporting
forge test --gas-report
# Run tests with verbosity
forge test -vvvvUpdate this section with your deployed contract addresses:
- Flow Testnet:
0x... - Sepolia:
0x... - Base Sepolia:
0x...
- This is a MOCK token for testing purposes only
- The owner can mint unlimited tokens
- DO NOT use in production or with real funds
- SimpleMockUSDF works on any EVM chain
- MockUSDF requires LayerZero V2 deployment on the target chain
MIT