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:
Hocam harikasınız ellerinize sağlık mesela kesilen vergilerin örneğin ekip cüzdanın da toplanması ve ilerleyen süreçte bu vergilerin reklam, proje gelişimi vs için özel tanımlanmıştır adrese gitmesini sağlayabilrdik diye düşündüm. ÖR|

// Vergi oranlarını tutan yapı
struct TaxRates {
uint256 buyTaxRate;
uint256 sellTaxRate;
}
TaxRates private _taxRates;

// Adresin vergilendirilip vergilendirilmediğini kontrol eden mapping
mapping (address => bool) public isTaxed;

// Vergi toplayıcı rolü ve adresi
bytes32 public constant TAX_COLLECTOR_ROLE = keccak256("TAX_COLLECTOR_ROLE");
address public taxCollector;

// Vergi oranlarının başlangıçta ayarlandığı initialize fonksiyonu
function initialize() public initializer {
// ...
taxCollector = 0xAb41...7E36; // Vergi toplayıcının adresi
_taxRates.buyTaxRate = 5; // Alım vergisi oranı (%5)
_taxRates.sellTaxRate = 8; // Satım vergisi oranı (%8)
isTaxed[msg.sender] = true; // Sözleşme sahibinin vergilendirildiğini belirleme
// ...
}
 
2. ÖR //

Kod:
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;



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";



contract SatoshiTURK is ERC20, ERC20Burnable, ERC20Pausable, Ownable, ERC20Permit {

    uint256 public feePool; // Pool where the fees from transactions are accumulated

    address public taxWallet; // Wallet address where taxes will be collected



    // Constructor of the contract, takes token initialization parameters

    constructor(address initialOwner, address _taxWallet)

        ERC20("SatoshiTURK", "STF") // Token name and symbol

        Ownable(initialOwner)      // Initializes the contract owner

        ERC20Permit("SatoshiTURK") // Initializes the permit feature

    {

        taxWallet = _taxWallet; // Initializes the tax wallet

        _mint(initialOwner, 1000 * 10 ** decimals()); // Mints a certain amount of tokens at the start

    }



    // Applies a 5% tax for buy transactions and an 8% tax for sell transactions

    function _transfer(address sender, address recipient, uint256 amount) internal override {

        uint256 taxRate = recipient == owner() ? 8 : 5; // If the recipient is the contract owner, apply 8%, otherwise 5%

        uint256 tax = (amount * taxRate) / 100;

        uint256 amountAfterTax = amount - tax;

        feePool += tax; // Adds the tax to the pool

        super._transfer(sender, taxWallet, tax); // Transfers the tax to the tax wallet

        super._transfer(sender, recipient, amountAfterTax); // Transfers the net amount to the recipient

    }



    // Function to withdraw collected fees, can only be called by the owner

    function withdrawFee() public onlyOwner {

        require(feePool > 0, "No fees to withdraw"); // Checks if there are any fees to withdraw

        _transfer(address(this), owner(), feePool);  // Transfers the tokens from the pool to the owner

        feePool = 0;                                // Resets the pool

    }



    // ... (Other functions and overrides)

}
 
Moderatör tarafında düzenlendi:
Ör/3 Karalisteye alma ve çıkarma özelliği de entegre edilmiş hali hocam;

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

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";

contract SatoshiTURK is ERC20, ERC20Burnable, ERC20Pausable, Ownable, ERC20Permit {
    uint256 public feePool;
    address public taxWallet = 0xAbC123000111222333444555666777888999AaBb;

    mapping(address => bool) public blacklisted; // Kara listeye alınan adresleri tutar

    // Sozlesmenin yapici fonksiyonu
    constructor(address initialOwner)
        ERC20("SatoshiTURK", "STF")
        Ownable(initialOwner)
        ERC20Permit("SatoshiTURK")
    {
        _mint(initialOwner, 1000 * 10 ** decimals());
    }

    // Kara listeye alma fonksiyonu
    function addToBlacklist(address _address) public onlyOwner {
        blacklisted[_address] = true;
    }

    // Kara listeden çıkarma fonksiyonu
    function removeFromBlacklist(address _address) public onlyOwner {
        blacklisted[_address] = false;
    }

    // Transfer fonksiyonunu override ederek kara liste kontrolü ekler
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(!blacklisted[sender], "Sender is blacklisted");
        require(!blacklisted[recipient], "Recipient is blacklisted");

        uint256 taxRate = recipient == owner() ? 8 : 5;
        uint256 tax = (amount * taxRate) / 100;
        uint256 amountAfterTax = amount - tax;
        feePool += tax;
        super._transfer(sender, taxWallet, tax);
        super._transfer(sender, recipient, amountAfterTax);
    }

    // ... (Diger fonksiyonlar ve uzerine yazmalar)
}
 
Moderatör tarafında düzenlendi:
Bu şekilde transfer fee alınacaksa değiştirilebilir olması ve constructor içinde ilk değerini alması daha şık olabilir. Ama transfer içerisindeki hesaplar ve kontrattan varlık çekme fonksiyonları kontrat güvenlik tarayıcılarında yüksek alarm veriyor. Size güvenip de alacak bir topluluğunuz yoksa scan sitelerindeki kırmızı sonuçlar müşterilerin denemekten bile kaçınmasına sebep olur
 
Metin bey hangisi için dediniz? Ben hızlıca örneklendirme yaparak satoshiTürk hocama tasvirleme niteliğinde tanımlama yapmaya çalıştım yeni güncellenmiş halini. Sizde örneklendirirseniz çok sevinirim makbule geçer. Saygılar hocam
 

Cüzdanınız

BNB
0.00000000

Forum istatistikleri

Konular
13,225
Mesajlar
61,515
Kullanıcılar
6,696
Son üye
barron
Geri
Üst