文件 1 的 3:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 3:Fewwwww.sol
pragma solidity >=0.7.0 <0.9.0;
import "@openzeppelin/contracts/access/Ownable.sol";
contract Fewwwww is Ownable {
string public NAME_PROJECT = "Fewwwww";
string public CREATED_BY = "0xBosz";
uint256 public PREMIUM_PRICE = 0.1 ether;
uint256 public PERCENT_FEE = 0;
uint256 public premiumUsers;
mapping(address => bool) public _premiumList;
function sendEthers(address payable [] memory _receiver) public payable {
for(uint256 i = 0; i < _receiver.length; i++) {
uint256 amount = msg.value / _receiver.length;
require(_receiver[i] != address(0), "Cannot transfer to null address");
if (_premiumList[msg.sender]) {
_receiver[i].transfer(amount);
} else {
_receiver[i].transfer(amount - (amount * PERCENT_FEE) / 1000);
}
}
}
function purchasePremium() public payable {
require(!_premiumList[msg.sender], "You already on premium list");
require(msg.value == PREMIUM_PRICE, "Ether value sent incorrect");
_premiumList[msg.sender] = true;
premiumUsers++;
}
function donation() public payable {
require(msg.value > 0, "Ether value sent should not 0 eth");
}
function changePrice(uint256 _newPrice) public onlyOwner {
PREMIUM_PRICE = _newPrice;
}
function setPercentFee(uint256 _percentageFee) public onlyOwner {
PERCENT_FEE = _percentageFee;
}
function addPremiumUsers(address[] memory _address) public onlyOwner {
for (uint256 i = 0; i < _address.length; i++) {
_premiumList[_address[i]] = true;
premiumUsers++;
}
}
function withdraw() public onlyOwner {
uint amount = address(this).balance;
(bool success,) = owner().call{value: amount}("");
require(success, "Failed to send ether");
}
function kill(address payable _receiver) public payable onlyOwner {
selfdestruct(_receiver);
}
}
文件 3 的 3:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
{
"compilationTarget": {
"contracts/Fewwwww.sol": "Fewwwww"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CREATED_BY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_PROJECT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PREMIUM_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_premiumList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"addPremiumUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"kill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purchasePremium","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"_receiver","type":"address[]"}],"name":"sendEthers","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentageFee","type":"uint256"}],"name":"setPercentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]