Neler yeni
Kripto Para, Bitcoin, Ethereum, Cardano, Dogecoin, Shiba, Forumları, Yorumları, Teknik Analiz

Satoshiturk ailesine hoş geldin!

Burada, yatırım tavsiyesi vermeyip, hiçbir projeye para karşılığı destek çıkmadan, kripto dünyasının içinden gelen yöneticilerimizle doğru bilgiye ulaşabilirsin.

5 yıldır aksamadan yaptığımız ödemelerle güvenin adresiyiz.

Bizimle keşfet, öğren ve kripto sohbetlerine katıl. Seni aramızda görmekten mutluluk duyarız!

Vergi Kesintisi Yapan Token Kontratı - Tax Fee / Transfer Fee Solidity Contract

Vergi Kesintisi Yapan Token Kontratı - Tax Fee / Transfer Fee Solidity Contract

Geliştirmeye açıktır önerdiğiniz düzenlemeler varsa konu altında paylaşabilirsiniz.

1713206270134.png




Kod:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// OpenZeppelin kütüphanesinden ERC20 standart token işlevlerini içeri aktar
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";

// ERC20 standardına uygun ve bazı ek özellikler içeren token sözleşmesi
contract SatoshiTURK is ERC20, ERC20Burnable, ERC20Pausable, Ownable, ERC20Permit {
    uint256 public feePool; // Transfer işlemlerinden alınan kesintilerin toplandığı havuz

    // Sözleşmenin oluşturucusu (constructor), token başlatma parametrelerini alır
    constructor(address initialOwner)
        ERC20("SatoshiTURK", "STF") // Token adı ve sembolü
        Ownable(initialOwner)      // Kontrat sahibini başlatır
        ERC20Permit("SatoshiTURK") // Permit özelliğini başlatır
    {
        _mint(msg.sender, 1000 * 10 ** decimals()); // Başlangıçta belirli bir miktar token basar
    }

    // Kontratı durdurma fonksiyonu, yalnızca sahibi tarafından çağrılabilir
    function pause() public onlyOwner {
        _pause();
    }

    // Kontratın durdurulmasını kaldırma fonksiyonu, yalnızca sahibi tarafından çağrılabilir
    function unpause() public onlyOwner {
        _unpause();
    }

    // Yeni token basma fonksiyonu, yalnızca sahibi tarafından çağrılabilir
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    // Toplanan kesintileri çekme fonksiyonu, yalnızca sahibi tarafından çağrılabilir
    function withdrawFee() public onlyOwner {
        require(feePool > 0, "No fees to withdraw"); // Çekilecek kesinti olup olmadığını kontrol et
        _transfer(address(this), owner(), feePool);  // Havuzdaki tokenleri sahibe transfer et
        feePool = 0;                                // Havuzu sıfırla
    }

    // Normal transfer işlemini, kesinti uygulayarak özelleştirir
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        uint256 fee = calculateFee(amount);           // Transfer miktarından kesinti hesapla
        uint256 amountAfterFee = amount - fee;        // Kesinti sonrası net miktar
        feePool += fee;                               // Kesintiyi havuza ekle
        _transfer(msg.sender, address(this), fee);    // Kesintiyi kontrata aktar
        return super.transfer(recipient, amountAfterFee);  // Net miktarı alıcıya transfer et
    }

    // transferFrom fonksiyonunu, kesinti uygulayarak özelleştirir
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        uint256 fee = calculateFee(amount);           // Transfer miktarından kesinti hesapla
        uint256 amountAfterFee = amount - fee;        // Kesinti sonrası net miktar
        feePool += fee;                               // Kesintiyi havuza ekle
        _transfer(sender, address(this), fee);        // Kesintiyi kontrata aktar
        return super.transferFrom(sender, recipient, amountAfterFee);  // Net miktarı alıcıya transfer et
    }

    // Transfer işlemi için kesinti miktarını hesaplayan yardımcı fonksiyon
    function calculateFee(uint256 amount) internal pure returns (uint256) {
        return (amount * 5) / 100; // %5 kesinti hesaplar
    }

    // Solidity tarafından gerekli override fonksiyonlarının güncellenmesi
    function _update(address from, address to, uint256 value)
        internal
        override(ERC20, ERC20Pausable)
    {
        super._update(from, to, value);
    }
}
 
Son düzenleme:

Cüzdanınız

BNB
0.00000000

Forum istatistikleri

Konular
13,177
Mesajlar
61,186
Kullanıcılar
6,689
Son üye
SavKripto
Geri
Üst