SatoshiTURK
Programmer
- BNB
- 0,01050421
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.
Geliştirmeye açıktır önerdiğiniz düzenlemeler varsa konu altında paylaşabilirsiniz.
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: