Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DumperShieldToken
- Optimization enabled
- true
- Compiler version
- v0.8.19+commit.7dd6d404
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-09-26T15:31:23.184546Z
Contract source code
// Copyright (c) [2023], [Qwantum Finance Labs]
// All rights reserved.
// SPDX-License-Identifier: No License (None)
pragma solidity ^0.8.0;
interface IERC20 {
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
interface IDSFactory {
function totalSupply(address token) external view returns (uint256);
function getLock(address token, address user) external view returns(uint256);
function setLock(address token, address user, uint256 time) external returns(bool);
}
contract DumperShieldUser {
address public factory; // dumper shield factory
address public user;
error OnlyFactory();
/*
address public dumperShield;
modifier onlyDumperShield() {
require(dumperShield == msg.sender, "Only dumperShield allowed");
_;
}
*/
modifier onlyFactory() {
if (factory != msg.sender) revert OnlyFactory();
_;
}
constructor (address _user, address _factory) {
require(_user != address(0) && _factory != address(0));
user = _user;
factory = _factory;
}
function safeTransfer(address token, address to, uint value) external onlyFactory {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'DSU1'); //DumperShieldUser: TRANSFER_FAILED
}
function tokenReceived(address, uint, bytes calldata) external pure returns(bytes4) {
return this.tokenReceived.selector;
}
}
contract DumperShieldToken {
IERC20 public shieldedToken; // address of shielded token
address public factory; // dumper shield factory
//address public router;
mapping(address => address) public dumperShieldUsers; // user address => DumperShieldUser contract
address public DAO; // address of global voting contract
event CreateDumperShieldUser(address user, address dsUserContract);
modifier onlyFactory() {
require(factory == msg.sender, "onlyFactory");
_;
}
function initialize(address _token, address _dao) external {
require(address(shieldedToken) == address(0) && _token != address(0));
shieldedToken = IERC20(_token);
DAO = _dao;
//router = _router;
factory = msg.sender;
}
/**
* @dev Gets the balance of the specified address.
* @param user The address to query the the balance of.
* @return balance an uint256 representing the amount owned by the passed address.
*/
function balanceOf(address user) external view returns (uint256 balance) {
return shieldedToken.balanceOf(dumperShieldUsers[user]);
}
// returns DumperShieldUser contract address. If user has not contract - create it.
function createDumperShieldUser(address user, address dsUser) external onlyFactory returns(address) {
if (dsUser == address(0)) {
dsUser = address(new DumperShieldUser(user, factory));
emit CreateDumperShieldUser(user, dsUser);
} else if (dumperShieldUsers[user] == dsUser) {
return dsUser;
}
dumperShieldUsers[user] = dsUser;
return dsUser;
}
function totalSupply() external view returns (uint256) {
return IDSFactory(factory).totalSupply(address(shieldedToken));
}
function setLock(address user, uint256 time) external returns(bool) {
require(msg.sender == DAO, "Only DAO");
return IDSFactory(factory).setLock(address(shieldedToken), user, time);
}
function getLock(address user) external view returns(uint256) {
return IDSFactory(factory).getLock(address(shieldedToken),user);
}
function setDAO(address _dao) external returns (bool) {
require(msg.sender == factory, "Only factory");
DAO = _dao;
return true;
}
// allow to rescue tokens that were transferet to this contract by mistake
function safeTransfer(address token, address to, uint value) external onlyFactory {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED');
}
}
Contract ABI
[{"type":"event","name":"CreateDumperShieldUser","inputs":[{"type":"address","name":"user","internalType":"address","indexed":false},{"type":"address","name":"dsUserContract","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DAO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"createDumperShieldUser","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"address","name":"dsUser","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"dumperShieldUsers","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLock","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_dao","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransfer","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setDAO","inputs":[{"type":"address","name":"_dao","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setLock","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"shieldedToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50610d5a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806398fabd3a1161007157806398fabd3a14610163578063b0fc29e614610176578063c45a015514610199578063cc9ae595146101ac578063d1660f99146101bf578063e73a914c146101d257600080fd5b806318160ddd146100b957806345ba8489146100d4578063485cc9551461011557806351bb50e61461012a5780636b9db4e61461013d57806370a0823114610150575b600080fd5b6100c16101e5565b6040519081526020015b60405180910390f35b6100fd6100e236600461079a565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b6101286101233660046107b5565b61025c565b005b6100fd6101383660046107b5565b6102c4565b6100c161014b36600461079a565b61041e565b6100c161015e36600461079a565b610499565b6003546100fd906001600160a01b031681565b6101896101843660046107e8565b6104da565b60405190151581526020016100cb565b6001546100fd906001600160a01b031681565b6000546100fd906001600160a01b031681565b6101286101cd366004610812565b6105aa565b6101896101e036600461079a565b6106ff565b600154600080546040516339370aa960e21b81526001600160a01b0391821660048201529192169063e4dc2aa490602401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610257919061084e565b905090565b6000546001600160a01b031615801561027d57506001600160a01b03821615155b61028657600080fd5b600080546001600160a01b039384166001600160a01b0319918216179091556003805492909316918116919091179091556001805490911633179055565b6001546000906001600160a01b031633146103145760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b60448201526064015b60405180910390fd5b6001600160a01b0382166103bc5760015460405184916001600160a01b03169061033d90610771565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610370573d6000803e3d6000fd5b50604080516001600160a01b038087168252831660208201529193507f326b0c8847d196b508808bef01c8cadb0b718f12f4cdf79f702100ad0e77d6e2910160405180910390a16103e7565b6001600160a01b038381166000908152600260205260409020548184169116036103e7575080610418565b506001600160a01b03828116600090815260026020526040902080546001600160a01b031916918316919091179055805b92915050565b600154600080546040516310cfa87b60e21b81526001600160a01b03918216600482015284821660248201529192169063433ea1ec906044015b602060405180830381865afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610418919061084e565b600080546001600160a01b038381168352600260205260408084205490516370a0823160e01b815290821660048201529116906370a0823190602401610458565b6003546000906001600160a01b031633146105225760405162461bcd60e51b81526020600482015260086024820152674f6e6c792044414f60c01b604482015260640161030b565b600154600054604051631ac8874560e21b81526001600160a01b039182166004820152858216602482015260448101859052911690636b221d14906064016020604051808303816000875af115801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a39190610867565b9392505050565b6001546001600160a01b031633146105f25760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b604482015260640161030b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161064e9190610889565b6000604051808303816000865af19150503d806000811461068b576040519150601f19603f3d011682016040523d82523d6000602084013e610690565b606091505b50915091508180156106ba5750805115806106ba5750808060200190518101906106ba9190610867565b6106f85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161030b565b5050505050565b6001546000906001600160a01b0316331461074b5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c7920666163746f727960a01b604482015260640161030b565b50600380546001600160a01b0319166001600160a01b0392909216919091179055600190565b61046c806108b983390190565b80356001600160a01b038116811461079557600080fd5b919050565b6000602082840312156107ac57600080fd5b6105a38261077e565b600080604083850312156107c857600080fd5b6107d18361077e565b91506107df6020840161077e565b90509250929050565b600080604083850312156107fb57600080fd5b6108048361077e565b946020939093013593505050565b60008060006060848603121561082757600080fd5b6108308461077e565b925061083e6020850161077e565b9150604084013590509250925092565b60006020828403121561086057600080fd5b5051919050565b60006020828403121561087957600080fd5b815180151581146105a357600080fd5b6000825160005b818110156108aa5760208186018101518583015201610890565b50600092019182525091905056fe608060405234801561001057600080fd5b5060405161046c38038061046c83398101604081905261002f916100a5565b6001600160a01b0382161580159061004f57506001600160a01b03811615155b61005857600080fd5b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100d8565b80516001600160a01b03811681146100a057600080fd5b919050565b600080604083850312156100b857600080fd5b6100c183610089565b91506100cf60208401610089565b90509250929050565b610385806100e76000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634f8632ba146100515780638943ec0214610081578063c45a0155146100b8578063d1660f99146100cb575b600080fd5b600154610064906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61008f366004610234565b6344a1f60160e11b949350505050565b6040516001600160e01b03199091168152602001610078565b600054610064906001600160a01b031681565b6100de6100d93660046102bb565b6100e0565b005b6000546001600160a01b0316331461010b57604051630636a15760e11b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161016791906102f7565b6000604051808303816000865af19150503d80600081146101a4576040519150601f19603f3d011682016040523d82523d6000602084013e6101a9565b606091505b50915091508180156101d35750805115806101d35750808060200190518101906101d39190610326565b6102115760405162461bcd60e51b8152600401610208906020808252600490820152634453553160e01b604082015260600190565b60405180910390fd5b5050505050565b80356001600160a01b038116811461022f57600080fd5b919050565b6000806000806060858703121561024a57600080fd5b61025385610218565b935060208501359250604085013567ffffffffffffffff8082111561027757600080fd5b818701915087601f83011261028b57600080fd5b81358181111561029a57600080fd5b8860208285010111156102ac57600080fd5b95989497505060200194505050565b6000806000606084860312156102d057600080fd5b6102d984610218565b92506102e760208501610218565b9150604084013590509250925092565b6000825160005b8181101561031857602081860181015185830152016102fe565b506000920191825250919050565b60006020828403121561033857600080fd5b8151801515811461034857600080fd5b939250505056fea2646970667358221220fcd69f300d44341dea4eeacad83f40c2e3f08880767792a0401c85baead5b10464736f6c63430008130033a26469706673582212205ca45ec83ab81ceebd0fadb10a49a9cf1a4d728bbd406299e2f3cd5ab3c7e25064736f6c63430008130033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806398fabd3a1161007157806398fabd3a14610163578063b0fc29e614610176578063c45a015514610199578063cc9ae595146101ac578063d1660f99146101bf578063e73a914c146101d257600080fd5b806318160ddd146100b957806345ba8489146100d4578063485cc9551461011557806351bb50e61461012a5780636b9db4e61461013d57806370a0823114610150575b600080fd5b6100c16101e5565b6040519081526020015b60405180910390f35b6100fd6100e236600461079a565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b6101286101233660046107b5565b61025c565b005b6100fd6101383660046107b5565b6102c4565b6100c161014b36600461079a565b61041e565b6100c161015e36600461079a565b610499565b6003546100fd906001600160a01b031681565b6101896101843660046107e8565b6104da565b60405190151581526020016100cb565b6001546100fd906001600160a01b031681565b6000546100fd906001600160a01b031681565b6101286101cd366004610812565b6105aa565b6101896101e036600461079a565b6106ff565b600154600080546040516339370aa960e21b81526001600160a01b0391821660048201529192169063e4dc2aa490602401602060405180830381865afa158015610233573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610257919061084e565b905090565b6000546001600160a01b031615801561027d57506001600160a01b03821615155b61028657600080fd5b600080546001600160a01b039384166001600160a01b0319918216179091556003805492909316918116919091179091556001805490911633179055565b6001546000906001600160a01b031633146103145760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b60448201526064015b60405180910390fd5b6001600160a01b0382166103bc5760015460405184916001600160a01b03169061033d90610771565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610370573d6000803e3d6000fd5b50604080516001600160a01b038087168252831660208201529193507f326b0c8847d196b508808bef01c8cadb0b718f12f4cdf79f702100ad0e77d6e2910160405180910390a16103e7565b6001600160a01b038381166000908152600260205260409020548184169116036103e7575080610418565b506001600160a01b03828116600090815260026020526040902080546001600160a01b031916918316919091179055805b92915050565b600154600080546040516310cfa87b60e21b81526001600160a01b03918216600482015284821660248201529192169063433ea1ec906044015b602060405180830381865afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610418919061084e565b600080546001600160a01b038381168352600260205260408084205490516370a0823160e01b815290821660048201529116906370a0823190602401610458565b6003546000906001600160a01b031633146105225760405162461bcd60e51b81526020600482015260086024820152674f6e6c792044414f60c01b604482015260640161030b565b600154600054604051631ac8874560e21b81526001600160a01b039182166004820152858216602482015260448101859052911690636b221d14906064016020604051808303816000875af115801561057f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a39190610867565b9392505050565b6001546001600160a01b031633146105f25760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b604482015260640161030b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161064e9190610889565b6000604051808303816000865af19150503d806000811461068b576040519150601f19603f3d011682016040523d82523d6000602084013e610690565b606091505b50915091508180156106ba5750805115806106ba5750808060200190518101906106ba9190610867565b6106f85760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161030b565b5050505050565b6001546000906001600160a01b0316331461074b5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c7920666163746f727960a01b604482015260640161030b565b50600380546001600160a01b0319166001600160a01b0392909216919091179055600190565b61046c806108b983390190565b80356001600160a01b038116811461079557600080fd5b919050565b6000602082840312156107ac57600080fd5b6105a38261077e565b600080604083850312156107c857600080fd5b6107d18361077e565b91506107df6020840161077e565b90509250929050565b600080604083850312156107fb57600080fd5b6108048361077e565b946020939093013593505050565b60008060006060848603121561082757600080fd5b6108308461077e565b925061083e6020850161077e565b9150604084013590509250925092565b60006020828403121561086057600080fd5b5051919050565b60006020828403121561087957600080fd5b815180151581146105a357600080fd5b6000825160005b818110156108aa5760208186018101518583015201610890565b50600092019182525091905056fe608060405234801561001057600080fd5b5060405161046c38038061046c83398101604081905261002f916100a5565b6001600160a01b0382161580159061004f57506001600160a01b03811615155b61005857600080fd5b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100d8565b80516001600160a01b03811681146100a057600080fd5b919050565b600080604083850312156100b857600080fd5b6100c183610089565b91506100cf60208401610089565b90509250929050565b610385806100e76000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634f8632ba146100515780638943ec0214610081578063c45a0155146100b8578063d1660f99146100cb575b600080fd5b600154610064906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009f61008f366004610234565b6344a1f60160e11b949350505050565b6040516001600160e01b03199091168152602001610078565b600054610064906001600160a01b031681565b6100de6100d93660046102bb565b6100e0565b005b6000546001600160a01b0316331461010b57604051630636a15760e11b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161016791906102f7565b6000604051808303816000865af19150503d80600081146101a4576040519150601f19603f3d011682016040523d82523d6000602084013e6101a9565b606091505b50915091508180156101d35750805115806101d35750808060200190518101906101d39190610326565b6102115760405162461bcd60e51b8152600401610208906020808252600490820152634453553160e01b604082015260600190565b60405180910390fd5b5050505050565b80356001600160a01b038116811461022f57600080fd5b919050565b6000806000806060858703121561024a57600080fd5b61025385610218565b935060208501359250604085013567ffffffffffffffff8082111561027757600080fd5b818701915087601f83011261028b57600080fd5b81358181111561029a57600080fd5b8860208285010111156102ac57600080fd5b95989497505060200194505050565b6000806000606084860312156102d057600080fd5b6102d984610218565b92506102e760208501610218565b9150604084013590509250925092565b6000825160005b8181101561031857602081860181015185830152016102fe565b506000920191825250919050565b60006020828403121561033857600080fd5b8151801515811461034857600080fd5b939250505056fea2646970667358221220fcd69f300d44341dea4eeacad83f40c2e3f08880767792a0401c85baead5b10464736f6c63430008130033a26469706673582212205ca45ec83ab81ceebd0fadb10a49a9cf1a4d728bbd406299e2f3cd5ab3c7e25064736f6c63430008130033