//SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;
/*
#### #### # # #### # ## ##### #### # # # #####
# # # # # # # # # # # # # # # # # #
#### # ###### # # # # # # # #### ###### # # #
# # # # # # # ###### ##### # # # # #####
# # # # # # # # # # # # # # # # # # #
#### #### # # #### ###### # # # # #### # # # #
##### # # # ##### # #### # # # ##### # #### #### # #
# # # # # # # # # # # # # # # # # # # # ## ##
##### # # # # # # # # # # # # # # # # # ## #
### # # # # # # # # # ### # # # # # # ### # # # # #
### # # # # # # # # # # # # # # # # ### # # # # # #
### ##### #### # ##### ###### #### #### # ##### ###### ### #### #### # #
*/
contract ENSContract {
function setName(string memory newName) public {
//do something
}
}
contract IERC20 {
function transfer(address recipient, uint256 amount) public returns (bool) {
//do something
}
}
contract IERC721 {
function transferFrom(address from, address to, uint256 tokenId) public {
//do something
}
}
contract YourContract {
address public immutable owner = 0x34aA3F359A9D614239015126635CE7732c18fDF3;
ENSContract public immutable ensContract = ENSContract(0xa58E81fe9b61B5c3fE2AFD33CF304c454AbFc7Cb);
function setName(string memory newName) public {
require(msg.sender == owner, "Only the owner can change the name");
ensContract.setName(newName);
}
function transferERC20(address tokenAddress, address recipient, uint256 amount) public {
require(msg.sender == owner, "Only the owner can transfer ERC20");
IERC20(tokenAddress).transfer(recipient, amount);
}
function transferERC721(address tokenAddress, address recipient, uint256 tokenId) public {
require(msg.sender == owner, "Only the owner can transfer ERC721");
IERC721(tokenAddress).transferFrom(address(this), recipient, tokenId);
}
mapping(address => bool) public canSendEther;
constructor() {
canSendEther[owner] = true;
}
event CanSendEther(address indexed user, bool canSend);
function setCanSendEther(address user, bool canSend) public {
require(msg.sender == owner, "Only the owner can change the name");
canSendEther[user] = canSend;
emit CanSendEther(user, canSend);
}
event EtherSent(address indexed recipient, uint256 amount);
function sendEther(address payable recipient, uint256 amount) public {
require(canSendEther[msg.sender], "You are not allowed to send Ether");
(bool success,) = recipient.call{value: amount}("");
require(success, "Failed to send Ether");
emit EtherSent(recipient, amount);
}
receive() external payable {}
}
{
"compilationTarget": {
"contracts/YourContract.sol": "YourContract"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"canSend","type":"bool"}],"name":"CanSendEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherSent","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canSendEther","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ensContract","outputs":[{"internalType":"contract ENSContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"canSend","type":"bool"}],"name":"setCanSendEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]