Description:
ERC20 token contract with Pausable, Factory capabilities. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"contracts/USDA.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
// ----------------------------------------------------------------------------\r
// واجهة ERC20\r
// ----------------------------------------------------------------------------\r
interface IERC20 {\r
function totalSupply() external view returns (uint256);\r
function balanceOf(address account) external view returns (uint256);\r
function allowance(address owner, address spender) external view returns (uint256);\r
function transfer(address to, uint256 amount) external returns (bool);\r
function approve(address spender, uint256 amount) external returns (bool);\r
function transferFrom(address from, address to, uint256 amount) external returns (bool);\r
\r
event Transfer(address indexed from, address indexed to, uint256 value);\r
event Approval(address indexed owner, address indexed spender, uint256 value);\r
}\r
\r
// ----------------------------------------------------------------------------\r
// عقد USDA مع خصائص الحرق والتبرعات والتجميد\r
// ----------------------------------------------------------------------------\r
contract UnitedForSocialDevelopmentAndAdvocacy is IERC20 {\r
string public name = "United for Social Development and Advocacy";\r
string public symbol = "USDA";\r
uint8 public decimals = 18;\r
uint256 private _totalSupply = 100_000_000_000 * 10 ** decimals;\r
\r
mapping(address => uint256) private _balances;\r
mapping(address => mapping(address => uint256)) private _allowances;\r
\r
// محفظة التبرعات\r
uint256 public charityBalance;\r
address public owner;\r
bool public paused = false;\r
\r
// أحداث\r
event Pause();\r
event Unpause();\r
event CharityDistributed(uint256 totalAmount);\r
\r
// تعديلات (Modifiers)\r
modifier onlyOwner() {\r
require(msg.sender == owner, "Only owner can execute");\r
_;\r
}\r
\r
modifier whenNotPaused() {\r
require(!paused, "Transfers are paused");\r
_;\r
}\r
\r
modifier whenPaused() {\r
require(paused, "Contract not paused");\r
_;\r
}\r
\r
// المُنشئ\r
constructor() {\r
owner = msg.sender;\r
_balances[owner] = _totalSupply;\r
charityBalance = 0;\r
emit Transfer(address(0), owner, _totalSupply);\r
}\r
\r
// وظائف التجميد\r
function pause() external onlyOwner whenNotPaused {\r
paused = true;\r
emit Pause();\r
}\r
\r
function unpause() external onlyOwner whenPaused {\r
paused = false;\r
emit Unpause();\r
}\r
\r
// دوال ERC20\r
function totalSupply() external view override returns (uint256) {\r
return _totalSupply;\r
}\r
\r
function balanceOf(address account) external view override returns (uint256) {\r
return _balances[account];\r
}\r
\r
function allowance(address owner_, address spender) external view override returns (uint256) {\r
return _allowances[owner_][spender];\r
}\r
\r
function approve(address spender, uint256 amount) external override returns (bool) {\r
_allowances[msg.sender][spender] = amount;\r
emit Approval(msg.sender, spender, amount);\r
return true;\r
}\r
\r
function transfer(address to, uint256 amount) external override whenNotPaused returns (bool) {\r
require(to != address(0), "Invalid address");\r
require(_balances[msg.sender] >= amount, "Insufficient balance");\r
\r
uint256 charityFee = amount * 1 / 100; // 1%\r
uint256 burnAmount = amount * 5 / 1000; // 0.5%\r
uint256 sendAmount = amount - charityFee - burnAmount;\r
\r
_balances[msg.sender] -= amount;\r
_balances[to] += sendAmount;\r
\r
charityBalance += charityFee;\r
_totalSupply -= burnAmount;\r
\r
emit Transfer(msg.sender, to, sendAmount);\r
emit Transfer(msg.sender, address(0), burnAmount);\r
return true;\r
}\r
\r
function transferFrom(address from, address to, uint256 amount) external override whenNotPaused returns (bool) {\r
require(to != address(0), "Invalid address");\r
require(_balances[from] >= amount, "Insufficient balance");\r
require(_allowances[from][msg.sender] >= amount, "Allowance exceeded");\r
\r
uint256 charityFee = amount * 1 / 100; // 1%\r
uint256 burnAmount = amount * 5 / 1000; // 0.5%\r
uint256 sendAmount = amount - charityFee - burnAmount;\r
\r
_balances[from] -= amount;\r
_allowances[from][msg.sender] -= amount;\r
_balances[to] += sendAmount;\r
\r
charityBalance += charityFee;\r
_totalSupply -= burnAmount;\r
\r
emit Transfer(from, to, sendAmount);\r
emit Transfer(from, address(0), burnAmount);\r
return true;\r
}\r
\r
// توزيع التبرعات\r
function distributeCharity(address[] calldata recipients, uint256[] calldata percentages) external onlyOwner {\r
require(charityBalance > 0, "No charity funds");\r
require(recipients.length == percentages.length, "Array length mismatch");\r
\r
uint256 totalPercent = 0;\r
for (uint i = 0; i < percentages.length; i++) {\r
totalPercent += percentages[i];\r
}\r
require(totalPercent == 10000, "Total percent must be 10000 (100%)");\r
\r
uint256 totalDistributed = 0;\r
for (uint i = 0; i < recipients.length; i++) {\r
uint256 amount = charityBalance * percentages[i] / 10000;\r
_balances[recipients[i]] += amount;\r
emit Transfer(address(this), recipients[i], amount);\r
totalDistributed += amount;\r
}\r
\r
charityBalance -= totalDistributed;\r
emit CharityDistributed(totalDistributed);\r
}\r
}\r
"
}
},
"settings": {
"optimizer": {
"runs": 200,
"enabled": false
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}
}}
Submitted on: 2025-11-04 11:33:51
Comments
Log in to comment.
No comments yet.