UnitedForSocialDevelopmentAndAdvocacy

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"
        ]
      }
    }
  }
}}

Tags:
ERC20, Token, Pausable, Factory|addr:0x8b358cb59c045d535f9b84a6d2120cb7001e5bd2|verified:true|block:23723562|tx:0x910c999d44b1dcdec1a29764e0e6251a30aa3028a268d2d66ccf18d23c2b2286|first_check:1762252429

Submitted on: 2025-11-04 11:33:51

Comments

Log in to comment.

No comments yet.