MyToken (MTK) - Gelişmiş DeFi özellikleri ile donatılmış, güvenli ve gas-optimized ERC20 token implementasyonu.
- Özellikler
- Hızlı Başlangıç
- Kurulum
- Deployment
- Staking Sistemi
- Güvenlik
- API Referansı
- Test
- Katkıda Bulunma
- ✅ ERC20 Standardı: Tam uyumlu ERC20 token implementasyonu
- ✅ Minting: Sadece owner tarafından yeni token basımı
- ✅ Burning: Token sahipleri kendi tokenlarını yakabilir
- ✅ Max Supply: 1,000,000 MTK maksimum arz limiti
- ✅ Ownership: Güvenli sahiplik yönetimi
- 🎯 Flexible Staking: İstediğiniz miktarda token stake edin
- 📈 Annual Rewards: %10 yıllık ödül oranı (ayarlanabilir)
- ⚡ Instant Claiming: Ödüllerinizi anında talep edin
- 🔄 Partial Unstaking: Kısmi unstaking desteği
- 📊 Real-time Tracking: Anlık ödül hesaplama
- 🔒 Reentrancy Protection: ReentrancyGuard ile korunma
- ⚖️ CEI Pattern: Checks-Effects-Interactions güvenlik deseni
- 🔐 Access Control: OpenZeppelin Ownable implementasyonu
- ⛽ Gas Optimized: Optimize edilmiş gas kullanımı
# Repository'yi klonlayın
git clone https://github.com/PROFADAM/defi-token.git
cd defi-token
# Bağımlılıkları yükleyin
npm install
# Testleri çalıştırın
npm test
# Kontratı derleyin
npm run compile
# Base Sepolia'ya deploy edin
npm run deploy:base-sepolia- Node.js >= 18.0.0
- npm veya yarn
- Git
- Repository'yi klonlayın:
git clone https://github.com/PROFADAM/defi-token.git
cd defi-token- Bağımlılıkları yükleyin:
npm install- Ortam değişkenlerini ayarlayın:
cp .env.example .env.env dosyasını düzenleyin:
PRIVATE_KEY=your_private_key_here
BASESCAN_API_KEY=your_basescan_api_key_here- Kontratları derleyin:
npx hardhat compile-
Base Sepolia ETH edinin:
- Base Sepolia Faucet adresinden test ETH alın
-
Deploy komutunu çalıştırın:
npx hardhat run scripts/deploy.js --network baseSepolia- Kontratı doğrulayın:
npx hardhat verify --network baseSepolia CONTRACT_ADDRESS INITIAL_SUPPLY| Ağ | Chain ID | RPC URL |
|---|---|---|
| Base Mainnet | 8453 | https://mainnet.base.org |
| Base Sepolia | 84532 | https://sepolia.base.org |
| Base Goerli | 84531 | https://goerli.base.org |
- Token Stake Etme: Tokenlarınızı stake ederek ödül kazanmaya başlayın
- Ödül Hesaplama: Ödüller saniye bazında hesaplanır
- Ödül Talep Etme: İstediğiniz zaman ödüllerinizi talep edebilirsiniz
- Unstaking: Kısmi veya tam unstaking yapabilirsiniz
// Kontrata bağlanma
const myToken = await ethers.getContractAt("MyToken", contractAddress);
// 1000 MTK stake etme
await myToken.stake(ethers.parseEther("1000"));
// Staking bilgilerini görüntüleme
const [stakedAmount, stakingSince, claimedRewards] = await myToken.getStakeInfo(userAddress);
console.log(`Staked: ${ethers.formatEther(stakedAmount)} MTK`);
// Bekleyen ödülleri kontrol etme
const pendingRewards = await myToken.calculateReward(userAddress);
console.log(`Pending Rewards: ${ethers.formatEther(pendingRewards)} MTK`);
// Ödülleri talep etme
await myToken.claimRewards();
// 500 MTK unstake etme
await myToken.unstake(ethers.parseEther("500"));Ödül = (Staked Amount × Reward Rate × Staking Duration) / (365 days × 100)
- ✅ Reentrancy Koruması: Tüm fonksiyonlarda ReentrancyGuard
- ✅ CEI Pattern: Güvenli state değişiklik sıralaması
- ✅ Access Control: Kritik fonksiyonlar için yetki kontrolü
- ✅ Integer Overflow: Solidity 0.8.20 built-in koruması
- ✅ Gas Optimization: Optimize edilmiş storage erişimi
- Reentrancy Protection:
nonReentrantmodifier ile korunma - CEI Pattern: Checks-Effects-Interactions sıralaması
- Safe Math: Solidity 0.8+ otomatik overflow koruması
- Access Control: OpenZeppelin Ownable implementasyonu
- Private key'leri asla kodda saklamayın
.envdosyasını.gitignore'a ekleyin- Mainnet'e deploy etmeden önce testnet'te test edin
- Kontrat adreslerini doğrulayın
function transfer(address to, uint256 amount) external returns (bool)
function approve(address spender, uint256 amount) external returns (bool)
function transferFrom(address from, address to, uint256 amount) external returns (bool)
function balanceOf(address account) external view returns (uint256)
function totalSupply() external view returns (uint256)function stake(uint256 amount) external
function unstake(uint256 amount) external
function claimRewards() external
function calculateReward(address staker) external view returns (uint256)
function getStakeInfo(address staker) external view returns (uint256, uint256, uint256)function mint(address to, uint256 amount) external onlyOwner
function setRewardRate(uint256 newRate) external onlyOwner
function transferOwnership(address newOwner) external onlyOwner# Tüm testleri çalıştır
npm test
# Belirli bir test dosyasını çalıştır
npx hardhat test test/MyToken.test.js
# Gas raporu ile test çalıştır
REPORT_GAS=true npm test
# Coverage raporu
npm run coverage- ✅ ERC20 temel fonksiyonları
- ✅ Minting ve burning işlemleri
- ✅ Staking mekanizması
- ✅ Ödül hesaplama
- ✅ Access control
- ✅ Edge case'ler
Katkılarınızı memnuniyetle karşılıyoruz! Lütfen aşağıdaki adımları takip edin:
- Fork edin
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Commit edin (
git commit -m 'Add amazing feature') - Push edin (
git push origin feature/amazing-feature) - Pull Request açın
- Kod değişikliklerinden önce testler yazın
- Commit mesajlarını açıklayıcı yazın
- Code style'a uygun kod yazın
- Dokümantasyonu güncel tutun
Bu proje MIT License altında lisanslanmıştır.
- GitHub: PROFADAM
- Issues: GitHub Issues
- ✅ Temel ERC20 implementasyonu
- ✅ Minting ve burning özellikleri
- ✅ Staking mekanizması
- ✅ Base network desteği
- ✅ Güvenlik optimizasyonları
- 🔄 Governance özellikleri
- 🔄 Multi-signature desteği
- 🔄 Cross-chain bridge
- 🔄 NFT staking desteği
S: Maksimum kaç token basılabilir? C: Maksimum 1,000,000 MTK token basılabilir.
S: Staking ödülleri nereden geliyor? C: Ödüller yeni basılan tokenlardan karşılanır ve max supply limitine tabidir.
S: Minimum staking süresi var mı? C: Hayır, istediğiniz zaman unstake edebilirsiniz.
S: Ödül oranı değişebilir mi? C: Evet, kontrat sahibi ödül oranını güncelleyebilir (maksimum %100).
S: Gas ücretleri ne kadar? C: Base network'ün düşük gas ücretleri sayesinde işlemler çok ekonomiktir.
⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın!