Neler yeni
Türkiye’nin Lider Kripto Para Forumu

SatoshiTURK Ailesine Hoş Geldiniz!

Türkiye’nin en güvenilir kripto ve blockchain topluluğunu ziyaret ettiğiniz için mutluyuz. SatoshiTURK olarak, her seviyeden kripto meraklısı ve blockchain uzmanına bilgi paylaşımı, öğrenme ve kazanç fırsatları sunuyoruz. Amacımız, güncel ve bağımsız bilgiye kolayca ulaşmanızı sağlamak ve özgün içeriklerle kendinizi geliştirmenize olanak tanımaktır. Burada, kripto para dünyasının en yeni gelişmelerini takip edebilir, güncel analizlere ve rehberlere göz atabilir, blockchain teknolojisinin sunduğu fırsatları daha yakından keşfedebilirsiniz.

Topluluğumuza katılarak sadece bilgi edinmekle kalmaz, aynı zamanda katkılarınızın karşılığını BNB Coin ile alabilirsiniz. Forumumuzda, açtığınız her başlık, sorduğunuz her soru ve sağladığınız her faydalı bilgi, size SatoshiTURK kredi sistemi üzerinden BNB Coin kazandırır. Bu sayede, öğrenirken kazanma deneyimini yaşayacak ve topluluğumuza aktif bir şekilde katkıda bulunarak değerli bir üye olacaksınız.

Deneyimlerinizi, fikirlerinizi ve analizlerinizi paylaşarak hem kendinizi geliştirebilir hem de bu katkılarınızın ödüllerini kazanabilirsiniz. Kripto dünyasında güvenle ilerlemek, yeni insanlarla tanışmak ve sektör hakkında daha fazla bilgi edinmek için SatoshiTURK ailesine katılın. Hadi, birlikte öğrenelim, keşfedelim ve Türkiye'nin en güçlü kripto topluluğunda güvenle yol alalım!

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.webp




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
 

Forum istatistikleri

Konular
13.672
Mesajlar
65.877
Kullanıcılar
6.893
Son üye
Byldozer
Geri
Üst