Neler yeni
Misafir görüntüleme sınırlıdır
Türkiye’nin Lider Kripto Para Forumu

Blockchain dünyasının Türkçe Wikipedia'sına hoş geldiniz!

Hemen ücretsiz üye olun ve kayıt olduğunuz anda coin kazanmaya başlayın. Kendi konularınızı paylaşın, diğer üyelerle etkileşim kurun ve dilediğiniz zaman coinlerinizi çekin.

Katılmak için şimdi harekete geçin!

Bu kod bir token çıkarmak için uygunmudur ?

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IBEP20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BuyOnlyToken is IBEP20 {
string public name = "BuyOnlyToken";
string public symbol = "BOT";
uint8 public decimals = 18;
uint256 private _totalSupply;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _buyPrice;

constructor(uint256 initialSupply, uint256 buyPrice) {
_totalSupply = initialSupply * 10 ** uint256(decimals);
_balances[msg.sender] = _totalSupply;
_buyPrice = buyPrice;
emit Transfer(address(0), msg.sender, _totalSupply);
}

function totalSupply() external view override returns (uint256) {
return _totalSupply;
}

function balanceOf(address account) external view override returns (uint256) {
return _balances[account];
}

function transfer(address recipient, uint256 amount) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}

function allowance(address owner, address spender) external view override returns (uint256) {
return _allowances[owner][spender];
}

function approve(address spender, uint256 amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}

function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
return true;
}

function _transfer(address sender, address recipient, uint256 amount) private {
require(sender != address(0), "Transfer from the zero address");
require(recipient != address(0), "Transfer to the zero address");
require(_balances[sender] >= amount, "Insufficient balance");
_balances[sender] -= amount;
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}

function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "Approve from the zero address");
require(spender != address(0), "Approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}

function buyTokens() external payable {
uint256 amount = msg.value / _buyPrice;
require(amount > 0, "Insufficient amount sent");
_transfer(address(this), msg.sender, amount);
}

receive() external payable {
buyTokens();
}
}
 
Bu kontratın kullanılması sağlıklı değil. güvenlik açığı var.
 
transfer, transferfrom ve buytokens işlevlerinde koruma yok openzeplin kontratlarını import ederek ReentrancyGuard işlevini ekleyebilirsiniz.
_approve işleminde bir sınırlama yok doğal olarak saldırıya açık.
 

Forum istatistikleri

Konular
14.186
Mesajlar
71.150
Kullanıcılar
7.180
Son üye
holdeys
Geri
Üst